From a286dd013ef8d46edf013efc0908822a59d8ac81 Mon Sep 17 00:00:00 2001 From: Chanho Park Date: Wed, 26 Nov 2014 23:32:42 +0900 Subject: [PATCH] Imported Upstream version 0.160 --- CONTRIBUTING | 2 +- ChangeLog | 154 ++ INSTALL | 8 +- Makefile.am | 6 +- Makefile.in | 337 +-- NEWS | 102 + README | 7 + aclocal.m4 | 659 ++--- backends/ChangeLog | 278 +++ backends/Makefile.am | 46 +- backends/Makefile.in | 438 ++-- backends/aarch64_cfi.c | 82 + backends/aarch64_corenote.c | 163 ++ backends/aarch64_init.c | 69 + backends/aarch64_initreg.c | 92 + backends/aarch64_regs.c | 102 + backends/aarch64_reloc.def | 157 ++ backends/aarch64_retval.c | 376 +++ backends/aarch64_symbol.c | 87 + backends/alpha_retval.c | 31 +- backends/arm_cfi.c | 90 + backends/arm_corenote.c | 22 +- backends/arm_init.c | 11 +- backends/arm_initreg.c | 92 + backends/arm_regs.c | 2 +- backends/arm_reloc.def | 81 +- backends/arm_retval.c | 69 +- backends/arm_symbol.c | 9 +- backends/i386_init.c | 5 +- backends/i386_initreg.c | 79 + backends/i386_retval.c | 31 +- backends/ia64_init.c | 3 +- backends/ia64_retval.c | 53 +- backends/ia64_symbol.c | 9 +- backends/libebl_CPU.h | 43 +- backends/linux-core-note.c | 40 +- backends/ppc64_init.c | 39 +- backends/ppc64_reloc.def | 15 + backends/ppc64_resolve_sym.c | 63 + backends/ppc64_retval.c | 53 +- backends/ppc64_symbol.c | 23 +- backends/ppc_cfi.c | 77 + backends/ppc_corenote.c | 2 +- backends/ppc_init.c | 7 +- backends/ppc_initreg.c | 114 + backends/ppc_regs.c | 2 +- backends/ppc_retval.c | 52 +- backends/s390_cfi.c | 65 + backends/s390_corenote.c | 189 ++ backends/s390_init.c | 18 +- backends/s390_initreg.c | 95 + backends/s390_retval.c | 31 +- backends/s390_unwind.c | 139 ++ backends/s390x_corenote.c | 2 + backends/sh_regs.c | 2 +- backends/sh_retval.c | 51 +- backends/sparc_retval.c | 57 +- backends/tilegx_retval.c | 67 +- backends/x86_64_init.c | 5 +- backends/x86_64_initreg.c | 73 + backends/x86_64_retval.c | 51 +- config.h.in | 42 +- config/ChangeLog | 43 + config/Makefile.in | 114 +- config/ar-lib | 270 +++ config/config.guess | 57 +- config/config.sub | 94 +- config/depcomp | 487 ++-- config/elfutils.spec.in | 77 + config/eu.am | 19 +- config/install-sh | 14 +- config/missing | 414 ++-- config/test-driver | 127 + config/ylwrap | 185 +- configure | 2616 +++++++++++++++----- configure.ac | 85 +- elfutils.spec | 79 +- lib/ChangeLog | 30 + lib/Makefile.am | 2 +- lib/Makefile.in | 233 +- lib/crc32_file.c | 4 + lib/dynamicsizehash.c | 5 +- lib/eu-config.h | 6 + lib/system.h | 73 +- libasm/ChangeLog | 8 + libasm/Makefile.am | 10 +- libasm/Makefile.in | 315 ++- libcpu/ChangeLog | 13 + libcpu/Makefile.am | 10 +- libcpu/Makefile.in | 275 ++- libcpu/i386_lex.c | 65 +- libcpu/i386_parse.c | 332 ++- libcpu/i386_parse.h | 36 +- libdw/ChangeLog | 357 +++ libdw/Makefile.am | 26 +- libdw/Makefile.in | 363 ++- libdw/cfi.c | 8 + libdw/cfi.h | 6 +- libdw/dwarf.h | 4 +- libdw/dwarf_begin_elf.c | 150 +- libdw/dwarf_cu_die.c | 68 + libdw/{memory-access.c => dwarf_cu_getdwarf.c} | 29 +- libdw/dwarf_decl_file.c | 4 +- libdw/dwarf_decl_line.c | 13 +- libdw/dwarf_end.c | 6 +- libdw/dwarf_formref_die.c | 3 +- libdw/dwarf_formstring.c | 4 +- libdw/dwarf_getalt.c | 42 + libdw/dwarf_getaranges.c | 7 +- libdw/dwarf_getcfi_elf.c | 9 +- libdw/dwarf_getfuncs.c | 96 +- libdw/dwarf_getlocation.c | 355 ++- libdw/dwarf_getlocation_attr.c | 103 + libdw/dwarf_getlocation_die.c | 78 + libdw/dwarf_getlocation_implicit_pointer.c | 16 +- libdw/dwarf_getsrcfiles.c | 5 +- libdw/dwarf_getsrclines.c | 46 +- libdw/dwarf_setalt.c | 40 + libdw/fde.c | 57 +- libdw/known-dwarf.h | 1 - libdw/libdw.h | 88 +- libdw/libdw.map | 53 + libdw/libdwP.h | 53 +- libdw/libdw_findcu.c | 3 + libdw/libdw_form.c | 32 +- libdw/libdw_visit_scopes.c | 128 +- libdw/memory-access.h | 117 +- libdwelf/ChangeLog | 23 + libdwelf/Makefile.am | 55 + libdwelf/Makefile.in | 655 +++++ libdwelf/dwelf_dwarf_gnu_debugaltlink.c | 62 + libdwelf/dwelf_elf_gnu_build_id.c | 147 ++ libdwelf/dwelf_elf_gnu_debuglink.c | 99 + libdwelf/libdwelf.h | 72 + libdwelf/libdwelfP.h | 42 + libdwfl/ChangeLog | 812 +++++++ libdwfl/Makefile.am | 20 +- libdwfl/Makefile.in | 296 ++- libdwfl/argp-std.c | 281 ++- libdwfl/core-file.c | 171 +- libdwfl/cu.c | 11 +- libdwfl/derelocate.c | 15 +- libdwfl/dwfl_build_id_find_debuginfo.c | 55 +- libdwfl/dwfl_build_id_find_elf.c | 49 +- libdwfl/dwfl_end.c | 6 +- libdwfl/dwfl_frame.c | 474 ++++ libdwfl/dwfl_frame_pc.c | 64 + libdwfl/dwfl_frame_regs.c | 57 + libdwfl/dwfl_getsrclines.c | 4 +- libdwfl/dwfl_module.c | 21 +- libdwfl/dwfl_module_addrname.c | 6 +- libdwfl/dwfl_module_addrsym.c | 240 +- libdwfl/dwfl_module_build_id.c | 83 +- libdwfl/dwfl_module_getdwarf.c | 502 +++- libdwfl/dwfl_module_getsym.c | 131 +- libdwfl/dwfl_module_info.c | 2 +- libdwfl/dwfl_report_elf.c | 81 +- libdwfl/dwfl_segment_report_module.c | 101 +- libdwfl/elf-from-memory.c | 67 +- libdwfl/find-debuginfo.c | 98 +- libdwfl/frame_unwind.c | 725 ++++++ libdwfl/libdwfl.h | 278 ++- libdwfl/libdwflP.h | 294 ++- libdwfl/link_map.c | 298 ++- libdwfl/linux-core-attach.c | 427 ++++ libdwfl/linux-kernel-modules.c | 33 +- libdwfl/linux-pid-attach.c | 475 ++++ libdwfl/linux-proc-maps.c | 217 +- libdwfl/offline.c | 3 +- libdwfl/open.c | 6 +- libdwfl/relocate.c | 14 +- libdwfl/segment.c | 21 +- libebl/ChangeLog | 96 + libebl/Makefile.am | 7 +- libebl/Makefile.in | 259 +- libebl/ebl-hooks.h | 41 +- libebl/eblcheckreloctargettype.c | 46 + libebl/eblcorenotetypename.c | 18 +- libebl/ebldwarftoregno.c | 41 + libebl/eblinitreg.c | 58 + libebl/eblnormalizepc.c | 40 + libebl/eblopenbackend.c | 14 +- libebl/eblresolvesym.c | 43 + libebl/eblsectionstripp.c | 4 +- libebl/eblunwind.c | 43 + libebl/libebl.h | 87 +- libebl/libeblP.h | 17 +- libelf/ChangeLog | 105 + libelf/Makefile.am | 8 +- libelf/Makefile.in | 317 ++- libelf/elf.h | 558 ++++- libelf/elf32_getphdr.c | 12 +- libelf/elf32_getshdr.c | 15 +- libelf/elf32_newphdr.c | 8 +- libelf/elf32_updatefile.c | 17 +- libelf/elf_begin.c | 37 +- libelf/elf_getarsym.c | 12 +- libelf/elf_getshdrstrndx.c | 44 +- libelf/elf_newscn.c | 12 +- libelf/elf_update.c | 4 - libelf/gelf.h | 2 +- libelf/gelf_getauxv.c | 3 +- libelf/gelf_getdyn.c | 6 +- libelf/gelf_getlib.c | 4 +- libelf/gelf_getmove.c | 4 +- libelf/gelf_getrel.c | 12 +- libelf/gelf_getrela.c | 12 +- libelf/gelf_getsym.c | 6 +- libelf/gelf_getsyminfo.c | 4 +- libelf/gelf_getsymshndx.c | 8 +- libelf/gelf_getversym.c | 4 +- libelf/gelf_update_dyn.c | 12 +- libelf/gelf_update_lib.c | 10 +- libelf/gelf_update_move.c | 5 +- libelf/gelf_update_rel.c | 12 +- libelf/gelf_update_rela.c | 12 +- libelf/gelf_update_sym.c | 12 +- libelf/gelf_update_syminfo.c | 10 +- libelf/gelf_update_symshndx.c | 12 +- libelf/gelf_update_versym.c | 5 +- libelf/libelfP.h | 4 + m4/ChangeLog | 20 + m4/Makefile.in | 112 +- m4/biarch.m4 | 47 + m4/gettext.m4 | 96 +- m4/iconv.m4 | 164 +- m4/po.m4 | 39 +- po/ChangeLog | 28 + po/Makefile.in.in | 56 +- po/de.gmo | Bin 21346 -> 21348 bytes po/de.po | 1767 ++++++++------ po/elfutils.pot | 1747 ++++++++------ po/en@boldquot.gmo | Bin 136069 -> 140258 bytes po/en@boldquot.po | 1824 +++++++------- po/en@quot.gmo | Bin 134357 -> 138526 bytes po/en@quot.po | 1788 ++++++++------ po/es.gmo | Bin 139347 -> 139024 bytes po/es.po | 1790 ++++++++------ po/ja.gmo | Bin 85302 -> 85302 bytes po/ja.po | 1779 ++++++++------ po/pl.gmo | Bin 138783 -> 143622 bytes po/pl.po | 2011 +++++++++------- po/uk.gmo | Bin 186214 -> 188975 bytes po/uk.po | 1806 ++++++++------ src/ChangeLog | 549 +++++ src/Makefile.am | 47 +- src/Makefile.in | 431 ++-- src/addr2line.c | 201 +- src/ar.c | 4 +- src/arlib.c | 12 +- src/elflint.c | 145 +- src/findtextrel.c | 2 +- src/ldlex.c | 65 +- src/ldscript.c | 437 ++-- src/ldscript.h | 36 +- src/nm.c | 117 +- src/readelf.c | 1236 ++++++++-- src/size.c | 30 +- src/stack.c | 760 ++++++ src/strings.c | 41 +- src/strip.c | 95 +- src/unstrip.c | 62 +- tests/ChangeLog | 729 ++++++ tests/Makefile.am | 317 ++- tests/Makefile.in | 2337 ++++++++++++++---- tests/addrcfi.c | 39 +- tests/allfcts.c | 45 +- tests/backtrace-child.c | 240 ++ tests/backtrace-data.c | 328 +++ tests/backtrace-dwarf.c | 165 ++ tests/backtrace-subr.sh | 152 ++ tests/backtrace.aarch64.core.bz2 | Bin 0 -> 7865 bytes tests/backtrace.aarch64.exec.bz2 | Bin 0 -> 370058 bytes tests/backtrace.c | 479 ++++ tests/backtrace.i386.core.bz2 | Bin 0 -> 8777 bytes tests/backtrace.i386.exec.bz2 | Bin 0 -> 383356 bytes tests/backtrace.ppc.core.bz2 | Bin 0 -> 46357 bytes tests/backtrace.ppc.exec.bz2 | Bin 0 -> 352898 bytes tests/backtrace.s390.core.bz2 | Bin 0 -> 7375 bytes tests/backtrace.s390.exec.bz2 | Bin 0 -> 352692 bytes tests/backtrace.s390x.core.bz2 | Bin 0 -> 7740 bytes tests/backtrace.s390x.exec.bz2 | Bin 0 -> 347228 bytes tests/backtrace.x86_64.core.bz2 | Bin 0 -> 11115 bytes tests/backtrace.x86_64.exec.bz2 | Bin 0 -> 401581 bytes tests/buildid.c | 81 + tests/cleanup-13.c | 316 +++ tests/debugaltlink.c | 83 + tests/debuglink.c | 64 + tests/dwfl-report-elf-align.c | 72 + tests/dwfllines.c | 164 ++ tests/dwflsyms.c | 226 ++ tests/funcretval_test.c | 828 +++++++ tests/funcretval_test_aarch64.bz2 | Bin 0 -> 15644 bytes tests/hello_aarch64.ko.bz2 | Bin 0 -> 12768 bytes tests/run-addr2line-i-test.sh | 145 ++ tests/run-addr2line-test.sh | 74 + tests/run-addrcfi.sh | 2650 +++++++++++++++++++++ tests/run-addrname-test.sh | 156 +- tests/run-addrscopes.sh | 4 +- tests/run-alldts.sh | 8 +- tests/run-allfcts-multi.sh | 56 + tests/run-allfcts.sh | 58 +- tests/run-allregs.sh | 147 +- tests/run-arextract.sh | 6 +- tests/run-arsymtest.sh | 6 +- tests/run-backtrace-core-aarch64.sh | 23 + tests/run-backtrace-core-i386.sh | 20 + tests/run-backtrace-core-ppc.sh | 20 + tests/run-backtrace-core-s390.sh | 20 + tests/run-backtrace-core-s390x.sh | 20 + tests/run-backtrace-core-x86_64.sh | 20 + tests/run-backtrace-data.sh | 28 + tests/run-backtrace-demangle.sh | 46 + tests/run-backtrace-dwarf.sh | 30 + tests/run-backtrace-native-biarch.sh | 24 + tests/run-backtrace-native-core-biarch.sh | 24 + tests/run-backtrace-native-core.sh | 20 + tests/run-backtrace-native.sh | 20 + tests/run-bug1-test.sh | 4 +- tests/run-buildid.sh | 38 + tests/run-debugaltlink.sh | 34 + tests/run-debuglink.sh | 29 + tests/run-disasm-x86-64.sh | 2 +- tests/run-disasm-x86.sh | 2 +- tests/run-dwarf-getmacros.sh | 4 +- tests/run-dwarf-getstring.sh | 2 +- tests/run-dwfl-addr-sect.sh | 4 +- tests/run-dwfl-bug-offline-rel.sh | 2 +- tests/run-dwfl-report-elf-align.sh | 44 + tests/run-dwfllines.sh | 88 + tests/run-dwflsyms.sh | 826 +++++++ tests/run-early-offscn.sh | 2 +- tests/run-ecp-test.sh | 2 +- tests/run-ecp-test2.sh | 2 +- tests/run-elf_cntl_gelf_getshdr.sh | 10 +- tests/run-elflint-self.sh | 2 +- tests/run-elflint-test.sh | 12 +- tests/run-find-prologues.sh | 18 +- tests/run-funcretval.sh | 153 ++ tests/run-funcscopes.sh | 2 +- tests/run-get-aranges.sh | 2 +- tests/run-get-files.sh | 2 +- tests/run-get-lines.sh | 33 +- tests/run-get-pubnames.sh | 2 +- tests/run-line2addr.sh | 10 +- tests/run-low_high_pc.sh | 10 +- tests/run-macro-test.sh | 7 +- tests/run-native-test.sh | 15 +- tests/run-nm-self.sh | 14 +- tests/run-prelink-addr-test.sh | 30 +- tests/run-ranlib-test.sh | 2 +- tests/run-ranlib-test2.sh | 2 +- tests/run-readelf-aranges.sh | 161 ++ tests/run-readelf-d.sh | 2 +- tests/run-readelf-dwz-multi.sh | 190 +- tests/run-readelf-gdb_index.sh | 4 +- tests/run-readelf-line.sh | 259 ++ tests/run-readelf-loc.sh | 109 + tests/run-readelf-macro.sh | 2 +- tests/run-readelf-mixed-corenote.sh | 493 ++++ tests/run-readelf-s.sh | 378 +++ tests/run-readelf-self.sh | 2 +- tests/run-readelf-test1.sh | 2 +- tests/run-readelf-test2.sh | 2 +- tests/run-readelf-test3.sh | 2 +- tests/run-readelf-test4.sh | 2 +- tests/run-readelf-twofiles.sh | 2 +- tests/run-readelf-vmcoreinfo.sh | 114 + tests/run-readelf-zdebug.sh | 539 +++++ tests/run-rerequest_tag.sh | 4 +- tests/run-show-abbrev.sh | 2 +- tests/run-show-die-info.sh | 2 +- tests/run-stack-d-test.sh | 112 + tests/run-stack-i-test.sh | 70 + tests/run-strings-test.sh | 2 +- tests/run-strip-groups.sh | 8 +- tests/run-strip-reloc.sh | 27 +- tests/run-strip-test.sh | 12 +- tests/run-test-archive64.sh | 2 +- tests/run-test-flag-nobits.sh | 2 +- tests/run-typeiter.sh | 6 +- tests/run-unstrip-M.sh | 51 + tests/run-unstrip-n.sh | 42 +- tests/run-unstrip-test.sh | 8 +- tests/run-varlocs.sh | 128 + tests/test-core-lib.so.bz2 | Bin 0 -> 2028 bytes tests/test-core.core.bz2 | Bin 0 -> 14165 bytes tests/test-core.exec.bz2 | Bin 0 -> 2565 bytes tests/test-offset-loop.alt.bz2 | Bin 0 -> 685 bytes tests/test-offset-loop.bz2 | Bin 0 -> 3062 bytes tests/test-subr.sh | 40 +- tests/test-wrapper.sh | 4 + tests/testfile-backtrace-demangle.bz2 | Bin 0 -> 3016 bytes tests/testfile-backtrace-demangle.cc | 47 + tests/testfile-backtrace-demangle.core.bz2 | Bin 0 -> 39510 bytes tests/testfile-debug.bz2 | Bin 0 -> 5441 bytes tests/testfile-dwfl-report-elf-align-shlib.so.bz2 | Bin 0 -> 1546 bytes tests/testfile-dwzstr.bz2 | Bin 0 -> 2768 bytes tests/testfile-dwzstr.multi.bz2 | Bin 0 -> 518 bytes tests/testfile-inlines.bz2 | Bin 0 -> 2815 bytes tests/testfile-zdebug.bz2 | Bin 0 -> 6647 bytes tests/testfile42_noshdrs.bz2 | Bin 0 -> 6746 bytes tests/testfile61.bz2 | Bin 0 -> 7906 bytes tests/testfile62.bz2 | Bin 0 -> 3506 bytes tests/testfile63.bz2 | Bin 0 -> 457 bytes tests/testfile64.bz2 | Bin 0 -> 395 bytes tests/testfile65.bz2 | Bin 0 -> 4674 bytes tests/testfile66.bz2 | Bin 0 -> 741 bytes tests/testfile66.core.bz2 | Bin 0 -> 56448 bytes tests/testfile67.bz2 | Bin 0 -> 424 bytes tests/testfile68.bz2 | Bin 0 -> 399 bytes tests/testfile69.core.bz2 | Bin 0 -> 4416 bytes tests/testfile69.so.bz2 | Bin 0 -> 2099 bytes tests/testfile70.core.bz2 | Bin 0 -> 2739 bytes tests/testfile70.exec.bz2 | Bin 0 -> 2567 bytes tests/testfile71.bz2 | Bin 0 -> 18164 bytes tests/testfile_aarch64_core.bz2 | Bin 0 -> 61748 bytes tests/testfile_class_func.bz2 | Bin 0 -> 2962 bytes tests/testfile_const_type.bz2 | Bin 0 -> 3353 bytes tests/testfile_const_type.c | 14 + tests/testfile_entry_value.bz2 | Bin 0 -> 3309 bytes tests/testfile_entry_value.c | 19 + tests/testfile_i686_core.bz2 | Bin 0 -> 15980 bytes tests/testfile_implicit_pointer.bz2 | Bin 0 -> 2952 bytes tests/testfile_implicit_pointer.c | 12 + tests/testfile_implicit_value.bz2 | Bin 0 -> 2973 bytes tests/testfile_implicit_value.c | 12 + tests/testfile_nested_funcs.bz2 | Bin 0 -> 3045 bytes tests/testfile_parameter_ref.bz2 | Bin 0 -> 3329 bytes tests/testfile_parameter_ref.c | 20 + tests/testfileaarch64.bz2 | Bin 0 -> 3441 bytes tests/testfilearm.bz2 | Bin 0 -> 3545 bytes tests/testfilebasmin.bz2 | Bin 0 -> 1082 bytes tests/testfilebaxmin.bz2 | Bin 0 -> 2987 bytes tests/testfilebazdbg.bz2 | Bin 0 -> 2185 bytes tests/testfilebazdbg.debug.bz2 | Bin 0 -> 2187 bytes tests/testfilebazdbg_pl.bz2 | Bin 0 -> 2589 bytes tests/testfilebazdbg_plr.bz2 | Bin 0 -> 2241 bytes tests/testfilebazdbgppc64.bz2 | Bin 0 -> 2366 bytes tests/testfilebazdbgppc64.debug.bz2 | Bin 0 -> 2295 bytes tests/testfilebazdbgppc64_pl.bz2 | Bin 0 -> 2775 bytes tests/testfilebazdbgppc64_plr.bz2 | Bin 0 -> 2399 bytes tests/testfilebazdyn.bz2 | Bin 0 -> 2164 bytes tests/testfilebazdynppc64.bz2 | Bin 0 -> 2327 bytes tests/testfilebazmdb.bz2 | Bin 0 -> 3313 bytes tests/testfilebazmdbppc64.bz2 | Bin 0 -> 3528 bytes tests/testfilebazmin.bz2 | Bin 0 -> 3323 bytes tests/testfilebazmin_pl.bz2 | Bin 0 -> 3749 bytes tests/testfilebazmin_plr.bz2 | Bin 0 -> 3337 bytes tests/testfilebazminppc64.bz2 | Bin 0 -> 3464 bytes tests/testfilebazminppc64_pl.bz2 | Bin 0 -> 3900 bytes tests/testfilebazminppc64_plr.bz2 | Bin 0 -> 3535 bytes tests/testfilebaztab.bz2 | Bin 0 -> 3418 bytes tests/testfilebaztabppc64.bz2 | Bin 0 -> 3697 bytes tests/testfiledwarfinlines.bz2 | Bin 0 -> 4225 bytes tests/testfiledwarfinlines.core.bz2 | Bin 0 -> 39713 bytes tests/testfilefoobarbaz.bz2 | Bin 0 -> 3974 bytes tests/testfileloc.bz2 | Bin 0 -> 3148 bytes tests/testfilenolines.bz2 | Bin 0 -> 2855 bytes tests/testfileppc32.bz2 | Bin 0 -> 3344 bytes tests/testfileppc64.bz2 | Bin 0 -> 3351 bytes tests/testfiles390.bz2 | Bin 0 -> 3132 bytes tests/testfiles390x.bz2 | Bin 0 -> 3026 bytes tests/typeiter2.c | 89 + tests/update1.c | 5 +- tests/update2.c | 5 +- tests/update3.c | 5 +- tests/update4.c | 2 +- tests/varlocs.c | 826 +++++++ version.h | 2 +- 470 files changed, 45559 insertions(+), 12681 deletions(-) create mode 100644 backends/aarch64_cfi.c create mode 100644 backends/aarch64_corenote.c create mode 100644 backends/aarch64_init.c create mode 100644 backends/aarch64_initreg.c create mode 100644 backends/aarch64_regs.c create mode 100644 backends/aarch64_reloc.def create mode 100644 backends/aarch64_retval.c create mode 100644 backends/aarch64_symbol.c create mode 100644 backends/arm_cfi.c create mode 100644 backends/arm_initreg.c create mode 100644 backends/i386_initreg.c create mode 100644 backends/ppc64_resolve_sym.c create mode 100644 backends/ppc_cfi.c create mode 100644 backends/ppc_initreg.c create mode 100644 backends/s390_cfi.c create mode 100644 backends/s390_corenote.c create mode 100644 backends/s390_initreg.c create mode 100644 backends/s390_unwind.c create mode 100644 backends/s390x_corenote.c create mode 100644 backends/x86_64_initreg.c create mode 100755 config/ar-lib create mode 100755 config/test-driver create mode 100644 libdw/dwarf_cu_die.c rename libdw/{memory-access.c => dwarf_cu_getdwarf.c} (68%) create mode 100644 libdw/dwarf_getalt.c create mode 100644 libdw/dwarf_getlocation_attr.c create mode 100644 libdw/dwarf_getlocation_die.c create mode 100644 libdw/dwarf_setalt.c create mode 100644 libdwelf/ChangeLog create mode 100644 libdwelf/Makefile.am create mode 100644 libdwelf/Makefile.in create mode 100644 libdwelf/dwelf_dwarf_gnu_debugaltlink.c create mode 100644 libdwelf/dwelf_elf_gnu_build_id.c create mode 100644 libdwelf/dwelf_elf_gnu_debuglink.c create mode 100644 libdwelf/libdwelf.h create mode 100644 libdwelf/libdwelfP.h create mode 100644 libdwfl/dwfl_frame.c create mode 100644 libdwfl/dwfl_frame_pc.c create mode 100644 libdwfl/dwfl_frame_regs.c create mode 100644 libdwfl/frame_unwind.c create mode 100644 libdwfl/linux-core-attach.c create mode 100644 libdwfl/linux-pid-attach.c create mode 100644 libebl/eblcheckreloctargettype.c create mode 100644 libebl/ebldwarftoregno.c create mode 100644 libebl/eblinitreg.c create mode 100644 libebl/eblnormalizepc.c create mode 100644 libebl/eblresolvesym.c create mode 100644 libebl/eblunwind.c create mode 100644 m4/biarch.m4 create mode 100644 src/stack.c create mode 100644 tests/backtrace-child.c create mode 100644 tests/backtrace-data.c create mode 100644 tests/backtrace-dwarf.c create mode 100644 tests/backtrace-subr.sh create mode 100644 tests/backtrace.aarch64.core.bz2 create mode 100755 tests/backtrace.aarch64.exec.bz2 create mode 100644 tests/backtrace.c create mode 100644 tests/backtrace.i386.core.bz2 create mode 100644 tests/backtrace.i386.exec.bz2 create mode 100644 tests/backtrace.ppc.core.bz2 create mode 100644 tests/backtrace.ppc.exec.bz2 create mode 100644 tests/backtrace.s390.core.bz2 create mode 100644 tests/backtrace.s390.exec.bz2 create mode 100644 tests/backtrace.s390x.core.bz2 create mode 100644 tests/backtrace.s390x.exec.bz2 create mode 100644 tests/backtrace.x86_64.core.bz2 create mode 100644 tests/backtrace.x86_64.exec.bz2 create mode 100644 tests/buildid.c create mode 100644 tests/cleanup-13.c create mode 100644 tests/debugaltlink.c create mode 100644 tests/debuglink.c create mode 100644 tests/dwfl-report-elf-align.c create mode 100644 tests/dwfllines.c create mode 100644 tests/dwflsyms.c create mode 100644 tests/funcretval_test.c create mode 100755 tests/funcretval_test_aarch64.bz2 create mode 100644 tests/hello_aarch64.ko.bz2 create mode 100755 tests/run-addr2line-i-test.sh create mode 100755 tests/run-addr2line-test.sh create mode 100755 tests/run-addrcfi.sh create mode 100755 tests/run-allfcts-multi.sh create mode 100755 tests/run-backtrace-core-aarch64.sh create mode 100755 tests/run-backtrace-core-i386.sh create mode 100755 tests/run-backtrace-core-ppc.sh create mode 100755 tests/run-backtrace-core-s390.sh create mode 100755 tests/run-backtrace-core-s390x.sh create mode 100755 tests/run-backtrace-core-x86_64.sh create mode 100755 tests/run-backtrace-data.sh create mode 100755 tests/run-backtrace-demangle.sh create mode 100755 tests/run-backtrace-dwarf.sh create mode 100755 tests/run-backtrace-native-biarch.sh create mode 100755 tests/run-backtrace-native-core-biarch.sh create mode 100755 tests/run-backtrace-native-core.sh create mode 100755 tests/run-backtrace-native.sh create mode 100755 tests/run-buildid.sh create mode 100755 tests/run-debugaltlink.sh create mode 100755 tests/run-debuglink.sh create mode 100755 tests/run-dwfl-report-elf-align.sh create mode 100755 tests/run-dwfllines.sh create mode 100755 tests/run-dwflsyms.sh create mode 100755 tests/run-funcretval.sh create mode 100755 tests/run-readelf-aranges.sh create mode 100755 tests/run-readelf-line.sh create mode 100755 tests/run-readelf-loc.sh create mode 100755 tests/run-readelf-mixed-corenote.sh create mode 100755 tests/run-readelf-s.sh create mode 100755 tests/run-readelf-vmcoreinfo.sh create mode 100755 tests/run-readelf-zdebug.sh create mode 100755 tests/run-stack-d-test.sh create mode 100755 tests/run-stack-i-test.sh create mode 100755 tests/run-unstrip-M.sh create mode 100755 tests/run-varlocs.sh create mode 100755 tests/test-core-lib.so.bz2 create mode 100644 tests/test-core.core.bz2 create mode 100755 tests/test-core.exec.bz2 create mode 100644 tests/test-offset-loop.alt.bz2 create mode 100755 tests/test-offset-loop.bz2 create mode 100755 tests/testfile-backtrace-demangle.bz2 create mode 100644 tests/testfile-backtrace-demangle.cc create mode 100644 tests/testfile-backtrace-demangle.core.bz2 create mode 100755 tests/testfile-debug.bz2 create mode 100755 tests/testfile-dwfl-report-elf-align-shlib.so.bz2 create mode 100755 tests/testfile-dwzstr.bz2 create mode 100644 tests/testfile-dwzstr.multi.bz2 create mode 100755 tests/testfile-inlines.bz2 create mode 100755 tests/testfile-zdebug.bz2 create mode 100644 tests/testfile42_noshdrs.bz2 create mode 100644 tests/testfile61.bz2 create mode 100644 tests/testfile62.bz2 create mode 100644 tests/testfile63.bz2 create mode 100644 tests/testfile64.bz2 create mode 100644 tests/testfile65.bz2 create mode 100755 tests/testfile66.bz2 create mode 100644 tests/testfile66.core.bz2 create mode 100644 tests/testfile67.bz2 create mode 100644 tests/testfile68.bz2 create mode 100644 tests/testfile69.core.bz2 create mode 100755 tests/testfile69.so.bz2 create mode 100644 tests/testfile70.core.bz2 create mode 100644 tests/testfile70.exec.bz2 create mode 100644 tests/testfile71.bz2 create mode 100644 tests/testfile_aarch64_core.bz2 create mode 100755 tests/testfile_class_func.bz2 create mode 100755 tests/testfile_const_type.bz2 create mode 100644 tests/testfile_const_type.c create mode 100755 tests/testfile_entry_value.bz2 create mode 100644 tests/testfile_entry_value.c create mode 100644 tests/testfile_i686_core.bz2 create mode 100755 tests/testfile_implicit_pointer.bz2 create mode 100644 tests/testfile_implicit_pointer.c create mode 100755 tests/testfile_implicit_value.bz2 create mode 100644 tests/testfile_implicit_value.c create mode 100755 tests/testfile_nested_funcs.bz2 create mode 100755 tests/testfile_parameter_ref.bz2 create mode 100644 tests/testfile_parameter_ref.c create mode 100755 tests/testfileaarch64.bz2 create mode 100755 tests/testfilearm.bz2 create mode 100755 tests/testfilebasmin.bz2 create mode 100755 tests/testfilebaxmin.bz2 create mode 100755 tests/testfilebazdbg.bz2 create mode 100755 tests/testfilebazdbg.debug.bz2 create mode 100755 tests/testfilebazdbg_pl.bz2 create mode 100755 tests/testfilebazdbg_plr.bz2 create mode 100755 tests/testfilebazdbgppc64.bz2 create mode 100755 tests/testfilebazdbgppc64.debug.bz2 create mode 100755 tests/testfilebazdbgppc64_pl.bz2 create mode 100755 tests/testfilebazdbgppc64_plr.bz2 create mode 100755 tests/testfilebazdyn.bz2 create mode 100755 tests/testfilebazdynppc64.bz2 create mode 100755 tests/testfilebazmdb.bz2 create mode 100755 tests/testfilebazmdbppc64.bz2 create mode 100755 tests/testfilebazmin.bz2 create mode 100755 tests/testfilebazmin_pl.bz2 create mode 100755 tests/testfilebazmin_plr.bz2 create mode 100755 tests/testfilebazminppc64.bz2 create mode 100755 tests/testfilebazminppc64_pl.bz2 create mode 100755 tests/testfilebazminppc64_plr.bz2 create mode 100755 tests/testfilebaztab.bz2 create mode 100755 tests/testfilebaztabppc64.bz2 create mode 100755 tests/testfiledwarfinlines.bz2 create mode 100644 tests/testfiledwarfinlines.core.bz2 create mode 100755 tests/testfilefoobarbaz.bz2 create mode 100755 tests/testfileloc.bz2 create mode 100755 tests/testfilenolines.bz2 create mode 100755 tests/testfileppc32.bz2 create mode 100755 tests/testfileppc64.bz2 create mode 100755 tests/testfiles390.bz2 create mode 100755 tests/testfiles390x.bz2 create mode 100644 tests/typeiter2.c create mode 100644 tests/varlocs.c diff --git a/CONTRIBUTING b/CONTRIBUTING index 2a3859a..3f5e5aa 100644 --- a/CONTRIBUTING +++ b/CONTRIBUTING @@ -44,5 +44,5 @@ Signed-off-by: Random J Developer using your real name (sorry, no pseudonyms or anonymous contributions.) -git commit --signoff will add such a Signed-off-by line by at the end of +git commit --signoff will add such a Signed-off-by line at the end of the commit log message for you. diff --git a/ChangeLog b/ChangeLog index 208e425..8277932 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,157 @@ +2014-08-25 Mark Wielaard + + * 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 + + * NEWS: Add dwarf_cu_die. + +2014-08-15 Mark Wielaard + + * NEWS: Add dwarf_cu_getdwarf. + +2014-07-18 Mark Wielaard + + * configure.ac (AC_CHECK_TYPE): Test for struct user_regs_struct. + +2014-05-26 Mark Wielaard + + * NEWS: New section 0.160. Add unstrip --force. + +2014-05-17 Mark Wielaard + + * configure.ac: Set version to 0.159. + * NEWS: Add entries for version 0.159. + +2014-05-02 Mark Wielaard + + * NEWS: Add note about dwz support no longer being experimental and + new helper functions. + * configure.ac: Remove --enable-dwz. + * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Remove --enable-dwz. + +2014-04-11 Mark Wielaard + + * Makefile.am (SUBDIRS): Add libdwelf. + * configure.ac (AC_CONFIG_FILES): Add libdwelf/Makefile. + * NEWS: Add note about libdwelf. + +2014-04-13 Mark Wielaard + + * configure.ac: Remove mudflap enable arg and MUDFLAP conditional. + +2014-01-21 Mark Wielaard + + * NEWS (Version 0.159): Add stack -i. + +2014-01-20 Mark Wielaard + + * NEWS (Version 0.159): New. Add stack -d. + +2014-01-03 Mark Wielaard + + * configure.ac: Set version to 0.158. + * NEWS: Add entries for version 0.158. + +2013-12-20 Mark Wielaard + + * NEWS (libdwfl): Add dwfl_getthread_frames. + (stack): New entry. + +2013-12-18 Mark Wielaard + + * NEWS (libdwfl): Add dwfl_module_getsym_info and + dwfl_module_addrinfo. + (addr2line): Add -x option. + +2013-12-17 Jan Kratochvil + + * NEWS (Version 0.158) (libdwfl): Added Dwfl_Thread_Callbacks, + Dwfl_Thread, Dwfl_Frame, dwfl_attach_state, dwfl_pid, dwfl_thread_dwfl, + dwfl_thread_tid, dwfl_frame_thread, dwfl_thread_state_registers, + dwfl_thread_state_register_pc, dwfl_getthreads, dwfl_thread_getframes + and dwfl_frame_pc. + +2013-12-16 Mark Wielaard + + * NEWS (libdwfl): Add dwfl_module_getsymtab_first_global. + +2013-12-09 Josh Stone + + * .gitignore: Add config/ar-lib, installed due to AM_PROG_AR. + +2013-12-02 Jan Kratochvil + + * configure.ac (CC_BIARCH): Remove AS_IF for it. + +2013-11-07 Jan Kratochvil + + * configure.ac: New AC_CHECK_SIZEOF for long. Call utrace_BIARCH, new + AC_SUBST for CC_BIARCH. + +2013-11-06 Mark Wielaard + + * configure.ac (--enable-dwz): Add AC_MSG_WARN when disabled but + local system does have /usr/lib/debug/.dwz. + +2013-11-06 Mark Wielaard + + * configure.ac (--enable-thread-safety): Add AC_MSG_WARN experimental + option. + +2013-11-01 Michael Forney + + * configure.ac: Call AM_PROG_AR and AC_CHECK_TOOL for readelf and nm. + +2013-10-30 Jan Kratochvil + + * NEWS (Version 0.158): New. + +2013-09-30 Mark Wielaard + + * NEWS: Update for readelf NT_SIGINFO and NT_FILE core notes. + +2013-09-27 Mark Wielaard + + * configure.ac: Set version to 0.157. + * NEWS: Add entries for version 0.157. + +2013-09-20 Mark Wielaard + + * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Add --enable-dwz. + +2013-07-25 Jan Kratochvil + + * configure.ac: Set version to 0.156. + +2013-07-19 Jan Kratochvil + + * NEWS: Remove bugfix only entries from Version 0.156. + +2013-07-18 Jan Kratochvil + + * NEWS: Add entries for Version 0.156. + +2013-04-28 Jan Kratochvil + + * NEWS (Version 0.156): New. + +2013-04-26 Mark Wielaard + + * configure.ac (AM_INIT_AUTOMAKE): Request parallel-tests. + +2013-04-25 Mark Wielaard + + * .gitignore: Add config/test-driver as installed by automake 1.13. + * configure.ac (AM_INIT_AUTOMAKE): Require at least automake 1.11. + +2012-10-01 Mark Wielaard + + * configure.ac: Add --enable-valgrind check. + * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Add --enable-valgrind. + 2012-08-27 Mark Wielaard * configure.ac: Set version to 0.155. diff --git a/INSTALL b/INSTALL index a1e89e1..007e939 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ Installation Instructions ************************* -Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, @@ -309,9 +309,10 @@ causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== @@ -367,4 +368,3 @@ operates. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. - diff --git a/Makefile.am b/Makefile.am index 305bbfc..d044a7c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,8 +23,8 @@ ACLOCAL_AMFLAGS = -I m4 pkginclude_HEADERS = version.h # Add doc back when we have some real content. -SUBDIRS = config m4 lib libelf libebl libdwfl libdw libcpu libasm backends \ - src po tests +SUBDIRS = config m4 lib libelf libebl libdwelf libdwfl libdw libcpu libasm \ + backends src po tests EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ COPYING COPYING-GPLV2 COPYING-LGPLV3 @@ -32,8 +32,10 @@ EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ # Make sure the test install uses lib64 when $LIB will yield lib64. # Make sure the test build uses the same compiler, which on e.g. ppc64 # determines which platform we are actually testing. +# Run all tests under valgrind. DISTCHECK_CONFIGURE_FLAGS = \ --libdir=`echo $(libdir) | sed "s,^$(exec_prefix),$$dc_install_base,"`\ + --enable-valgrind \ CC="$(CC)" distcheck-hook: diff --git a/Makefile.in b/Makefile.in index 519bd73..ea448e1 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -16,6 +15,51 @@ @SET_MAKE@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -35,13 +79,18 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . -DIST_COMMON = README $(am__configure_deps) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ +DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog THANKS \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in $(top_srcdir)/config/elfutils.spec.in \ - $(top_srcdir)/config/version.h.in $(top_srcdir)/configure \ - ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS THANKS TODO + $(top_srcdir)/config/version.h.in $(pkginclude_HEADERS) \ + ABOUT-NLS COPYING TODO $(top_srcdir)/config/ar-lib \ + $(top_srcdir)/config/config.guess \ + $(top_srcdir)/config/config.sub \ + $(top_srcdir)/config/install-sh $(top_srcdir)/config/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -52,15 +101,33 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = elfutils.spec version.h CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = SOURCES = DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -92,11 +159,33 @@ am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) @@ -107,6 +196,7 @@ am__remove_distdir = \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi +am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ @@ -134,19 +224,24 @@ am__relativize = \ reldir="$$dir2" GZIP_ENV = --best DIST_ARCHIVES = $(distdir).tar.bz2 +DIST_TARGETS = dist-bzip2 distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -155,10 +250,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -179,6 +277,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -189,6 +288,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -203,6 +303,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -256,8 +357,8 @@ ACLOCAL_AMFLAGS = -I m4 pkginclude_HEADERS = version.h # Add doc back when we have some real content. -SUBDIRS = config m4 lib libelf libebl libdwfl libdw libcpu libasm backends \ - src po tests +SUBDIRS = config m4 lib libelf libebl libdwelf libdwfl libdw libcpu libasm \ + backends src po tests EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ COPYING COPYING-GPLV2 COPYING-LGPLV3 @@ -266,8 +367,10 @@ EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ # Make sure the test install uses lib64 when $LIB will yield lib64. # Make sure the test build uses the same compiler, which on e.g. ppc64 # determines which platform we are actually testing. +# Run all tests under valgrind. DISTCHECK_CONFIGURE_FLAGS = \ --libdir=`echo $(libdir) | sed "s,^$(exec_prefix),$$dc_install_base,"`\ + --enable-valgrind \ CC="$(CC)" all: config.h @@ -329,8 +432,11 @@ version.h: $(top_builddir)/config.status $(top_srcdir)/config/version.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -347,22 +453,25 @@ uninstall-pkgincludeHEADERS: dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ @@ -377,57 +486,12 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ @@ -443,12 +507,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -460,15 +519,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -477,9 +532,31 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) @case `sed 15q $(srcdir)/NEWS` in \ @@ -521,13 +598,10 @@ distdir: $(DISTFILES) done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ @@ -556,39 +630,35 @@ distdir: $(DISTFILES) || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) + $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__remove_distdir) + $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) + $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__remove_distdir) + $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) + $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) + $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) + $(am__post_remove_distdir) -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__remove_distdir) +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another @@ -599,8 +669,6 @@ distcheck: dist GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ @@ -612,9 +680,9 @@ distcheck: dist *.zip*) \ unzip $(distdir).zip ;;\ esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ @@ -647,7 +715,7 @@ distcheck: dist && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 - $(am__remove_distdir) + $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' @@ -784,13 +852,12 @@ ps-am: uninstall-am: uninstall-pkgincludeHEADERS -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - ctags-recursive install-am install-strip tags-recursive +.MAKE: $(am__recursive_targets) all install-am install-strip -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ + dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ @@ -801,7 +868,7 @@ uninstall-am: uninstall-pkgincludeHEADERS install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ - pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS diff --git a/NEWS b/NEWS index e38e60c..aceb3e3 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,105 @@ +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. + New option -i, --inlines to show inlined frames using DWARF debuginfo. + +libdwelf: New libdwelf.h header for libdw.so DWARF ELF Low-level Functions. + New function dwelf_elf_gnu_debuglink, dwelf_dwarf_gnu_debugaltlink, + and dwelf_elf_gnu_build_id. + +libdw: Support for DWZ multifile forms DW_FORM_GNU_ref_alt and + DW_FORM_GNU_strp_alt is now enabled by default and no longer + experimental. Added new functions dwarf_getalt and dwarf_setalt + to get or set the alternative debug file used for the alt FORMs. + The dwfl_linux_proc_find_elf callback will now find ELF from + process memory for (deleted) files if the Dwfl has process state + attached. + +libdwfl: The dwfl_build_id_find_debuginfo and dwfl_standard_find_debuginfo + functions will now try to resolve and set the alternative debug file. + +backends: Add CFI unwinding for arm. Relies on .debug_frame. + Add arm process initial register state compatible mode to AARCH64. + Add aarch64 native and core unwind support. + +other: All separate elfutils-robustify patches have been merged. + CVE-2014-0172 Check overflow before calling malloc to uncompress data. + +Version 0.158 + +libdwfl: dwfl_core_file_report has new parameter executable. + New functions dwfl_module_getsymtab_first_global, + dwfl_module_getsym_info and dwfl_module_addrinfo. + Added unwinder with type Dwfl_Thread_Callbacks, opaque types + Dwfl_Thread and Dwfl_Frame and functions dwfl_attach_state, + dwfl_pid, dwfl_thread_dwfl, dwfl_thread_tid, dwfl_frame_thread, + dwfl_thread_state_registers, dwfl_thread_state_register_pc, + dwfl_getthread_frames, dwfl_getthreads, dwfl_thread_getframes + and dwfl_frame_pc. + +addr2line: New option -x to show the section an address was found in. + +stack: New utility that uses the new unwinder for processes and cores. + +backends: Unwinder support for i386, x86_64, s390, s390x, ppc and ppc64. + aarch64 support. + +Version 0.157 + +libdw: Add new functions dwarf_getlocations, dwarf_getlocation_attr + and dwarf_getlocation_die. + +readelf: Show contents of NT_SIGINFO and NT_FILE core notes. + +addr2line: Support -i, --inlines output option. + +backends: abi_cfi hook for arm, ppc and s390. + +Version 0.156 + +lib: New macro COMPAT_VERSION_NEWPROTO. + +libdw: Handle GNU extension opcodes in dwarf_getlocation. + +libdwfl: Fix STB_GLOBAL over STB_WEAK preference in dwfl_module_addrsym. + Add minisymtab support. + Add parameter add_p_vaddr to dwfl_report_elf. + Use DT_DEBUG library search first. + +libebl: Handle new core note types in EBL. + +backends: Interpret NT_ARM_VFP. + Implement core file registers parsing for s390/s390x. + +readelf: Add --elf-section input option to inspect an embedded ELF file. + Add -U, --unresolved-address-offsets output control. + Add --debug-dump=decodedline support. + Accept version 8 .gdb_index section format. + Adjust output formatting width. + When highpc is in constant form print it also as address. + Display raw .debug_aranges. Use libdw only for decodedaranges. + +elflint: Add __bss_start__ to the list of allowed symbols. + +tests: Add configure --enable-valgrind option to run all tests under valgrind. + Enable automake parallel-tests for make check. + +translations: Updated Polish translation. + +Updates for Automake 1.13. + Version 0.155 libelf: elf*_xlatetomd now works for cross-endian ELF note data. diff --git a/README b/README index 33cac74..f7e4b61 100644 --- a/README +++ b/README @@ -10,3 +10,10 @@ Fundamental design decision: users must match. No third-party EBL module are supported or allowed. The only reason there are separate modules is to not have the code for all architectures in all the binaries. + +- although the public libraries (libasm, libdw) have a stable API and are + backwards ABI compatible they, and the elfutils tools, do depend on each + others internals, and on internals of libelf to provide their interfaces. + So they should always be upgraded in lockstep when packaging the tools + and libraries separately. For one example of how to do that, see the + config/elfutils.spec. diff --git a/aclocal.m4 b/aclocal.m4 index 5e11db7..451a3ff 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,8 +1,7 @@ -# generated automatically by aclocal 1.11.3 -*- Autoconf -*- +# generated automatically by aclocal 1.13.4 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, -# Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -12,33 +11,31 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, -[m4_warning([this file was generated for autoconf 2.68. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 - # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' +[am__api_version='1.13' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.3], [], +m4_if([$1], [1.13.4], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -54,24 +51,81 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.3])dnl +[AM_AUTOMAKE_VERSION([1.13.4])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_AR([ACT-IF-FAIL]) +# ------------------------- +# Try to determine the archiver interface, and trigger the ar-lib wrapper +# if it is needed. If the detection of archiver interface fails, run +# ACT-IF-FAIL (default is to abort configure with a proper error message). +AC_DEFUN([AM_PROG_AR], +[AC_BEFORE([$0], [LT_INIT])dnl +AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([ar-lib])dnl +AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) +: ${AR=ar} + +AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], + [am_cv_ar_interface=ar + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], + [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=ar + else + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=lib + else + am_cv_ar_interface=unknown + fi + fi + rm -f conftest.lib libconftest.a + ]) + ]) + +case $am_cv_ar_interface in +ar) + ;; +lib) + # Microsoft lib, so override with the ar-lib wrapper script. + # FIXME: It is wrong to rewrite AR. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__AR in this case, + # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something + # similar. + AR="$am_aux_dir/ar-lib $AR" + ;; +unknown) + m4_default([$1], + [AC_MSG_ERROR([could not determine $AR interface])]) + ;; +esac +AC_SUBST([AR])dnl +]) + # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 - # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and @@ -90,7 +144,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you +# harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, @@ -116,22 +170,19 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 - # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl @@ -150,16 +201,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, -# 2010, 2011 Free Software Foundation, Inc. +# Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing @@ -169,7 +218,7 @@ fi])]) # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was @@ -182,12 +231,13 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], @@ -195,8 +245,8 @@ AC_CACHE_CHECK([dependency style of $depcc], # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -236,16 +286,16 @@ AC_CACHE_CHECK([dependency style of $depcc], : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -254,8 +304,8 @@ AC_CACHE_CHECK([dependency style of $depcc], test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -263,7 +313,7 @@ AC_CACHE_CHECK([dependency style of $depcc], fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -311,7 +361,7 @@ AM_CONDITIONAL([am__fastdep$1], [ # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl @@ -321,9 +371,13 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' @@ -338,20 +392,18 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files + # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in @@ -364,7 +416,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but + # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -376,21 +428,19 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. + # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue + test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` @@ -408,7 +458,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will +# is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], @@ -418,15 +468,12 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 16 - # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -442,7 +489,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl +[AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -471,31 +518,40 @@ AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl @@ -506,28 +562,32 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], @@ -555,15 +615,12 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, -# Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 - # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. @@ -577,16 +634,14 @@ if test x"${install_sh}" != xset; then install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi -AC_SUBST(install_sh)]) +AC_SUBST([install_sh])]) -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 - # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], @@ -600,21 +655,18 @@ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) -# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005 -# Free Software Foundation, Inc. +# Copyright (C) 1998-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 - # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], -[AC_PREREQ(2.50)dnl +[AC_PREREQ([2.50])dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then @@ -624,20 +676,17 @@ fi]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, -# 2011 Free Software Foundation, Inc. +# Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 - # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless `enable' is passed literally. -# For symmetry, `disable' may be passed as well. Anyway, the user +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), @@ -648,10 +697,11 @@ AC_DEFUN([AM_MAINTAINER_MODE], AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], -[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE @@ -659,18 +709,14 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) ] ) -AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) - # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 - # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. @@ -688,7 +734,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. +# Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -715,15 +761,12 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 6 - # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], @@ -731,11 +774,10 @@ AC_DEFUN([AM_MISSING_PROG], $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) - # AM_MISSING_HAS_RUN # ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl @@ -748,54 +790,22 @@ if test x"${MISSING+set}" != xset; then esac fi # Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " else am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) + AC_MSG_WARN(['missing' script is too old or missing]) fi ]) -# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, -# Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 1 - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 - # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], @@ -805,7 +815,7 @@ AC_DEFUN([_AM_MANGLE_OPTION], # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ @@ -821,22 +831,16 @@ AC_DEFUN([_AM_IF_OPTION], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 - # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -847,32 +851,40 @@ case `pwd` in esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac -# Do `set' in a subshell so we don't clobber the current shell's +# Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done test "$[2]" = conftest.file ) then @@ -882,46 +894,118 @@ else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi -AC_MSG_RESULT(yes)]) +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) -# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- -# One issue with vendor `install' (even GNU) is that you can't +# One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize +# always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. +# Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 - # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. @@ -935,18 +1019,16 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. +# Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 - # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory @@ -956,80 +1038,119 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar +# AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. + +# We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([m4/biarch.m4]) m4_include([m4/nls.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) diff --git a/backends/ChangeLog b/backends/ChangeLog index 0d51e73..a335b20 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,281 @@ +2014-07-18 Kyle McMartin + Mark Wielaard + + * 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 + Mark Wielaard + + * 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 + + * aarch64_retval.c (aarch64_return_value_location): Handle + DW_ATE_boolean. + +2014-06-18 Mark Wielaard + + * libebl_CPU.h (dwarf_peel_type): Remove DW_TAG_mutable_type + handling. + +2014-06-17 Mark Wielaard + + * arm_init.c (arm_init): Set func_addr_mask. + +2014-06-20 Petr Machata + + * 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 + + * arm_init.c (arm_init): Hook check_reloc_target_type. + * arm_symbol.c (arm_check_reloc_target_type): New function. + * ia64_init.c (ia64_init): Hook check_reloc_target_type. + * ia64_symbol.c (ia64_check_reloc_target_type): New function. + +2014-04-22 Kurt Roeckx + + * i386_initreg.c: Make Linux only. + * x86_64_initreg.c: Make Linux only. + +2014-04-13 Mark Wielaard + + * Makefile.am: Remove libelf and libdw definitions when MUDFLAP + is defined. Remove libmudflap from LINK line. + +2014-04-09 Mark Wielaard + + * Makefile.am (aarch64_SRCS): Add aarch64_initreg.c. + * aarch64_corenote.c (prstatus_regs): Mark pc_register. + * aarch64_init.c: Assign frame_nregs. Hook set_initial_registers_tid. + * aarch64_initreg: New file. + +2014-03-28 Jean Pihet + + * arm_initreg.c (arm_set_initial_registers_tid): Handle compat mode. + ARM compatible code running on AARCH64. + +2014-03-19 Mark Wielaard + + * aarch64_reloc.def: AARCH64_ABS32 and AARCH64_ABS64 are also valid + in ET_REL. + +2014-01-30 Petr Machata + + * aarch64_regs.c (aarch64_register_info.regtype): Make this + variadic printf-like function. Call one vsnprintf instead of two + snprintf's. + (regtyper, regtypen): Drop. + (aarch64_register_info): Adjust callers. + +2014-01-26 Mark Wielaard + + * Makefile.am (arm_SRCS): Add arm_initreg.c. + * arm_init.c (arm_init): Define frame_nregs and hook + set_initial_registers_tid. + * arm_initreg.c: New file. + +2014-01-25 Mark Wielaard + + * arm_cfi.c (arm_abi_cfi): Restore SP (r13) from CFA. + +2014-01-24 Mark Wielaard + + * arm_reloc.def: Update list. + +2014-01-22 Mark Wielaard + + * Makefile.am (aarch64_regs_no_Wformat): Removed. + * aarch64_regs.c (regtype): Add bool nr argument. snprintf arg + when nr is true. + (regtyper): New function. + (regtypen): Likewise. + (aarch64_register_info): Call either regtyper or regtypen not + regtype directly. + +2014-01-14 Mark Wielaard + + * aarch64_symbol.c (aarch64_check_special_symbol): Check shdr is + not NULL before usage. + +2014-01-04 Mark Wielaard + + * ppc64_symbol.c (ppc64_machine_flag_check): New function. + * ppc64_init.c (ppc64_init): Hook machine_flag_check. + +2014-01-03 Mark Wielaard + + * Makefile.am (aarch64_SRCS): Add aarch64_cfi.c. + * aarch64_cfi.c: New file. + * aarch64_init.c (aarch64_init): Hook abi_cfi. + * aarch64_regs.c (aarch64_register_info): Set *prefix to "". + +2013-12-19 Mark Wielaard + + * aarch64_init.c (aarch64_init): Hook check_special_symbol. + * aarch64_symbol.c (aarch64_check_special_symbol): New function. + +2013-12-18 Mark Wielaard + + * Makefile.am (ppc64_SRCS): Add ppc64_resolve_sym.c. + * ppc64_resolve_sym.c: New file. + * ppc64_init.c: Hook resolve_sym_value and find function descriptor + table. + +2013-12-18 Mark Wielaard + + * s390_initreg.c (s390_set_initial_registers_tid): Use union + to avoid type-punning when assigning a double to a Dwarf_Word. + +2013-12-18 Jan Kratochvil + + unwinder: s390 and s390x + * Makefile.am (s390_SRCS): Add s390_initreg.c and s390_unwind.c. + * s390_corenote.c (prstatus_regs): Set PC_REGISTER. Reindent all the + entries. + * s390_init.c (s390_init): Initialize frame_nregs, + set_initial_registers_tid, normalize_pc and unwind. + * s390_initreg.c: New file. + * s390_unwind.c: New file. + +2013-12-15 Jan Kratochvil + + unwinder: ppc and ppc64 + * Makefile.am (ppc_SRCS, ppc64_SRCS): Add ppc_initreg.c. + * ppc64_init.c (ppc64_init): Initialize also frame_nregs, + set_initial_registers_tid and dwarf_to_regno. + * ppc_corenote.c (PRSTATUS_REGSET_ITEMS) : Set PC_REGISTER. + * ppc_init.c (ppc64_init): Initialize also frame_nregs, + set_initial_registers_tid and dwarf_to_regno. + * ppc_initreg.c: New file. + +2013-11-25 Petr Machata + + * Makefile.am (modules): Add aarch64. + (libebl_pic): Add libebl_aarch64_pic.a. + (aarch64_SRCS): New variable. + (libebl_aarch64_pic_a_SOURCES): Likewise. + (am_libebl_aarch64_pic_a_OBJECTS): Likewise. + (aarch64_regs_no_Wformat): Likewise. + * aarch64_corenote.c, aarch64_init.c: New files. + * aarch64_regs.c, aarch64_reloc.def: Likewise. + * aarch64_retval.c, aarch64_symbol.c: Likewise. + * libebl_CPU.h (dwarf_peel_type): New function. + (dwarf_peeled_die_type): Likewise. + +2013-11-07 Jan Kratochvil + Mark Wielaard + + * Makefile.am (i386_SRCS): Add i386_initreg.c. + (x86_64_SRCS): Add x86_64_initreg.c. + * i386_initreg.c: New file. + * i386_init.c (i386_init): Initialize frame_nregs and + set_initial_registers_tid. + * x86_64_initreg.c: New file. + * x86_64_init.c (x86_64_init): Initialize frame_nregs and + set_initial_registers_tid. + +2013-10-06 Mark Wielaard + + * ppc_cfi.c (ppc_abi_cfi): Use DW_CFA_val_offset for reg1, not + DW_CFA_val_expression. + +2013-08-29 Mark Wielaard + + * Makefile.am (arm_SRCS): Add arm_cfi.c. + * arm_cfi.c: New file. + * arm_init.c (arm_init): Initialize abi_cfi. + +2013-08-27 Jan Kratochvil + + * Makefile.am (ppc_SRCS, ppc64_SRCS): Add ppc_cfi.c. + (s390_SRCS): Add s390_cfi.c. + * ppc64_init.c (ppc64_init): Initialize abi_cfi. + * ppc_cfi.c: New file. + * ppc_init.c (ppc_init): Initialize abi_cfi. + * s390_cfi.c: New file. + * s390_init.c (s390_init): Initialize abi_cfi. + +2013-08-28 Mark Wielaard + + * arm_regs.c (arm_register_info): Set *prefix to "". + * ppc_regs.c (ppc_register_info): Likewise. + * sh_regs.c (sh_register_info): Likewise. + +2013-04-24 Mark Wielaard + + * Makefile.am: Use AM_CPPFLAGS instead of INCLUDES. + +2013-02-06 Mark Wielaard + + * libebl_CPU.h (DWARF_TAG_OR_RETURN): New macro. + * backends/alpha_retval.c (alpha_return_value_location): Use new + DWARF_TAG_OR_RETURN macro instead of dwarf_tag (). + * backends/arm_retval.c (arm_return_value_location): Likewise. + * backends/i386_retval.c (i386_return_value_location): Likewise. + * backends/ia64_retval.c (hfa_type): Likewise. + (ia64_return_value_location): Likewise. + * backends/ppc64_retval.c (ppc64_return_value_location): Likewise. + * backends/ppc_retval.c (ppc_return_value_location): Likewise. + * backends/s390_retval.c (s390_return_value_location): Likewise. + * backends/sh_retval.c (sh_return_value_location): Likewise. + * backends/sparc_retval.c (sparc_return_value_location): Likewise. + * backends/tilegx_retval.c (tilegx_return_value_location): Likewise. + * backends/x86_64_retval.c (x86_64_return_value_location): Likewise. + +2013-01-29 Jan Kratochvil + Roland McGrath + + * Makefile.am (s390_SRCS): Add s390_corenote.c and s390x_corenote.c. + * linux-core-note.c (ALIGN_PR_REG): New definitions. + (struct EBLHOOK(prstatus)): Change field pr_reg to anonymous struct with + ALIGN_PR_REG. + (EXTRA_ITEMS): New macro. + * s390_corenote.c: New file. + * s390_init.c (s390x_core_note): New declaration. + (s390_init): Install s390x_core_note and s390_core_note. + * s390x_corenote.c: New file. + +2013-01-30 Jan Kratochvil + + * arm_corenote.c (vfp_items): Remove zero COUNT initializer. + +2012-10-12 Jan Kratochvil + + * linux-core-note.c (prstatus_items): Rename groups of sigpend and + sighold to signal2 and signal3. + +2012-09-24 Petr Machata + + * arm_corenote.c (vfp_items, vfp_regs): New const variables. + (EXTRA_NOTES): Use it for NT_ARM_VFP. + * linux-core-note.c (EXTRA_REGSET_ITEMS): New macro. + +2012-09-17 Petr Machata + + * arm_corenote.c (FPREGSET_SIZE): Change to 116. + 2012-08-22 Jeff Kenton * Makefile.am (modules): Add tilegx. diff --git a/backends/Makefile.am b/backends/Makefile.am index 982ff2a..e06841c 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to create Makefile.in ## -## Copyright (C) 2000-2010 Red Hat, Inc. +## Copyright (C) 2000-2010, 2013, 2014 Red Hat, Inc. ## Copyright (C) 2012 Tilera Corporation ## This file is part of elfutils. ## @@ -28,29 +28,26 @@ ## the GNU Lesser General Public License along with this program. If ## not, see . include $(top_srcdir)/config/eu.am -INCLUDES += -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ +AM_CPPFLAGS += -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ -I$(top_srcdir)/libelf -I$(top_srcdir)/libdw -modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx -libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \ - libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \ - libebl_sparc_pic.a libebl_ppc_pic.a libebl_ppc64_pic.a \ - libebl_s390_pic.a libebl_tilegx_pic.a +modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \ + tilegx +libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \ + libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \ + libebl_aarch64_pic.a libebl_sparc_pic.a libebl_ppc_pic.a \ + libebl_ppc64_pic.a libebl_s390_pic.a libebl_tilegx_pic.a noinst_LIBRARIES = $(libebl_pic) noinst_DATA = $(libebl_pic:_pic.a=.so) -if MUDFLAP -libelf = ../libelf/libelf.a -libdw = ../libdw/libdw.a -else libelf = ../libelf/libelf.so libdw = ../libdw/libdw.so -endif i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \ - i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c + i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c \ + i386_initreg.c cpu_i386 = ../libcpu/libcpu_i386.a libebl_i386_pic_a_SOURCES = $(i386_SRCS) am_libebl_i386_pic_a_OBJECTS = $(i386_SRCS:.c=.os) @@ -60,7 +57,8 @@ libebl_sh_pic_a_SOURCES = $(sh_SRCS) am_libebl_sh_pic_a_OBJECTS = $(sh_SRCS:.c=.os) x86_64_SRCS = x86_64_init.c x86_64_symbol.c x86_64_corenote.c x86_64_cfi.c \ - x86_64_retval.c x86_64_regs.c i386_auxv.c x86_64_syscall.c + x86_64_retval.c x86_64_regs.c i386_auxv.c x86_64_syscall.c \ + x86_64_initreg.c cpu_x86_64 = ../libcpu/libcpu_x86_64.a libebl_x86_64_pic_a_SOURCES = $(x86_64_SRCS) am_libebl_x86_64_pic_a_OBJECTS = $(x86_64_SRCS:.c=.os) @@ -75,26 +73,36 @@ libebl_alpha_pic_a_SOURCES = $(alpha_SRCS) am_libebl_alpha_pic_a_OBJECTS = $(alpha_SRCS:.c=.os) arm_SRCS = arm_init.c arm_symbol.c arm_regs.c arm_corenote.c \ - arm_auxv.c arm_attrs.c arm_retval.c + arm_auxv.c arm_attrs.c arm_retval.c arm_cfi.c arm_initreg.c libebl_arm_pic_a_SOURCES = $(arm_SRCS) am_libebl_arm_pic_a_OBJECTS = $(arm_SRCS:.c=.os) +aarch64_SRCS = aarch64_init.c aarch64_regs.c aarch64_symbol.c \ + aarch64_corenote.c aarch64_retval.c aarch64_cfi.c \ + aarch64_initreg.c +libebl_aarch64_pic_a_SOURCES = $(aarch64_SRCS) +am_libebl_aarch64_pic_a_OBJECTS = $(aarch64_SRCS:.c=.os) + sparc_SRCS = sparc_init.c sparc_symbol.c sparc_regs.c sparc_retval.c \ sparc_corenote.c sparc64_corenote.c sparc_auxv.c libebl_sparc_pic_a_SOURCES = $(sparc_SRCS) am_libebl_sparc_pic_a_OBJECTS = $(sparc_SRCS:.c=.os) ppc_SRCS = ppc_init.c ppc_symbol.c ppc_retval.c ppc_regs.c \ - ppc_corenote.c ppc_auxv.c ppc_attrs.c ppc_syscall.c + ppc_corenote.c ppc_auxv.c ppc_attrs.c ppc_syscall.c \ + ppc_cfi.c ppc_initreg.c libebl_ppc_pic_a_SOURCES = $(ppc_SRCS) am_libebl_ppc_pic_a_OBJECTS = $(ppc_SRCS:.c=.os) ppc64_SRCS = ppc64_init.c ppc64_symbol.c ppc64_retval.c \ - ppc64_corenote.c ppc_regs.c ppc_auxv.c ppc_attrs.c ppc_syscall.c + ppc64_corenote.c ppc_regs.c ppc_auxv.c ppc_attrs.c ppc_syscall.c \ + ppc_cfi.c ppc_initreg.c ppc64_resolve_sym.c libebl_ppc64_pic_a_SOURCES = $(ppc64_SRCS) am_libebl_ppc64_pic_a_OBJECTS = $(ppc64_SRCS:.c=.os) -s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.c +s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.c \ + s390_corenote.c s390x_corenote.c s390_cfi.c s390_initreg.c \ + s390_unwind.c libebl_s390_pic_a_SOURCES = $(s390_SRCS) am_libebl_s390_pic_a_OBJECTS = $(s390_SRCS:.c=.os) @@ -111,7 +119,7 @@ libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw) $(LINK) -shared -o $(@:.map=.so) \ -Wl,--whole-archive $< $(cpu_$*) -Wl,--no-whole-archive \ -Wl,--version-script,$(@:.so=.map) \ - -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) $(libmudflap) + -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) $(textrel_check) libebl_i386.so: $(cpu_i386) diff --git a/backends/Makefile.in b/backends/Makefile.in index d4bdb9d..9e678b0 100644 --- a/backends/Makefile.in +++ b/backends/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -18,6 +17,51 @@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -36,12 +80,13 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog -@MUDFLAP_TRUE@am__append_1 = -fmudflap +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(noinst_HEADERS) ChangeLog subdir = backends ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -51,109 +96,174 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +libebl_aarch64_pic_a_AR = $(AR) $(ARFLAGS) +libebl_aarch64_pic_a_LIBADD = +am__objects_1 = aarch64_init.$(OBJEXT) aarch64_regs.$(OBJEXT) \ + aarch64_symbol.$(OBJEXT) aarch64_corenote.$(OBJEXT) \ + aarch64_retval.$(OBJEXT) aarch64_cfi.$(OBJEXT) \ + aarch64_initreg.$(OBJEXT) +libebl_aarch64_pic_a_OBJECTS = $(am_libebl_aarch64_pic_a_OBJECTS) libebl_alpha_pic_a_AR = $(AR) $(ARFLAGS) libebl_alpha_pic_a_LIBADD = -am__objects_1 = alpha_init.$(OBJEXT) alpha_symbol.$(OBJEXT) \ +am__objects_2 = alpha_init.$(OBJEXT) alpha_symbol.$(OBJEXT) \ alpha_retval.$(OBJEXT) alpha_regs.$(OBJEXT) \ alpha_corenote.$(OBJEXT) alpha_auxv.$(OBJEXT) libebl_alpha_pic_a_OBJECTS = $(am_libebl_alpha_pic_a_OBJECTS) libebl_arm_pic_a_AR = $(AR) $(ARFLAGS) libebl_arm_pic_a_LIBADD = -am__objects_2 = arm_init.$(OBJEXT) arm_symbol.$(OBJEXT) \ +am__objects_3 = arm_init.$(OBJEXT) arm_symbol.$(OBJEXT) \ arm_regs.$(OBJEXT) arm_corenote.$(OBJEXT) arm_auxv.$(OBJEXT) \ - arm_attrs.$(OBJEXT) arm_retval.$(OBJEXT) + arm_attrs.$(OBJEXT) arm_retval.$(OBJEXT) arm_cfi.$(OBJEXT) \ + arm_initreg.$(OBJEXT) libebl_arm_pic_a_OBJECTS = $(am_libebl_arm_pic_a_OBJECTS) libebl_i386_pic_a_AR = $(AR) $(ARFLAGS) libebl_i386_pic_a_LIBADD = -am__objects_3 = i386_init.$(OBJEXT) i386_symbol.$(OBJEXT) \ +am__objects_4 = i386_init.$(OBJEXT) i386_symbol.$(OBJEXT) \ i386_corenote.$(OBJEXT) i386_cfi.$(OBJEXT) \ i386_retval.$(OBJEXT) i386_regs.$(OBJEXT) i386_auxv.$(OBJEXT) \ - i386_syscall.$(OBJEXT) + i386_syscall.$(OBJEXT) i386_initreg.$(OBJEXT) libebl_i386_pic_a_OBJECTS = $(am_libebl_i386_pic_a_OBJECTS) libebl_ia64_pic_a_AR = $(AR) $(ARFLAGS) libebl_ia64_pic_a_LIBADD = -am__objects_4 = ia64_init.$(OBJEXT) ia64_symbol.$(OBJEXT) \ +am__objects_5 = ia64_init.$(OBJEXT) ia64_symbol.$(OBJEXT) \ ia64_regs.$(OBJEXT) ia64_retval.$(OBJEXT) libebl_ia64_pic_a_OBJECTS = $(am_libebl_ia64_pic_a_OBJECTS) libebl_ppc64_pic_a_AR = $(AR) $(ARFLAGS) libebl_ppc64_pic_a_LIBADD = -am__objects_5 = ppc64_init.$(OBJEXT) ppc64_symbol.$(OBJEXT) \ +am__objects_6 = ppc64_init.$(OBJEXT) ppc64_symbol.$(OBJEXT) \ ppc64_retval.$(OBJEXT) ppc64_corenote.$(OBJEXT) \ ppc_regs.$(OBJEXT) ppc_auxv.$(OBJEXT) ppc_attrs.$(OBJEXT) \ - ppc_syscall.$(OBJEXT) + ppc_syscall.$(OBJEXT) ppc_cfi.$(OBJEXT) ppc_initreg.$(OBJEXT) \ + ppc64_resolve_sym.$(OBJEXT) libebl_ppc64_pic_a_OBJECTS = $(am_libebl_ppc64_pic_a_OBJECTS) libebl_ppc_pic_a_AR = $(AR) $(ARFLAGS) libebl_ppc_pic_a_LIBADD = -am__objects_6 = ppc_init.$(OBJEXT) ppc_symbol.$(OBJEXT) \ +am__objects_7 = ppc_init.$(OBJEXT) ppc_symbol.$(OBJEXT) \ ppc_retval.$(OBJEXT) ppc_regs.$(OBJEXT) ppc_corenote.$(OBJEXT) \ - ppc_auxv.$(OBJEXT) ppc_attrs.$(OBJEXT) ppc_syscall.$(OBJEXT) + ppc_auxv.$(OBJEXT) ppc_attrs.$(OBJEXT) ppc_syscall.$(OBJEXT) \ + ppc_cfi.$(OBJEXT) ppc_initreg.$(OBJEXT) libebl_ppc_pic_a_OBJECTS = $(am_libebl_ppc_pic_a_OBJECTS) libebl_s390_pic_a_AR = $(AR) $(ARFLAGS) libebl_s390_pic_a_LIBADD = -am__objects_7 = s390_init.$(OBJEXT) s390_symbol.$(OBJEXT) \ - s390_regs.$(OBJEXT) s390_retval.$(OBJEXT) +am__objects_8 = s390_init.$(OBJEXT) s390_symbol.$(OBJEXT) \ + s390_regs.$(OBJEXT) s390_retval.$(OBJEXT) \ + s390_corenote.$(OBJEXT) s390x_corenote.$(OBJEXT) \ + s390_cfi.$(OBJEXT) s390_initreg.$(OBJEXT) \ + s390_unwind.$(OBJEXT) libebl_s390_pic_a_OBJECTS = $(am_libebl_s390_pic_a_OBJECTS) libebl_sh_pic_a_AR = $(AR) $(ARFLAGS) libebl_sh_pic_a_LIBADD = -am__objects_8 = sh_init.$(OBJEXT) sh_symbol.$(OBJEXT) \ +am__objects_9 = sh_init.$(OBJEXT) sh_symbol.$(OBJEXT) \ sh_corenote.$(OBJEXT) sh_regs.$(OBJEXT) sh_retval.$(OBJEXT) libebl_sh_pic_a_OBJECTS = $(am_libebl_sh_pic_a_OBJECTS) libebl_sparc_pic_a_AR = $(AR) $(ARFLAGS) libebl_sparc_pic_a_LIBADD = -am__objects_9 = sparc_init.$(OBJEXT) sparc_symbol.$(OBJEXT) \ +am__objects_10 = sparc_init.$(OBJEXT) sparc_symbol.$(OBJEXT) \ sparc_regs.$(OBJEXT) sparc_retval.$(OBJEXT) \ sparc_corenote.$(OBJEXT) sparc64_corenote.$(OBJEXT) \ sparc_auxv.$(OBJEXT) libebl_sparc_pic_a_OBJECTS = $(am_libebl_sparc_pic_a_OBJECTS) libebl_tilegx_pic_a_AR = $(AR) $(ARFLAGS) libebl_tilegx_pic_a_LIBADD = -am__objects_10 = tilegx_init.$(OBJEXT) tilegx_symbol.$(OBJEXT) \ +am__objects_11 = tilegx_init.$(OBJEXT) tilegx_symbol.$(OBJEXT) \ tilegx_regs.$(OBJEXT) tilegx_retval.$(OBJEXT) \ tilegx_corenote.$(OBJEXT) libebl_tilegx_pic_a_OBJECTS = $(am_libebl_tilegx_pic_a_OBJECTS) libebl_x86_64_pic_a_AR = $(AR) $(ARFLAGS) libebl_x86_64_pic_a_LIBADD = -am__objects_11 = x86_64_init.$(OBJEXT) x86_64_symbol.$(OBJEXT) \ +am__objects_12 = x86_64_init.$(OBJEXT) x86_64_symbol.$(OBJEXT) \ x86_64_corenote.$(OBJEXT) x86_64_cfi.$(OBJEXT) \ x86_64_retval.$(OBJEXT) x86_64_regs.$(OBJEXT) \ - i386_auxv.$(OBJEXT) x86_64_syscall.$(OBJEXT) + i386_auxv.$(OBJEXT) x86_64_syscall.$(OBJEXT) \ + x86_64_initreg.$(OBJEXT) libebl_x86_64_pic_a_OBJECTS = $(am_libebl_x86_64_pic_a_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libebl_alpha_pic_a_SOURCES) $(libebl_arm_pic_a_SOURCES) \ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libebl_aarch64_pic_a_SOURCES) \ + $(libebl_alpha_pic_a_SOURCES) $(libebl_arm_pic_a_SOURCES) \ $(libebl_i386_pic_a_SOURCES) $(libebl_ia64_pic_a_SOURCES) \ $(libebl_ppc64_pic_a_SOURCES) $(libebl_ppc_pic_a_SOURCES) \ $(libebl_s390_pic_a_SOURCES) $(libebl_sh_pic_a_SOURCES) \ $(libebl_sparc_pic_a_SOURCES) $(libebl_tilegx_pic_a_SOURCES) \ $(libebl_x86_64_pic_a_SOURCES) -DIST_SOURCES = $(libebl_alpha_pic_a_SOURCES) \ - $(libebl_arm_pic_a_SOURCES) $(libebl_i386_pic_a_SOURCES) \ - $(libebl_ia64_pic_a_SOURCES) $(libebl_ppc64_pic_a_SOURCES) \ - $(libebl_ppc_pic_a_SOURCES) $(libebl_s390_pic_a_SOURCES) \ - $(libebl_sh_pic_a_SOURCES) $(libebl_sparc_pic_a_SOURCES) \ - $(libebl_tilegx_pic_a_SOURCES) $(libebl_x86_64_pic_a_SOURCES) +DIST_SOURCES = $(libebl_aarch64_pic_a_SOURCES) \ + $(libebl_alpha_pic_a_SOURCES) $(libebl_arm_pic_a_SOURCES) \ + $(libebl_i386_pic_a_SOURCES) $(libebl_ia64_pic_a_SOURCES) \ + $(libebl_ppc64_pic_a_SOURCES) $(libebl_ppc_pic_a_SOURCES) \ + $(libebl_s390_pic_a_SOURCES) $(libebl_sh_pic_a_SOURCES) \ + $(libebl_sparc_pic_a_SOURCES) $(libebl_tilegx_pic_a_SOURCES) \ + $(libebl_x86_64_pic_a_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac DATA = $(noinst_DATA) HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -162,10 +272,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -186,6 +299,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -196,6 +310,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -210,6 +325,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -259,36 +375,33 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ -I$(top_srcdir)/libelf -I$(top_srcdir)/libdw -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ - $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ + $(if $($(*F)_no_Werror),,-Werror) \ + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ + $($(*F)_CFLAGS) +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda $(foreach m,$(modules), libebl_$(m).map \ libebl_$(m).so $(am_libebl_$(m)_pic_a_OBJECTS)) -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi -modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 tilegx -libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \ - libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \ - libebl_sparc_pic.a libebl_ppc_pic.a libebl_ppc64_pic.a \ - libebl_s390_pic.a libebl_tilegx_pic.a +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi +modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \ + tilegx + +libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \ + libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \ + libebl_aarch64_pic.a libebl_sparc_pic.a libebl_ppc_pic.a \ + libebl_ppc64_pic.a libebl_s390_pic.a libebl_tilegx_pic.a noinst_LIBRARIES = $(libebl_pic) noinst_DATA = $(libebl_pic:_pic.a=.so) -@MUDFLAP_FALSE@libelf = ../libelf/libelf.so -@MUDFLAP_TRUE@libelf = ../libelf/libelf.a -@MUDFLAP_FALSE@libdw = ../libdw/libdw.so -@MUDFLAP_TRUE@libdw = ../libdw/libdw.a +libelf = ../libelf/libelf.so +libdw = ../libdw/libdw.so i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \ - i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c + i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c \ + i386_initreg.c cpu_i386 = ../libcpu/libcpu_i386.a libebl_i386_pic_a_SOURCES = $(i386_SRCS) @@ -297,7 +410,8 @@ sh_SRCS = sh_init.c sh_symbol.c sh_corenote.c sh_regs.c sh_retval.c libebl_sh_pic_a_SOURCES = $(sh_SRCS) am_libebl_sh_pic_a_OBJECTS = $(sh_SRCS:.c=.os) x86_64_SRCS = x86_64_init.c x86_64_symbol.c x86_64_corenote.c x86_64_cfi.c \ - x86_64_retval.c x86_64_regs.c i386_auxv.c x86_64_syscall.c + x86_64_retval.c x86_64_regs.c i386_auxv.c x86_64_syscall.c \ + x86_64_initreg.c cpu_x86_64 = ../libcpu/libcpu_x86_64.a libebl_x86_64_pic_a_SOURCES = $(x86_64_SRCS) @@ -311,26 +425,37 @@ alpha_SRCS = alpha_init.c alpha_symbol.c alpha_retval.c alpha_regs.c \ libebl_alpha_pic_a_SOURCES = $(alpha_SRCS) am_libebl_alpha_pic_a_OBJECTS = $(alpha_SRCS:.c=.os) arm_SRCS = arm_init.c arm_symbol.c arm_regs.c arm_corenote.c \ - arm_auxv.c arm_attrs.c arm_retval.c + arm_auxv.c arm_attrs.c arm_retval.c arm_cfi.c arm_initreg.c libebl_arm_pic_a_SOURCES = $(arm_SRCS) am_libebl_arm_pic_a_OBJECTS = $(arm_SRCS:.c=.os) +aarch64_SRCS = aarch64_init.c aarch64_regs.c aarch64_symbol.c \ + aarch64_corenote.c aarch64_retval.c aarch64_cfi.c \ + aarch64_initreg.c + +libebl_aarch64_pic_a_SOURCES = $(aarch64_SRCS) +am_libebl_aarch64_pic_a_OBJECTS = $(aarch64_SRCS:.c=.os) sparc_SRCS = sparc_init.c sparc_symbol.c sparc_regs.c sparc_retval.c \ sparc_corenote.c sparc64_corenote.c sparc_auxv.c libebl_sparc_pic_a_SOURCES = $(sparc_SRCS) am_libebl_sparc_pic_a_OBJECTS = $(sparc_SRCS:.c=.os) ppc_SRCS = ppc_init.c ppc_symbol.c ppc_retval.c ppc_regs.c \ - ppc_corenote.c ppc_auxv.c ppc_attrs.c ppc_syscall.c + ppc_corenote.c ppc_auxv.c ppc_attrs.c ppc_syscall.c \ + ppc_cfi.c ppc_initreg.c libebl_ppc_pic_a_SOURCES = $(ppc_SRCS) am_libebl_ppc_pic_a_OBJECTS = $(ppc_SRCS:.c=.os) ppc64_SRCS = ppc64_init.c ppc64_symbol.c ppc64_retval.c \ - ppc64_corenote.c ppc_regs.c ppc_auxv.c ppc_attrs.c ppc_syscall.c + ppc64_corenote.c ppc_regs.c ppc_auxv.c ppc_attrs.c ppc_syscall.c \ + ppc_cfi.c ppc_initreg.c ppc64_resolve_sym.c libebl_ppc64_pic_a_SOURCES = $(ppc64_SRCS) am_libebl_ppc64_pic_a_OBJECTS = $(ppc64_SRCS:.c=.os) -s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.c +s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.c \ + s390_corenote.c s390x_corenote.c s390_cfi.c s390_initreg.c \ + s390_unwind.c + libebl_s390_pic_a_SOURCES = $(s390_SRCS) am_libebl_s390_pic_a_OBJECTS = $(s390_SRCS:.c=.os) tilegx_SRCS = tilegx_init.c tilegx_symbol.c tilegx_regs.c \ @@ -378,50 +503,66 @@ $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +libebl_aarch64_pic.a: $(libebl_aarch64_pic_a_OBJECTS) $(libebl_aarch64_pic_a_DEPENDENCIES) $(EXTRA_libebl_aarch64_pic_a_DEPENDENCIES) + $(AM_V_at)-rm -f libebl_aarch64_pic.a + $(AM_V_AR)$(libebl_aarch64_pic_a_AR) libebl_aarch64_pic.a $(libebl_aarch64_pic_a_OBJECTS) $(libebl_aarch64_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_aarch64_pic.a + libebl_alpha_pic.a: $(libebl_alpha_pic_a_OBJECTS) $(libebl_alpha_pic_a_DEPENDENCIES) $(EXTRA_libebl_alpha_pic_a_DEPENDENCIES) - -rm -f libebl_alpha_pic.a - $(libebl_alpha_pic_a_AR) libebl_alpha_pic.a $(libebl_alpha_pic_a_OBJECTS) $(libebl_alpha_pic_a_LIBADD) - $(RANLIB) libebl_alpha_pic.a + $(AM_V_at)-rm -f libebl_alpha_pic.a + $(AM_V_AR)$(libebl_alpha_pic_a_AR) libebl_alpha_pic.a $(libebl_alpha_pic_a_OBJECTS) $(libebl_alpha_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_alpha_pic.a + libebl_arm_pic.a: $(libebl_arm_pic_a_OBJECTS) $(libebl_arm_pic_a_DEPENDENCIES) $(EXTRA_libebl_arm_pic_a_DEPENDENCIES) - -rm -f libebl_arm_pic.a - $(libebl_arm_pic_a_AR) libebl_arm_pic.a $(libebl_arm_pic_a_OBJECTS) $(libebl_arm_pic_a_LIBADD) - $(RANLIB) libebl_arm_pic.a + $(AM_V_at)-rm -f libebl_arm_pic.a + $(AM_V_AR)$(libebl_arm_pic_a_AR) libebl_arm_pic.a $(libebl_arm_pic_a_OBJECTS) $(libebl_arm_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_arm_pic.a + libebl_i386_pic.a: $(libebl_i386_pic_a_OBJECTS) $(libebl_i386_pic_a_DEPENDENCIES) $(EXTRA_libebl_i386_pic_a_DEPENDENCIES) - -rm -f libebl_i386_pic.a - $(libebl_i386_pic_a_AR) libebl_i386_pic.a $(libebl_i386_pic_a_OBJECTS) $(libebl_i386_pic_a_LIBADD) - $(RANLIB) libebl_i386_pic.a + $(AM_V_at)-rm -f libebl_i386_pic.a + $(AM_V_AR)$(libebl_i386_pic_a_AR) libebl_i386_pic.a $(libebl_i386_pic_a_OBJECTS) $(libebl_i386_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_i386_pic.a + libebl_ia64_pic.a: $(libebl_ia64_pic_a_OBJECTS) $(libebl_ia64_pic_a_DEPENDENCIES) $(EXTRA_libebl_ia64_pic_a_DEPENDENCIES) - -rm -f libebl_ia64_pic.a - $(libebl_ia64_pic_a_AR) libebl_ia64_pic.a $(libebl_ia64_pic_a_OBJECTS) $(libebl_ia64_pic_a_LIBADD) - $(RANLIB) libebl_ia64_pic.a + $(AM_V_at)-rm -f libebl_ia64_pic.a + $(AM_V_AR)$(libebl_ia64_pic_a_AR) libebl_ia64_pic.a $(libebl_ia64_pic_a_OBJECTS) $(libebl_ia64_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_ia64_pic.a + libebl_ppc64_pic.a: $(libebl_ppc64_pic_a_OBJECTS) $(libebl_ppc64_pic_a_DEPENDENCIES) $(EXTRA_libebl_ppc64_pic_a_DEPENDENCIES) - -rm -f libebl_ppc64_pic.a - $(libebl_ppc64_pic_a_AR) libebl_ppc64_pic.a $(libebl_ppc64_pic_a_OBJECTS) $(libebl_ppc64_pic_a_LIBADD) - $(RANLIB) libebl_ppc64_pic.a + $(AM_V_at)-rm -f libebl_ppc64_pic.a + $(AM_V_AR)$(libebl_ppc64_pic_a_AR) libebl_ppc64_pic.a $(libebl_ppc64_pic_a_OBJECTS) $(libebl_ppc64_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_ppc64_pic.a + libebl_ppc_pic.a: $(libebl_ppc_pic_a_OBJECTS) $(libebl_ppc_pic_a_DEPENDENCIES) $(EXTRA_libebl_ppc_pic_a_DEPENDENCIES) - -rm -f libebl_ppc_pic.a - $(libebl_ppc_pic_a_AR) libebl_ppc_pic.a $(libebl_ppc_pic_a_OBJECTS) $(libebl_ppc_pic_a_LIBADD) - $(RANLIB) libebl_ppc_pic.a + $(AM_V_at)-rm -f libebl_ppc_pic.a + $(AM_V_AR)$(libebl_ppc_pic_a_AR) libebl_ppc_pic.a $(libebl_ppc_pic_a_OBJECTS) $(libebl_ppc_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_ppc_pic.a + libebl_s390_pic.a: $(libebl_s390_pic_a_OBJECTS) $(libebl_s390_pic_a_DEPENDENCIES) $(EXTRA_libebl_s390_pic_a_DEPENDENCIES) - -rm -f libebl_s390_pic.a - $(libebl_s390_pic_a_AR) libebl_s390_pic.a $(libebl_s390_pic_a_OBJECTS) $(libebl_s390_pic_a_LIBADD) - $(RANLIB) libebl_s390_pic.a + $(AM_V_at)-rm -f libebl_s390_pic.a + $(AM_V_AR)$(libebl_s390_pic_a_AR) libebl_s390_pic.a $(libebl_s390_pic_a_OBJECTS) $(libebl_s390_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_s390_pic.a + libebl_sh_pic.a: $(libebl_sh_pic_a_OBJECTS) $(libebl_sh_pic_a_DEPENDENCIES) $(EXTRA_libebl_sh_pic_a_DEPENDENCIES) - -rm -f libebl_sh_pic.a - $(libebl_sh_pic_a_AR) libebl_sh_pic.a $(libebl_sh_pic_a_OBJECTS) $(libebl_sh_pic_a_LIBADD) - $(RANLIB) libebl_sh_pic.a + $(AM_V_at)-rm -f libebl_sh_pic.a + $(AM_V_AR)$(libebl_sh_pic_a_AR) libebl_sh_pic.a $(libebl_sh_pic_a_OBJECTS) $(libebl_sh_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_sh_pic.a + libebl_sparc_pic.a: $(libebl_sparc_pic_a_OBJECTS) $(libebl_sparc_pic_a_DEPENDENCIES) $(EXTRA_libebl_sparc_pic_a_DEPENDENCIES) - -rm -f libebl_sparc_pic.a - $(libebl_sparc_pic_a_AR) libebl_sparc_pic.a $(libebl_sparc_pic_a_OBJECTS) $(libebl_sparc_pic_a_LIBADD) - $(RANLIB) libebl_sparc_pic.a + $(AM_V_at)-rm -f libebl_sparc_pic.a + $(AM_V_AR)$(libebl_sparc_pic_a_AR) libebl_sparc_pic.a $(libebl_sparc_pic_a_OBJECTS) $(libebl_sparc_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_sparc_pic.a + libebl_tilegx_pic.a: $(libebl_tilegx_pic_a_OBJECTS) $(libebl_tilegx_pic_a_DEPENDENCIES) $(EXTRA_libebl_tilegx_pic_a_DEPENDENCIES) - -rm -f libebl_tilegx_pic.a - $(libebl_tilegx_pic_a_AR) libebl_tilegx_pic.a $(libebl_tilegx_pic_a_OBJECTS) $(libebl_tilegx_pic_a_LIBADD) - $(RANLIB) libebl_tilegx_pic.a + $(AM_V_at)-rm -f libebl_tilegx_pic.a + $(AM_V_AR)$(libebl_tilegx_pic_a_AR) libebl_tilegx_pic.a $(libebl_tilegx_pic_a_OBJECTS) $(libebl_tilegx_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_tilegx_pic.a + libebl_x86_64_pic.a: $(libebl_x86_64_pic_a_OBJECTS) $(libebl_x86_64_pic_a_DEPENDENCIES) $(EXTRA_libebl_x86_64_pic_a_DEPENDENCIES) - -rm -f libebl_x86_64_pic.a - $(libebl_x86_64_pic_a_AR) libebl_x86_64_pic.a $(libebl_x86_64_pic_a_OBJECTS) $(libebl_x86_64_pic_a_LIBADD) - $(RANLIB) libebl_x86_64_pic.a + $(AM_V_at)-rm -f libebl_x86_64_pic.a + $(AM_V_AR)$(libebl_x86_64_pic_a_AR) libebl_x86_64_pic.a $(libebl_x86_64_pic_a_OBJECTS) $(libebl_x86_64_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl_x86_64_pic.a mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -429,6 +570,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aarch64_cfi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aarch64_corenote.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aarch64_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aarch64_initreg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aarch64_regs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aarch64_retval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aarch64_symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_auxv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_corenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_init.Po@am__quote@ @@ -437,8 +585,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha_symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_attrs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_auxv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_cfi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_corenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_initreg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_regs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_retval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm_symbol.Po@am__quote@ @@ -446,6 +596,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_cfi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_corenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_initreg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_regs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_retval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386_symbol.Po@am__quote@ @@ -456,20 +607,28 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ia64_symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_corenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_resolve_sym.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_retval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc64_symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_attrs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_auxv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_cfi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_corenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_initreg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_regs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_retval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppc_syscall.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_cfi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_corenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_initreg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_regs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_retval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_symbol.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_unwind.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390x_corenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sh_corenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sh_init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sh_regs.Po@am__quote@ @@ -490,45 +649,35 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_cfi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_corenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_initreg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_regs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_retval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86_64_syscall.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -540,15 +689,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -557,6 +702,21 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -695,17 +855,17 @@ uninstall-am: .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am @@ -725,7 +885,7 @@ libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw) $(LINK) -shared -o $(@:.map=.so) \ -Wl,--whole-archive $< $(cpu_$*) -Wl,--no-whole-archive \ -Wl,--version-script,$(@:.so=.map) \ - -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) $(libmudflap) + -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) $(textrel_check) libebl_i386.so: $(cpu_i386) diff --git a/backends/aarch64_cfi.c b/backends/aarch64_cfi.c new file mode 100644 index 0000000..acbb9b6 --- /dev/null +++ b/backends/aarch64_cfi.c @@ -0,0 +1,82 @@ +/* arm ABI-specified defaults for DWARF CFI. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +#define BACKEND aarch64_ +#include "libebl_CPU.h" + + +/* ABI-specified state of DWARF CFI based on: + + "DWARF for the ARM 64 bit architecture (AArch64) 1.0" +http://infocenter.arm.com/help/topic/com.arm.doc.ihi0057b/IHI0057B_aadwarf64.pdf + + "Procedure Call Standard for the ARM 64 bit Architecture 1.0" +http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf +*/ + +int +aarch64_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info) +{ + static const uint8_t abi_cfi[] = + { + /* The initial Canonical Frame Address is the value of the + Stack Pointer (r31) as setup in the previous frame. */ + DW_CFA_def_cfa, ULEB128_7 (30), ULEB128_7 (0), + +#define SV(n) DW_CFA_same_value, ULEB128_7 (n) + /* Callee-saved regs r19-r28. */ + SV (19), SV (20), SV (21), SV (22), SV (23), + SV (24), SV (25), SV (26), SV (27), SV (28), + + /* The Frame Pointer (FP, r29) and Link Register (LR, r30). */ + SV (29), SV (30), + + /* Callee-saved fpregs v8-v15. v0 == 64. */ + SV (72), SV (73), SV (74), SV (75), + SV (76), SV (77), SV (78), SV (79), +#undef SV + + /* XXX Note: registers intentionally unused by the program, + for example as a consequence of the procedure call standard + should be initialized as if by DW_CFA_same_value. */ + }; + + abi_info->initial_instructions = abi_cfi; + abi_info->initial_instructions_end = &abi_cfi[sizeof abi_cfi]; + abi_info->data_alignment_factor = -4; + + abi_info->return_address_register = 30; /* lr. */ + + return 0; +} diff --git a/backends/aarch64_corenote.c b/backends/aarch64_corenote.c new file mode 100644 index 0000000..9b42485 --- /dev/null +++ b/backends/aarch64_corenote.c @@ -0,0 +1,163 @@ +/* AArch64 specific core note handling. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include + +#define BACKEND aarch64_ +#include "libebl_CPU.h" + +#define ULONG uint64_t +#define PID_T int32_t +#define UID_T uint32_t +#define GID_T uint32_t +#define ALIGN_ULONG 8 +#define ALIGN_PID_T 4 +#define ALIGN_UID_T 4 +#define ALIGN_GID_T 4 +#define TYPE_ULONG ELF_T_XWORD +#define TYPE_PID_T ELF_T_SWORD +#define TYPE_UID_T ELF_T_WORD +#define TYPE_GID_T ELF_T_WORD + +#define PRSTATUS_REGS_SIZE (34 * 8) + +static const Ebl_Register_Location prstatus_regs[] = + { + { .offset = 0, .regno = 0, .count = 32, .bits = 64 }, /* x0..x30, sp */ + }; + +#define PRSTATUS_REGSET_ITEMS \ + { \ + .name = "pc", .type = ELF_T_XWORD, .format = 'x', \ + .offset = (offsetof (struct EBLHOOK(prstatus), pr_reg) \ + + PRSTATUS_REGS_SIZE - 16), \ + .group = "register", \ + .pc_register = true \ + }, \ + { \ + .name = "pstate", .type = ELF_T_XWORD, .format = 'x', \ + .offset = (offsetof (struct EBLHOOK(prstatus), pr_reg) \ + + PRSTATUS_REGS_SIZE - 8), \ + .group = "register" \ + } + +static const Ebl_Register_Location aarch64_fpregset_regs[] = + { + { .offset = 0, .regno = 64, .count = 32, .bits = 128 }, /* v0..v31 */ + }; + +static const Ebl_Core_Item aarch64_fpregset_items[] = + { + { + .name = "fpsr", .type = ELF_T_WORD, .format = 'x', + .offset = 512, .group = "register" + }, + { + .name = "fpcr", .type = ELF_T_WORD, .format = 'x', + .offset = 516, .group = "register" + } + }; + +static const Ebl_Core_Item aarch64_tls_items[] = + { + { + .name = "tls", .type = ELF_T_XWORD, .format = 'x', + .offset = 0, .group = "register" + } + }; + +#define AARCH64_HWBP_REG(KIND, N) \ + { \ + .name = "DBG" KIND "VR" #N "_EL1", .type = ELF_T_XWORD, .format = 'x', \ + .offset = 8 + N * 16, .group = "register" \ + }, \ + { \ + .name = "DBG" KIND "CR" #N "_EL1", .type = ELF_T_WORD, .format = 'x', \ + .offset = 16 + N * 16, .group = "register" \ + } + +#define AARCH64_BP_WP_GROUP(KIND, NAME) \ + static const Ebl_Core_Item NAME[] = \ + { \ + { \ + .name = "dbg_info", .type = ELF_T_WORD, .format = 'x', \ + .offset = 0, .group = "control" \ + }, \ + /* N.B.: 4 bytes of padding here. */ \ + \ + AARCH64_HWBP_REG(KIND, 0), \ + AARCH64_HWBP_REG(KIND, 1), \ + AARCH64_HWBP_REG(KIND, 2), \ + AARCH64_HWBP_REG(KIND, 3), \ + AARCH64_HWBP_REG(KIND, 4), \ + AARCH64_HWBP_REG(KIND, 5), \ + AARCH64_HWBP_REG(KIND, 6), \ + AARCH64_HWBP_REG(KIND, 7), \ + AARCH64_HWBP_REG(KIND, 8), \ + AARCH64_HWBP_REG(KIND, 9), \ + AARCH64_HWBP_REG(KIND, 10), \ + AARCH64_HWBP_REG(KIND, 11), \ + AARCH64_HWBP_REG(KIND, 12), \ + AARCH64_HWBP_REG(KIND, 13), \ + AARCH64_HWBP_REG(KIND, 14), \ + AARCH64_HWBP_REG(KIND, 15), \ + \ + /* The DBGBVR+DBGBCR pair only takes 12 bytes. There are 4 bytes \ + of padding at the end of each pair. The item formatter in \ + readelf can skip those, but the missing 4 bytes at the end of \ + the whole block cause it to assume the whole item bunch \ + repeats, so it loops around to read more. Insert an explicit \ + (but invisible) padding word. */ \ + { \ + .name = "", .type = ELF_T_WORD, .format = 'h', \ + .offset = 260, .group = "register" \ + } \ + } + +AARCH64_BP_WP_GROUP ("B", aarch64_hw_bp_items); +AARCH64_BP_WP_GROUP ("W", aarch64_hw_wp_items); + +#undef AARCH64_BP_WP_GROUP +#undef AARCH64_HWBP_REG + +#define EXTRA_NOTES \ + EXTRA_REGSET_ITEMS (NT_FPREGSET, 528, \ + aarch64_fpregset_regs, aarch64_fpregset_items) \ + EXTRA_ITEMS (NT_ARM_TLS, 8, aarch64_tls_items) \ + EXTRA_ITEMS (NT_ARM_HW_BREAK, 264, aarch64_hw_bp_items) \ + EXTRA_ITEMS (NT_ARM_HW_WATCH, 264, aarch64_hw_wp_items) + +#include "linux-core-note.c" diff --git a/backends/aarch64_init.c b/backends/aarch64_init.c new file mode 100644 index 0000000..b0fd17a --- /dev/null +++ b/backends/aarch64_init.c @@ -0,0 +1,69 @@ +/* Initialization of AArch64 specific backend library. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define BACKEND aarch64_ +#define RELOC_PREFIX R_AARCH64_ +#include "libebl_CPU.h" + +/* This defines the common reloc hooks based on aarch64_reloc.def. */ +#include "common-reloc.c" + + +const char * +aarch64_init (elf, machine, eh, ehlen) + Elf *elf __attribute__ ((unused)); + GElf_Half machine __attribute__ ((unused)); + Ebl *eh; + size_t ehlen; +{ + /* Check whether the Elf_BH object has a sufficent size. */ + if (ehlen < sizeof (Ebl)) + return NULL; + + /* We handle it. */ + eh->name = "AARCH64"; + aarch64_init_reloc (eh); + HOOK (eh, register_info); + HOOK (eh, core_note); + HOOK (eh, reloc_simple_type); + HOOK (eh, return_value_location); + HOOK (eh, check_special_symbol); + HOOK (eh, abi_cfi); + + /* X0-X30 (31 regs) + SP + 1 Reserved + ELR, 30 Reserved regs (34-43) + + V0-V31 (32 regs, least significant 64 bits only) + + ALT_FRAME_RETURN_COLUMN (used when LR isn't used) = 97 DWARF regs. */ + eh->frame_nregs = 97; + HOOK (eh, set_initial_registers_tid); + + return MODVERSION; +} diff --git a/backends/aarch64_initreg.c b/backends/aarch64_initreg.c new file mode 100644 index 0000000..9706205 --- /dev/null +++ b/backends/aarch64_initreg.c @@ -0,0 +1,92 @@ +/* Fetch live process registers from TID. + 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 + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "system.h" +#include +#ifdef __aarch64__ +# include +# include +# include +/* 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_ +#include "libebl_CPU.h" + +bool +aarch64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), + ebl_tid_registers_t *setfunc __attribute__ ((unused)), + void *arg __attribute__ ((unused))) +{ +#ifndef __aarch64__ + return false; +#else /* __aarch64__ */ + + /* General registers. */ + struct user_regs_struct gregs; + struct iovec iovec; + iovec.iov_base = &gregs; + iovec.iov_len = sizeof (gregs); + if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec) != 0) + return false; + + /* X0..X30 plus SP. */ + if (! setfunc (0, 32, (Dwarf_Word *) &gregs.regs[0], arg)) + return false; + + /* PC. */ + if (! setfunc (-1, 1, (Dwarf_Word *) &gregs.pc, arg)) + return false; + + /* ELR cannot be found. */ + + /* FP registers (only 64bits are used). */ + struct user_fpsimd_struct fregs; + iovec.iov_base = &fregs; + iovec.iov_len = sizeof (fregs); + if (ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, &iovec) != 0) + return false; + + Dwarf_Word dwarf_fregs[32]; + for (int r = 0; r < 32; r++) + dwarf_fregs[r] = fregs.vregs[r] & 0xFFFFFFFF; + + if (! setfunc (64, 32, dwarf_fregs, arg)) + return false; + + return true; +#endif /* __aarch64__ */ +} diff --git a/backends/aarch64_regs.c b/backends/aarch64_regs.c new file mode 100644 index 0000000..7a8a678 --- /dev/null +++ b/backends/aarch64_regs.c @@ -0,0 +1,102 @@ +/* Register names and numbers for AArch64 DWARF. + 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 + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include + +#define BACKEND aarch64_ +#include "libebl_CPU.h" + +ssize_t +aarch64_register_info (Ebl *ebl __attribute__ ((unused)), + int regno, char *name, size_t namelen, + const char **prefix, const char **setnamep, + int *bits, int *typep) +{ + if (name == NULL) + return 128; + + __attribute__ ((format (printf, 3, 4))) + ssize_t + regtype (const char *setname, int type, const char *fmt, ...) + { + *setnamep = setname; + *typep = type; + + va_list ap; + va_start (ap, fmt); + int s = vsnprintf (name, namelen, fmt, ap); + va_end(ap); + + if (s < 0 || (unsigned) s >= namelen) + return -1; + return s + 1; + } + + *prefix = ""; + *bits = 64; + + switch (regno) + { + case 0 ... 30: + return regtype ("integer", DW_ATE_signed, "x%d", regno); + + case 31: + return regtype ("integer", DW_ATE_address, "sp"); + + case 32: + return 0; + + case 33: + return regtype ("integer", DW_ATE_address, "elr"); + + case 34 ... 63: + return 0; + + case 64 ... 95: + /* FP/SIMD register file supports a variety of data types--it + can be thought of as a register holding a single integer or + floating-point value, or a vector of 8-, 16-, 32- or 64-bit + integers. 128-bit quad-word is the only singular value that + covers the whole register, so mark the register thus. */ + *bits = 128; + return regtype ("FP/SIMD", DW_ATE_unsigned, "v%d", regno - 64); + + case 96 ... 127: + return 0; + + default: + return -1; + } +} diff --git a/backends/aarch64_reloc.def b/backends/aarch64_reloc.def new file mode 100644 index 0000000..36d29e6 --- /dev/null +++ b/backends/aarch64_reloc.def @@ -0,0 +1,157 @@ +/* List the relocation types for AArch64. -*- C -*- + 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 + 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 . */ + +/* NAME, REL|EXEC|DYN */ + +RELOC_TYPE (ABS64, REL|EXEC|DYN) +RELOC_TYPE (ABS32, REL|EXEC|DYN) +RELOC_TYPE (COPY, EXEC) +RELOC_TYPE (GLOB_DAT, EXEC|DYN) +RELOC_TYPE (JUMP_SLOT, EXEC|DYN) +RELOC_TYPE (RELATIVE, EXEC|DYN) +RELOC_TYPE (TLS_DTPMOD64, EXEC|DYN) +RELOC_TYPE (TLS_DTPREL64, EXEC|DYN) +RELOC_TYPE (TLS_TPREL64, EXEC|DYN) +RELOC_TYPE (TLSDESC, EXEC|DYN) + +/* R_AARCH64_NONE records that the section containing the place to be + relocated depends on the section defining the symbol mentioned in + the relocation directive[.] (ARM IHI 0056B). */ +RELOC_TYPE (NONE, REL) + +RELOC_TYPE (ABS16, REL) +RELOC_TYPE (PREL64, REL) +RELOC_TYPE (PREL32, REL) +RELOC_TYPE (PREL16, REL) +RELOC_TYPE (MOVW_UABS_G0, REL) +RELOC_TYPE (MOVW_UABS_G0_NC, REL) +RELOC_TYPE (MOVW_UABS_G1, REL) +RELOC_TYPE (MOVW_UABS_G1_NC, REL) +RELOC_TYPE (MOVW_UABS_G2, REL) +RELOC_TYPE (MOVW_UABS_G2_NC, REL) +RELOC_TYPE (MOVW_UABS_G3, REL) +RELOC_TYPE (MOVW_SABS_G0, REL) +RELOC_TYPE (MOVW_SABS_G1, REL) +RELOC_TYPE (MOVW_SABS_G2, REL) +RELOC_TYPE (LD_PREL_LO19, REL) +RELOC_TYPE (ADR_PREL_LO21, REL) +RELOC_TYPE (ADR_PREL_PG_HI21, REL) +RELOC_TYPE (ADR_PREL_PG_HI21_NC, REL) +RELOC_TYPE (ADD_ABS_LO12_NC, REL) +RELOC_TYPE (LDST8_ABS_LO12_NC, REL) +RELOC_TYPE (LDST16_ABS_LO12_NC, REL) +RELOC_TYPE (LDST32_ABS_LO12_NC, REL) +RELOC_TYPE (LDST64_ABS_LO12_NC, REL) +RELOC_TYPE (LDST128_ABS_LO12_NC, REL) +RELOC_TYPE (TSTBR14, REL) +RELOC_TYPE (CONDBR19, REL) +RELOC_TYPE (JUMP26, REL) +RELOC_TYPE (CALL26, REL) +RELOC_TYPE (MOVW_PREL_G0, REL) +RELOC_TYPE (MOVW_PREL_G0_NC, REL) +RELOC_TYPE (MOVW_PREL_G1, REL) +RELOC_TYPE (MOVW_PREL_G1_NC, REL) +RELOC_TYPE (MOVW_PREL_G2, REL) +RELOC_TYPE (MOVW_PREL_G2_NC, REL) +RELOC_TYPE (MOVW_PREL_G3, REL) +RELOC_TYPE (MOVW_GOTOFF_G0, REL) +RELOC_TYPE (MOVW_GOTOFF_G0_NC, REL) +RELOC_TYPE (MOVW_GOTOFF_G1, REL) +RELOC_TYPE (MOVW_GOTOFF_G1_NC, REL) +RELOC_TYPE (MOVW_GOTOFF_G2, REL) +RELOC_TYPE (MOVW_GOTOFF_G2_NC, REL) +RELOC_TYPE (MOVW_GOTOFF_G3, REL) +RELOC_TYPE (GOTREL64, REL) +RELOC_TYPE (GOTREL32, REL) +RELOC_TYPE (GOT_LD_PREL19, REL) +RELOC_TYPE (LD64_GOTOFF_LO15, REL) +RELOC_TYPE (ADR_GOT_PAGE, REL) +RELOC_TYPE (LD64_GOT_LO12_NC, REL) +RELOC_TYPE (LD64_GOTPAGE_LO15, REL) +RELOC_TYPE (TLSGD_ADR_PREL21, REL) +RELOC_TYPE (TLSGD_ADR_PAGE21, REL) +RELOC_TYPE (TLSGD_ADD_LO12_NC, REL) +RELOC_TYPE (TLSGD_MOVW_G1, REL) +RELOC_TYPE (TLSGD_MOVW_G0_NC, REL) +RELOC_TYPE (TLSLD_ADR_PREL21, REL) +RELOC_TYPE (TLSLD_ADR_PAGE21, REL) +RELOC_TYPE (TLSLD_ADD_LO12_NC, REL) +RELOC_TYPE (TLSLD_MOVW_G1, REL) +RELOC_TYPE (TLSLD_MOVW_G0_NC, REL) +RELOC_TYPE (TLSLD_LD_PREL19, REL) +RELOC_TYPE (TLSLD_MOVW_DTPREL_G2, REL) +RELOC_TYPE (TLSLD_MOVW_DTPREL_G1, REL) +RELOC_TYPE (TLSLD_MOVW_DTPREL_G1_NC, REL) +RELOC_TYPE (TLSLD_MOVW_DTPREL_G0, REL) +RELOC_TYPE (TLSLD_MOVW_DTPREL_G0_NC, REL) +RELOC_TYPE (TLSLD_ADD_DTPREL_HI12, REL) +RELOC_TYPE (TLSLD_ADD_DTPREL_LO12, REL) +RELOC_TYPE (TLSLD_ADD_DTPREL_LO12_NC, REL) +RELOC_TYPE (TLSLD_LDST8_DTPREL_LO12, REL) +RELOC_TYPE (TLSLD_LDST8_DTPREL_LO12_NC, REL) +RELOC_TYPE (TLSLD_LDST16_DTPREL_LO12, REL) +RELOC_TYPE (TLSLD_LDST16_DTPREL_LO12_NC, REL) +RELOC_TYPE (TLSLD_LDST32_DTPREL_LO12, REL) +RELOC_TYPE (TLSLD_LDST32_DTPREL_LO12_NC, REL) +RELOC_TYPE (TLSLD_LDST64_DTPREL_LO12, REL) +RELOC_TYPE (TLSLD_LDST64_DTPREL_LO12_NC, REL) +RELOC_TYPE (TLSLD_LDST128_DTPREL_LO12, REL) +RELOC_TYPE (TLSLD_LDST128_DTPREL_LO12_NC, REL) +RELOC_TYPE (TLSIE_MOVW_GOTTPREL_G1, REL) +RELOC_TYPE (TLSIE_MOVW_GOTTPREL_G0_NC, REL) +RELOC_TYPE (TLSIE_ADR_GOTTPREL_PAGE21, REL) +RELOC_TYPE (TLSIE_LD64_GOTTPREL_LO12_NC, REL) +RELOC_TYPE (TLSIE_LD_GOTTPREL_PREL19, REL) +RELOC_TYPE (TLSLE_MOVW_TPREL_G2, REL) +RELOC_TYPE (TLSLE_MOVW_TPREL_G1, REL) +RELOC_TYPE (TLSLE_MOVW_TPREL_G1_NC, REL) +RELOC_TYPE (TLSLE_MOVW_TPREL_G0, REL) +RELOC_TYPE (TLSLE_MOVW_TPREL_G0_NC, REL) +RELOC_TYPE (TLSLE_ADD_TPREL_HI12, REL) +RELOC_TYPE (TLSLE_ADD_TPREL_LO12, REL) +RELOC_TYPE (TLSLE_ADD_TPREL_LO12_NC, REL) +RELOC_TYPE (TLSLE_LDST8_TPREL_LO12, REL) +RELOC_TYPE (TLSLE_LDST8_TPREL_LO12_NC, REL) +RELOC_TYPE (TLSLE_LDST16_TPREL_LO12, REL) +RELOC_TYPE (TLSLE_LDST16_TPREL_LO12_NC, REL) +RELOC_TYPE (TLSLE_LDST32_TPREL_LO12, REL) +RELOC_TYPE (TLSLE_LDST32_TPREL_LO12_NC, REL) +RELOC_TYPE (TLSLE_LDST64_TPREL_LO12, REL) +RELOC_TYPE (TLSLE_LDST64_TPREL_LO12_NC, REL) +RELOC_TYPE (TLSLE_LDST128_TPREL_LO12, REL) +RELOC_TYPE (TLSLE_LDST128_TPREL_LO12_NC, REL) +RELOC_TYPE (TLSDESC_LD_PREL19, REL) +RELOC_TYPE (TLSDESC_ADR_PREL21, REL) +RELOC_TYPE (TLSDESC_ADR_PAGE21, REL) +RELOC_TYPE (TLSDESC_LD64_LO12, REL) +RELOC_TYPE (TLSDESC_ADD_LO12, REL) +RELOC_TYPE (TLSDESC_OFF_G1, REL) +RELOC_TYPE (TLSDESC_OFF_G0_NC, REL) +RELOC_TYPE (TLSDESC_LDR, REL) +RELOC_TYPE (TLSDESC_ADD, REL) +RELOC_TYPE (TLSDESC_CALL, REL) diff --git a/backends/aarch64_retval.c b/backends/aarch64_retval.c new file mode 100644 index 0000000..68de307 --- /dev/null +++ b/backends/aarch64_retval.c @@ -0,0 +1,376 @@ +/* Function return value location for Linux/AArch64 ABI. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + +#include +#include + +#define BACKEND aarch64_ +#include "libebl_CPU.h" + +static int +skip_until (Dwarf_Die *child, int tag) +{ + int i; + while (DWARF_TAG_OR_RETURN (child) != tag) + if ((i = dwarf_siblingof (child, child)) != 0) + /* If there are no members, then this is not a HFA. Errors + are propagated. */ + return i; + return 0; +} + +static int +dwarf_bytesize_aux (Dwarf_Die *die, Dwarf_Word *sizep) +{ + int bits; + if (((bits = 8 * dwarf_bytesize (die)) < 0 + && (bits = dwarf_bitsize (die)) < 0) + || bits % 8 != 0) + return -1; + + *sizep = bits / 8; + return 0; +} + +/* HFA (Homogeneous Floating-point Aggregate) is an aggregate type + whose members are all of the same floating-point type, which is + then base type of this HFA. Instead of being floating-point types + directly, members can instead themselves be HFA. Such HFA fields + are handled as if their type were HFA base type. + + This function returns 0 if TYPEDIE is HFA, 1 if it is not, or -1 if + there were errors. In the former case, *SIZEP contains byte size + of the base type (e.g. 8 for IEEE double). *COUNT is set to the + number of leaf members of the HFA. */ +static int hfa_type (Dwarf_Die *ftypedie, int tag, + Dwarf_Word *sizep, Dwarf_Word *countp); + +/* Return 0 if MEMBDIE refers to a member with a floating-point or HFA + type, or 1 if it's not. Return -1 for errors. The meaning of the + remaining arguments is as documented at hfa_type. */ +static int +member_is_fp (Dwarf_Die *membdie, Dwarf_Word *sizep, Dwarf_Word *countp) +{ + Dwarf_Die typedie; + int tag = dwarf_peeled_die_type (membdie, &typedie); + switch (tag) + { + case DW_TAG_base_type:; + Dwarf_Word encoding; + Dwarf_Attribute attr_mem; + if (dwarf_attr_integrate (&typedie, DW_AT_encoding, &attr_mem) == NULL + || dwarf_formudata (&attr_mem, &encoding) != 0) + return -1; + + switch (encoding) + { + case DW_ATE_complex_float: + *countp = 2; + break; + + case DW_ATE_float: + *countp = 1; + break; + + default: + return 1; + } + + if (dwarf_bytesize_aux (&typedie, sizep) < 0) + return -1; + + *sizep /= *countp; + return 0; + + case DW_TAG_structure_type: + case DW_TAG_union_type: + case DW_TAG_array_type: + return hfa_type (&typedie, tag, sizep, countp); + } + + return 1; +} + +static int +hfa_type (Dwarf_Die *ftypedie, int tag, Dwarf_Word *sizep, Dwarf_Word *countp) +{ + assert (tag == DW_TAG_structure_type || tag == DW_TAG_class_type + || tag == DW_TAG_union_type || tag == DW_TAG_array_type); + + int i; + if (tag == DW_TAG_array_type) + { + Dwarf_Word tot_size; + if (dwarf_aggregate_size (ftypedie, &tot_size) < 0) + return -1; + + /* For vector types, we don't care about the underlying + type, but only about the vector type itself. */ + bool vec; + Dwarf_Attribute attr_mem; + if (dwarf_formflag (dwarf_attr_integrate (ftypedie, DW_AT_GNU_vector, + &attr_mem), &vec) == 0 + && vec) + { + *sizep = tot_size; + *countp = 1; + + return 0; + } + + if ((i = member_is_fp (ftypedie, sizep, countp)) == 0) + { + *countp = tot_size / *sizep; + return 0; + } + + return i; + } + + /* Find first DW_TAG_member and determine its type. */ + Dwarf_Die member; + if ((i = dwarf_child (ftypedie, &member) != 0)) + return i; + + if ((i = skip_until (&member, DW_TAG_member)) != 0) + return i; + + *countp = 0; + if ((i = member_is_fp (&member, sizep, countp)) != 0) + return i; + + while ((i = dwarf_siblingof (&member, &member)) == 0 + && (i = skip_until (&member, DW_TAG_member)) == 0) + { + Dwarf_Word size, count; + if ((i = member_is_fp (&member, &size, &count)) != 0) + return i; + + if (*sizep != size) + return 1; + + *countp += count; + } + + /* At this point we already have at least one FP member, which means + FTYPEDIE is an HFA. So either return 0, or propagate error. */ + return i < 0 ? i : 0; +} + +static int +pass_in_gpr (const Dwarf_Op **locp, Dwarf_Word size) +{ + static const Dwarf_Op loc[] = + { + { .atom = DW_OP_reg0 }, { .atom = DW_OP_piece, .number = 8 }, + { .atom = DW_OP_reg1 }, { .atom = DW_OP_piece, .number = 8 } + }; + + *locp = loc; + return size <= 8 ? 1 : 4; +} + +static int +pass_by_ref (const Dwarf_Op **locp) +{ + static const Dwarf_Op loc[] = { { .atom = DW_OP_breg0 } }; + + *locp = loc; + return 1; +} + +static int +pass_hfa (const Dwarf_Op **locp, Dwarf_Word size, Dwarf_Word count) +{ + assert (count >= 1 && count <= 4); + assert (size == 2 || size == 4 || size == 8 || size == 16); + +#define DEFINE_FPREG(NAME, SIZE) \ + static const Dwarf_Op NAME[] = { \ + { .atom = DW_OP_regx, .number = 64 }, \ + { .atom = DW_OP_piece, .number = SIZE }, \ + { .atom = DW_OP_regx, .number = 65 }, \ + { .atom = DW_OP_piece, .number = SIZE }, \ + { .atom = DW_OP_regx, .number = 66 }, \ + { .atom = DW_OP_piece, .number = SIZE }, \ + { .atom = DW_OP_regx, .number = 67 }, \ + { .atom = DW_OP_piece, .number = SIZE } \ + } + + switch (size) + { + case 2:; + DEFINE_FPREG (loc_hfa_2, 2); + *locp = loc_hfa_2; + break; + + case 4:; + DEFINE_FPREG (loc_hfa_4, 4); + *locp = loc_hfa_4; + break; + + case 8:; + DEFINE_FPREG (loc_hfa_8, 8); + *locp = loc_hfa_8; + break; + + case 16:; + DEFINE_FPREG (loc_hfa_16, 16); + *locp = loc_hfa_16; + break; + } +#undef DEFINE_FPREG + + return count == 1 ? 1 : 2 * count; +} + +static int +pass_in_simd (const Dwarf_Op **locp) +{ + /* This is like passing single-element HFA. Size doesn't matter, so + pretend it's for example double. */ + return pass_hfa (locp, 8, 1); +} + +int +aarch64_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_Die typedie; + int tag = dwarf_peeled_die_type (functypedie, &typedie); + if (tag <= 0) + return tag; + + Dwarf_Word size = (Dwarf_Word)-1; + + /* If the argument type is a Composite Type that is larger than 16 + bytes, then the argument is copied to memory allocated by the + caller and the argument is replaced by a pointer to the copy. */ + if (tag == DW_TAG_structure_type || tag == DW_TAG_union_type + || tag == DW_TAG_class_type || tag == DW_TAG_array_type) + { + Dwarf_Word base_size, count; + switch (hfa_type (&typedie, tag, &base_size, &count)) + { + default: + return -1; + + case 0: + assert (count > 0); + if (count <= 4) + return pass_hfa (locp, base_size, count); + /* Fall through. */ + + case 1: + /* Not a HFA. */ + if (dwarf_aggregate_size (&typedie, &size) < 0) + return -1; + if (size > 16) + return pass_by_ref (locp); + } + } + + if (tag == DW_TAG_base_type + || tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type) + { + if (dwarf_bytesize_aux (&typedie, &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 (tag == DW_TAG_base_type) + { + Dwarf_Word encoding; + if (dwarf_formudata (dwarf_attr_integrate (&typedie, DW_AT_encoding, + &attr_mem), + &encoding) != 0) + return -1; + + switch (encoding) + { + /* If the argument is a Half-, Single-, Double- or Quad- + precision Floating-point [...] the argument is allocated + to the least significant bits of register v[NSRN]. */ + case DW_ATE_float: + switch (size) + { + case 2: /* half */ + case 4: /* sigle */ + case 8: /* double */ + case 16: /* quad */ + return pass_in_simd (locp); + + default: + return -2; + } + + case DW_ATE_complex_float: + switch (size) + { + case 8: /* float _Complex */ + case 16: /* double _Complex */ + case 32: /* long double _Complex */ + return pass_hfa (locp, size / 2, 2); + + default: + return -2; + } + + /* If the argument is an Integral or Pointer Type, the + 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: + case DW_ATE_signed_char: + return pass_in_gpr (locp, size); + } + + return -2; + } + else + return pass_in_gpr (locp, size); + } + + *locp = NULL; + return 0; +} diff --git a/backends/aarch64_symbol.c b/backends/aarch64_symbol.c new file mode 100644 index 0000000..3fdc9cf --- /dev/null +++ b/backends/aarch64_symbol.c @@ -0,0 +1,87 @@ +/* AArch64 specific symbolic name handling. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include + +#define BACKEND aarch64_ +#include "libebl_CPU.h" + + +/* Check for the simple reloc types. */ +Elf_Type +aarch64_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type) +{ + switch (type) + { + case R_AARCH64_ABS64: + return ELF_T_XWORD; + case R_AARCH64_ABS32: + return ELF_T_WORD; + case R_AARCH64_ABS16: + return ELF_T_HALF; + + default: + return ELF_T_NUM; + } +} + +/* If this is the _GLOBAL_OFFSET_TABLE_ symbol, then it should point to + .got[0] even if there is a .got.plt section. */ +bool +aarch64_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr, const GElf_Sym *sym, + const char *name, const GElf_Shdr *destshdr) +{ + if (name != NULL + && strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0) + { + const char *sname = elf_strptr (elf, ehdr->e_shstrndx, destshdr->sh_name); + if (sname != NULL && strcmp (sname, ".got.plt") == 0) + { + Elf_Scn *scn = NULL; + while ((scn = elf_nextscn (elf, scn)) != NULL) + { + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr != NULL) + { + sname = elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name); + if (sname != NULL && strcmp (sname, ".got") == 0) + return sym->st_value == shdr->sh_addr; + } + } + } + } + + return false; +} diff --git a/backends/alpha_retval.c b/backends/alpha_retval.c index 62cbfc7..53dbfa4 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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; switch (tag) { @@ -97,9 +80,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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_cfi.c b/backends/arm_cfi.c new file mode 100644 index 0000000..971a1fc --- /dev/null +++ b/backends/arm_cfi.c @@ -0,0 +1,90 @@ +/* arm ABI-specified defaults for DWARF CFI. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +#define BACKEND arm_ +#include "libebl_CPU.h" + + +/* ABI-specified state of DWARF CFI based on: + + "DWARF for the ARM Architecture ABI r2.09" +http://infocenter.arm.com/help/topic/com.arm.doc.ihi0040b/IHI0040B_aadwarf.pdf + + "Procedure Call Standard for the ARM Architecture ABI r2.09" +http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf +*/ + +int +arm_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info) +{ + static const uint8_t abi_cfi[] = + { + /* The initial Canonical Frame Address is the value of the + Stack Pointer (r13) as setup in the previous frame. */ + DW_CFA_def_cfa, ULEB128_7 (13), ULEB128_7 (0), + + /* The Stack Pointer (r13) is restored from CFA address by default. */ + DW_CFA_val_offset, ULEB128_7 (13), ULEB128_7 (0), + +#define SV(n) DW_CFA_same_value, ULEB128_7 (n) + /* Callee-saved regs r4-r8, r10, r11. */ + SV (4), SV (5), SV (6), SV (7), SV (8), SV (10), SV (11), + + /* The link register contains the return address setup by caller. */ + SV (14), + DW_CFA_register, ULEB128_7 (15), ULEB128_7 (14), /* pc = lr */ +#undef SV + + /* VFP S16-S31/D8-D15/Q4-Q7 are callee saved. + And uleb128 encoded with two bytes. */ +#define ULEB128_8_2(x) ((x & 0x7f) | 0x80), 0x02 +#define SV(n) DW_CFA_same_value, ULEB128_8_2 (n) + SV (264), SV (265), SV (266), SV (267), + SV (268), SV (269), SV (270), SV (271), + + /* XXX Note: registers intentionally unused by the program, + for example as a consequence of the procedure call standard + should be initialized as if by DW_CFA_same_value. */ + }; +#undef ULEB128_8_2 +#undef SV + + abi_info->initial_instructions = abi_cfi; + abi_info->initial_instructions_end = &abi_cfi[sizeof abi_cfi]; + abi_info->data_alignment_factor = 4; + + abi_info->return_address_register = 15; /* pc. */ + + return 0; +} diff --git a/backends/arm_corenote.c b/backends/arm_corenote.c index f73ab89..c5d8d88 100644 --- a/backends/arm_corenote.c +++ b/backends/arm_corenote.c @@ -1,5 +1,5 @@ /* ARM specific core note handling. - Copyright (C) 2009 Red Hat, Inc. + Copyright (C) 2009, 2012 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -58,7 +58,7 @@ static const Ebl_Register_Location fpregset_regs[] = { { .offset = 0, .regno = 96, .count = 8, .bits = 96 }, /* f0..f7 */ }; -#define FPREGSET_SIZE 140 +#define FPREGSET_SIZE 116 #define ULONG uint32_t #define PID_T int32_t @@ -73,4 +73,22 @@ static const Ebl_Register_Location fpregset_regs[] = #define TYPE_UID_T ELF_T_HALF #define TYPE_GID_T ELF_T_HALF +#define ARM_VFPREGS_SIZE ( 32 * 8 /*fpregs*/ + 4 /*fpscr*/ ) +static const Ebl_Register_Location vfp_regs[] = + { + { .offset = 0, .regno = 256, .count = 32, .bits = 64 }, /* fpregs */ + }; + +static const Ebl_Core_Item vfp_items[] = + { + { + .name = "fpscr", .group = "register", + .offset = 0, + .type = ELF_T_WORD, .format = 'x', + }, + }; + +#define EXTRA_NOTES \ + EXTRA_REGSET_ITEMS (NT_ARM_VFP, ARM_VFPREGS_SIZE, vfp_regs, vfp_items) + #include "linux-core-note.c" diff --git a/backends/arm_init.c b/backends/arm_init.c index 38bd4eb..3283c97 100644 --- a/backends/arm_init.c +++ b/backends/arm_init.c @@ -1,5 +1,5 @@ /* Initialization of Arm specific backend library. - Copyright (C) 2002, 2005, 2009 Red Hat, Inc. + Copyright (C) 2002, 2005, 2009, 2013, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2002. @@ -62,6 +62,15 @@ arm_init (elf, machine, eh, ehlen) HOOK (eh, auxv_info); HOOK (eh, check_object_attribute); HOOK (eh, return_value_location); + HOOK (eh, abi_cfi); + HOOK (eh, check_reloc_target_type); + + /* We only unwind the core integer registers. */ + 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 new file mode 100644 index 0000000..a0a9be9 --- /dev/null +++ b/backends/arm_initreg.c @@ -0,0 +1,92 @@ +/* Fetch live process registers from TID. + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#if defined __arm__ +# include +# include +# include +#endif + +#ifdef __aarch64__ +# include +# include +# include +/* 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_ +#include "libebl_CPU.h" + +bool +arm_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), + ebl_tid_registers_t *setfunc __attribute__ ((unused)), + void *arg __attribute__ ((unused))) +{ +#if !defined __arm__ && !defined __aarch64__ + return false; +#else /* __arm__ || __aarch64__ */ +#if defined __arm__ + struct user_regs user_regs; + if (ptrace (PTRACE_GETREGS, tid, NULL, &user_regs) != 0) + return false; + + Dwarf_Word dwarf_regs[16]; + /* R0..R12 SP LR PC */ + for (int i = 0; i < 16; i++) + dwarf_regs[i] = user_regs.uregs[i]; + + return setfunc (0, 16, dwarf_regs, arg); +#elif defined __aarch64__ + /* Compat mode: arm compatible code running on aarch64 */ + int i; + struct user_regs_struct gregs; + struct iovec iovec; + iovec.iov_base = &gregs; + iovec.iov_len = sizeof (gregs); + if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec) != 0) + return false; + + Dwarf_Word dwarf_regs[16]; + /* R0..R12 SP LR PC, encoded as 32 bit quantities */ + uint32_t *u32_ptr = (uint32_t *) &gregs.regs[0]; + for (i = 0; i < 16; i++) + dwarf_regs[i] = u32_ptr[i]; + + return setfunc (0, 16, dwarf_regs, arg); +#else +# error "source file error, it cannot happen" +#endif +#endif +} diff --git a/backends/arm_regs.c b/backends/arm_regs.c index 0155149..21c5ad3 100644 --- a/backends/arm_regs.c +++ b/backends/arm_regs.c @@ -48,7 +48,7 @@ arm_register_info (Ebl *ebl __attribute__ ((unused)), if (regno < 0 || regno > 320 || namelen < 5) return -1; - *prefix = NULL; + *prefix = ""; *bits = 32; *type = DW_ATE_signed; *setname = "integer"; diff --git a/backends/arm_reloc.def b/backends/arm_reloc.def index eeb2160..4b7894b 100644 --- a/backends/arm_reloc.def +++ b/backends/arm_reloc.def @@ -1,5 +1,5 @@ /* List the relocation types for arm. -*- C -*- - 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 @@ -41,7 +41,7 @@ RELOC_TYPE (SBREL32, REL) RELOC_TYPE (THM_PC22, REL) RELOC_TYPE (THM_PC8, REL) RELOC_TYPE (AMP_VCALL9, REL) -RELOC_TYPE (SWI24, REL) +RELOC_TYPE (TLS_DESC, EXEC|DYN) RELOC_TYPE (THM_SWI8, REL) RELOC_TYPE (XPC25, REL) RELOC_TYPE (THM_XPC22, REL) @@ -56,12 +56,78 @@ RELOC_TYPE (GOTOFF, REL) RELOC_TYPE (GOTPC, REL) RELOC_TYPE (GOT32, REL) RELOC_TYPE (PLT32, REL) +RELOC_TYPE (CALL, REL) +RELOC_TYPE (JUMP24, REL) +RELOC_TYPE (THM_JUMP24, REL) +RELOC_TYPE (BASE_ABS, REL) RELOC_TYPE (ALU_PCREL_7_0, REL) RELOC_TYPE (ALU_PCREL_15_8, REL) RELOC_TYPE (ALU_PCREL_23_15, REL) RELOC_TYPE (LDR_SBREL_11_0, REL) RELOC_TYPE (ALU_SBREL_19_12, REL) RELOC_TYPE (ALU_SBREL_27_20, REL) +RELOC_TYPE (TARGET1, REL) +RELOC_TYPE (SBREL31, REL) +RELOC_TYPE (V4BX, REL) +RELOC_TYPE (TARGET2, REL) +RELOC_TYPE (PREL31, REL) +RELOC_TYPE (MOVW_ABS_NC, REL) +RELOC_TYPE (MOVT_ABS, REL) +RELOC_TYPE (MOVW_PREL_NC, REL) +RELOC_TYPE (MOVT_PREL, REL) +RELOC_TYPE (THM_MOVW_ABS_NC, REL) +RELOC_TYPE (THM_MOVT_ABS, REL) +RELOC_TYPE (THM_MOVW_PREL_NC, REL) +RELOC_TYPE (THM_MOVT_PREL, REL) +RELOC_TYPE (THM_JUMP19, REL) +RELOC_TYPE (THM_JUMP6, REL) +RELOC_TYPE (THM_ALU_PREL_11_0, REL) +RELOC_TYPE (THM_PC12, REL) +RELOC_TYPE (ABS32_NOI, REL) +RELOC_TYPE (REL32_NOI, REL) +RELOC_TYPE (ALU_PC_G0_NC, REL) +RELOC_TYPE (ALU_PC_G0, REL) +RELOC_TYPE (ALU_PC_G1_NC, REL) +RELOC_TYPE (ALU_PC_G1, REL) +RELOC_TYPE (ALU_PC_G2, REL) +RELOC_TYPE (LDR_PC_G1, REL) +RELOC_TYPE (LDR_PC_G2, REL) +RELOC_TYPE (LDRS_PC_G0, REL) +RELOC_TYPE (LDRS_PC_G1, REL) +RELOC_TYPE (LDRS_PC_G2, REL) +RELOC_TYPE (LDC_PC_G0, REL) +RELOC_TYPE (LDC_PC_G1, REL) +RELOC_TYPE (LDC_PC_G2, REL) +RELOC_TYPE (ALU_SB_G0_NC, REL) +RELOC_TYPE (ALU_SB_G0, REL) +RELOC_TYPE (ALU_SB_G1_NC, REL) +RELOC_TYPE (ALU_SB_G1, REL) +RELOC_TYPE (ALU_SB_G2, REL) +RELOC_TYPE (LDR_SB_G0, REL) +RELOC_TYPE (LDR_SB_G1, REL) +RELOC_TYPE (LDR_SB_G2, REL) +RELOC_TYPE (LDRS_SB_G0, REL) +RELOC_TYPE (LDRS_SB_G1, REL) +RELOC_TYPE (LDRS_SB_G2, REL) +RELOC_TYPE (LDC_SB_G0, REL) +RELOC_TYPE (LDC_SB_G1, REL) +RELOC_TYPE (LDC_SB_G2, REL) +RELOC_TYPE (MOVW_BREL_NC, REL) +RELOC_TYPE (MOVT_BREL, REL) +RELOC_TYPE (MOVW_BREL, REL) +RELOC_TYPE (THM_MOVW_BREL_NC, REL) +RELOC_TYPE (THM_MOVT_BREL, REL) +RELOC_TYPE (THM_MOVW_BREL, REL) +RELOC_TYPE (TLS_GOTDESC, REL) +RELOC_TYPE (TLS_CALL, REL) +RELOC_TYPE (TLS_DESCSEQ, REL) +RELOC_TYPE (THM_TLS_CALL, REL) +RELOC_TYPE (PLT32_ABS, REL) +RELOC_TYPE (GOT_ABS, REL) +RELOC_TYPE (GOT_PREL, REL) +RELOC_TYPE (GOT_BREL12, REL) +RELOC_TYPE (GOTOFF12, REL) +RELOC_TYPE (GOTRELAX, REL) RELOC_TYPE (GNU_VTENTRY, REL) RELOC_TYPE (GNU_VTINHERIT, REL) RELOC_TYPE (THM_PC11, REL) @@ -71,6 +137,17 @@ RELOC_TYPE (TLS_LDM32, REL) RELOC_TYPE (TLS_LDO32, REL) RELOC_TYPE (TLS_IE32, REL) RELOC_TYPE (TLS_LE32, REL) +RELOC_TYPE (TLS_LDO12, REL) +RELOC_TYPE (TLS_LE12, REL) +RELOC_TYPE (TLS_IE12GP, REL) + +RELOC_TYPE (ME_TOO, REL) +RELOC_TYPE (THM_TLS_DESCSEQ16, REL) +RELOC_TYPE (THM_TLS_DESCSEQ32, REL) +RELOC_TYPE (THM_GOT_BREL12, REL) + +RELOC_TYPE (IRELATIVE, EXEC|DYN) + RELOC_TYPE (RXPC25, REL) RELOC_TYPE (RSBREL32, REL) RELOC_TYPE (THM_RPC22, REL) diff --git a/backends/arm_retval.c b/backends/arm_retval.c index 0c33c5b..7aced74 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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_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,9 +77,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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/arm_symbol.c b/backends/arm_symbol.c index e41ce34..cd467ff 100644 --- a/backends/arm_symbol.c +++ b/backends/arm_symbol.c @@ -1,5 +1,5 @@ /* Arm specific symbolic name handling. - Copyright (C) 2002-2009 Red Hat, Inc. + Copyright (C) 2002-2009, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -122,3 +122,10 @@ arm_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type) return ELF_T_NUM; } } + +/* The SHT_ARM_EXIDX section type is a valid target for relocation. */ +bool +arm_check_reloc_target_type (Ebl *ebl __attribute__ ((unused)), Elf64_Word sh_type) +{ + return sh_type == SHT_ARM_EXIDX; +} diff --git a/backends/i386_init.c b/backends/i386_init.c index cc9b2d7..1e0b486 100644 --- a/backends/i386_init.c +++ b/backends/i386_init.c @@ -1,5 +1,5 @@ /* Initialization of i386 specific backend library. - Copyright (C) 2000-2009 Red Hat, Inc. + Copyright (C) 2000-2009, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -63,6 +63,9 @@ i386_init (elf, machine, eh, ehlen) HOOK (eh, auxv_info); HOOK (eh, disasm); HOOK (eh, abi_cfi); + /* gcc/config/ #define DWARF_FRAME_REGISTERS. For i386 it is 17, why? */ + eh->frame_nregs = 9; + HOOK (eh, set_initial_registers_tid); return MODVERSION; } diff --git a/backends/i386_initreg.c b/backends/i386_initreg.c new file mode 100644 index 0000000..51fd9ea --- /dev/null +++ b/backends/i386_initreg.c @@ -0,0 +1,79 @@ +/* Fetch live process registers from TID. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#if defined __i386__ || defined __x86_64__ +# include +# include +# include +#endif + +#define BACKEND i386_ +#include "libebl_CPU.h" + +bool +i386_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), + ebl_tid_registers_t *setfunc __attribute__ ((unused)), + void *arg __attribute__ ((unused))) +{ +#if (!defined __i386__ && !defined __x86_64__) || !defined(__linux__) + return false; +#else /* __i386__ || __x86_64__ */ + struct user_regs_struct user_regs; + if (ptrace (PTRACE_GETREGS, tid, NULL, &user_regs) != 0) + return false; + Dwarf_Word dwarf_regs[9]; +# if defined __i386__ + dwarf_regs[0] = user_regs.eax; + dwarf_regs[1] = user_regs.ecx; + dwarf_regs[2] = user_regs.edx; + dwarf_regs[3] = user_regs.ebx; + dwarf_regs[4] = user_regs.esp; + dwarf_regs[5] = user_regs.ebp; + dwarf_regs[6] = user_regs.esi; + dwarf_regs[7] = user_regs.edi; + dwarf_regs[8] = user_regs.eip; +# elif defined __x86_64__ + dwarf_regs[0] = user_regs.rax; + dwarf_regs[1] = user_regs.rcx; + dwarf_regs[2] = user_regs.rdx; + dwarf_regs[3] = user_regs.rbx; + dwarf_regs[4] = user_regs.rsp; + dwarf_regs[5] = user_regs.rbp; + dwarf_regs[6] = user_regs.rsi; + dwarf_regs[7] = user_regs.rdi; + dwarf_regs[8] = user_regs.rip; +# else /* (__i386__ || __x86_64__) && (!__i386__ && !__x86_64__) */ +# error "source file error, it cannot happen" +# endif /* (__i386__ || __x86_64__) && (!__i386__ && !__x86_64__) */ + return setfunc (0, 9, dwarf_regs, arg); +#endif /* __i386__ || __x86_64__ */ +} diff --git a/backends/i386_retval.c b/backends/i386_retval.c index 95f5b92..9da797d 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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_Die die_mem, *typedie = &die_mem; + int tag = dwarf_peeled_die_type (functypedie, typedie); + if (tag <= 0) + return tag; switch (tag) { @@ -97,9 +80,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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_init.c b/backends/ia64_init.c index ed56efa..91da748 100644 --- a/backends/ia64_init.c +++ b/backends/ia64_init.c @@ -1,5 +1,5 @@ /* Initialization of IA-64 specific backend library. - Copyright (C) 2002, 2003, 2005, 2006, 2007 Red Hat, Inc. + Copyright (C) 2002, 2003, 2005, 2006, 2007, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2002. @@ -61,6 +61,7 @@ ia64_init (elf, machine, eh, ehlen) HOOK (eh, machine_section_flag_check); HOOK (eh, register_info); HOOK (eh, return_value_location); + HOOK (eh, check_reloc_target_type); return MODVERSION; } diff --git a/backends/ia64_retval.c b/backends/ia64_retval.c index 644359b..b5928c5 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 @@ -109,7 +109,7 @@ hfa_type (Dwarf_Die *typedie, Dwarf_Word size, return fpregs_used + nregs; } - int tag = dwarf_tag (typedie); + int tag = DWARF_TAG_OR_RETURN (typedie); switch (tag) { Dwarf_Attribute attr_mem; @@ -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 (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 (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,9 +252,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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/ia64_symbol.c b/backends/ia64_symbol.c index 8d806b0..f928b0b 100644 --- a/backends/ia64_symbol.c +++ b/backends/ia64_symbol.c @@ -1,5 +1,5 @@ /* IA-64 specific symbolic name handling. - 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 , 2002. @@ -148,3 +148,10 @@ ia64_reloc_simple_type (Ebl *ebl, int type) return ELF_T_NUM; } + +/* The SHT_IA_64_UNWIND section type is a valid target for relocation. */ +bool +ia64_check_reloc_target_type (Ebl *ebl __attribute__ ((unused)), Elf64_Word sh_type) +{ + return sh_type == SHT_IA_64_UNWIND; +} diff --git a/backends/libebl_CPU.h b/backends/libebl_CPU.h index 36b3a4a..fa0d4f2 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 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 @@ -29,6 +29,7 @@ #ifndef _LIBEBL_CPU_H #define _LIBEBL_CPU_H 1 +#include #include #define EBLHOOK(name) EBLHOOK_1(BACKEND, name) @@ -45,5 +46,45 @@ extern const char *EBLHOOK(init) (Elf *elf, GElf_Half machine, extern bool (*generic_debugscn_p) (const char *) attribute_hidden; +/* Helper for retval. Return dwarf_tag (die), but calls return -1 + if there where previous errors that leave die NULL. */ +#define DWARF_TAG_OR_RETURN(die) \ + ({ Dwarf_Die *_die = (die); \ + 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) + { + 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 +dwarf_peeled_die_type (Dwarf_Die *die, Dwarf_Die *result) +{ + Dwarf_Attribute attr_mem; + Dwarf_Attribute *attr = dwarf_attr_integrate (die, DW_AT_type, &attr_mem); + if (attr == NULL) + /* The function has no return value, like a `void' function in C. */ + return 0; + + if (dwarf_formref_die (attr, result) == NULL) + return -1; + + return dwarf_peel_type (result, attr); +} #endif /* libebl_CPU.h */ diff --git a/backends/linux-core-note.c b/backends/linux-core-note.c index be27468..e3c0109 100644 --- a/backends/linux-core-note.c +++ b/backends/linux-core-note.c @@ -42,6 +42,9 @@ #define INT int32_t #define ALIGN_INT 4 #define TYPE_INT ELF_T_SWORD +#ifndef ALIGN_PR_REG +# define ALIGN_PR_REG ALIGN_ULONG +#endif #define FIELD(type, name) type name __attribute__ ((aligned (ALIGN_##type))) @@ -81,7 +84,14 @@ struct EBLHOOK(prstatus) struct EBLHOOK(timeval) pr_stime; struct EBLHOOK(timeval) pr_cutime; struct EBLHOOK(timeval) pr_cstime; - FIELD (ULONG, pr_reg[PRSTATUS_REGS_SIZE / sizeof (ULONG)]); + struct + { + FIELD (ULONG, pr_reg[PRSTATUS_REGS_SIZE / sizeof (ULONG)]); + } +#ifdef ALIGN_PR_REG + __attribute__ ((aligned (ALIGN_PR_REG))) +#endif + ; FIELD (INT, pr_fpvalid); }; @@ -123,8 +133,10 @@ static const Ebl_Core_Item prstatus_items[] = FIELD (signal, INT, info.si_code, 'd'), FIELD (signal, INT, info.si_errno, 'd'), FIELD (signal, SHORT, cursig, 'd'), - FIELD (signal, ULONG, sigpend, 'B'), - FIELD (signal, ULONG, sighold, 'B'), + + /* Use different group name for a newline delimiter. */ + FIELD (signal2, ULONG, sigpend, 'B'), + FIELD (signal3, ULONG, sighold, 'B'), FIELD (identity, PID_T, pid, 'd', .thread_identifier = true), FIELD (identity, PID_T, ppid, 'd'), FIELD (identity, PID_T, pgrp, 'd'), @@ -252,6 +264,28 @@ EBLHOOK(core_note) (nhdr, name, regs_offset, nregloc, reglocs, nitems, items) *items = NULL; \ return 1; +#define EXTRA_REGSET_ITEMS(type, size, table, extra_items) \ + case type: \ + if (nhdr->n_descsz != size) \ + return 0; \ + *regs_offset = 0; \ + *nregloc = sizeof table / sizeof table[0]; \ + *reglocs = table; \ + *nitems = sizeof extra_items / sizeof extra_items[0]; \ + *items = extra_items; \ + return 1; + +#define EXTRA_ITEMS(type, size, extra_items) \ + case type: \ + if (nhdr->n_descsz != size) \ + return 0; \ + *regs_offset = 0; \ + *nregloc = 0; \ + *reglocs = NULL; \ + *nitems = sizeof extra_items / sizeof extra_items[0]; \ + *items = extra_items; \ + return 1; + #ifdef FPREGSET_SIZE EXTRA_REGSET (NT_FPREGSET, FPREGSET_SIZE, fpregset_regs) #endif diff --git a/backends/ppc64_init.c b/backends/ppc64_init.c index 90d4f2b..7ea2b23 100644 --- a/backends/ppc64_init.c +++ b/backends/ppc64_init.c @@ -1,5 +1,5 @@ /* Initialization of PPC64 specific backend library. - Copyright (C) 2004, 2005, 2006, 2007, 2008 Red Hat, Inc. + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2013, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2004. @@ -31,6 +31,8 @@ # include #endif +#include + #define BACKEND ppc64_ #define RELOC_PREFIX R_PPC64_ #include "libebl_CPU.h" @@ -56,14 +58,49 @@ ppc64_init (elf, machine, eh, ehlen) HOOK (eh, reloc_simple_type); HOOK (eh, dynamic_tag_name); HOOK (eh, dynamic_tag_check); + 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); HOOK (eh, syscall_abi); HOOK (eh, core_note); HOOK (eh, auxv_info); + HOOK (eh, abi_cfi); + /* gcc/config/ #define DWARF_FRAME_REGISTERS. */ + eh->frame_nregs = (114 - 1) + 32; + HOOK (eh, set_initial_registers_tid); + HOOK (eh, dwarf_to_regno); + HOOK (eh, resolve_sym_value); + + /* Find the function descriptor .opd table for resolve_sym_value. */ + if (elf != NULL) + { + GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (elf, &ehdr_mem); + if (ehdr != NULL && ehdr->e_type != ET_REL) + { + /* We could also try through DT_PPC64_OPD and DT_PPC64_OPDSZ. */ + GElf_Shdr opd_shdr_mem, *opd_shdr; + Elf_Scn *scn = NULL; + while ((scn = elf_nextscn (elf, scn)) != NULL) + { + opd_shdr = gelf_getshdr (scn, &opd_shdr_mem); + 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) + { + eh->fd_addr = opd_shdr->sh_addr; + eh->fd_data = elf_getdata (scn, NULL); + break; + } + } + } + } return MODVERSION; } diff --git a/backends/ppc64_reloc.def b/backends/ppc64_reloc.def index 6366f46..3a693cf 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_resolve_sym.c b/backends/ppc64_resolve_sym.c new file mode 100644 index 0000000..03f6558 --- /dev/null +++ b/backends/ppc64_resolve_sym.c @@ -0,0 +1,63 @@ +/* Resolve symbol values through .opd function descriptors. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define BACKEND ppc64_ +#include "libebl_CPU.h" + +/* Resolve a function descriptor if addr points into the .opd section. + The .opd section contains function descriptors consisting of 3 addresses. + function, toc and chain. We are just interested in the first. + http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html#FUNC-DES + + Returns true if the given address could be resolved, false otherwise. +*/ +bool +ppc64_resolve_sym_value (Ebl *ebl, GElf_Addr *addr) +{ + if (ebl->fd_data != NULL && *addr >= ebl->fd_addr + && *addr + sizeof (Elf64_Addr) <= ebl->fd_addr + ebl->fd_data->d_size) + { + GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (ebl->elf, &ehdr_mem); + if (ehdr != NULL) + { + Elf_Data opd_in, opd_out; + opd_in.d_buf = ebl->fd_data->d_buf + (*addr - ebl->fd_addr); + opd_out.d_buf = addr; + opd_out.d_size = opd_in.d_size = sizeof (Elf64_Addr); + opd_out.d_type = opd_in.d_type = ELF_T_ADDR; + if (elf64_xlatetom (&opd_out, &opd_in, + ehdr->e_ident[EI_DATA]) != NULL) + return true; + } + } + return false; +} diff --git a/backends/ppc64_retval.c b/backends/ppc64_retval.c index b26bb1e..a251983 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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_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,9 +91,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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,9 +169,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); if (tag != DW_TAG_base_type) goto aggregate; if (dwarf_formudata (dwarf_attr_integrate (typedie, diff --git a/backends/ppc64_symbol.c b/backends/ppc64_symbol.c index 244e40f..5a020d8 100644 --- a/backends/ppc64_symbol.c +++ b/backends/ppc64_symbol.c @@ -1,5 +1,5 @@ /* PPC64 specific symbolic name handling. - Copyright (C) 2004, 2005 Red Hat, Inc. + Copyright (C) 2004, 2005, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2004. @@ -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); } @@ -110,3 +113,19 @@ ppc64_bss_plt_p (Elf *elf __attribute__ ((unused)), { return true; } + +/* Check whether machine flags are valid. PPC64 has three possible values: + 0 - for unspecified ABI, or not using any specific ABI features. + 1 - for the original ELF PPC64 ABI using function descriptors. + 2 - for the revised ELFv2 PPC64 ABI without function descriptors. */ +bool +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_cfi.c b/backends/ppc_cfi.c new file mode 100644 index 0000000..55169ae --- /dev/null +++ b/backends/ppc_cfi.c @@ -0,0 +1,77 @@ +/* ppc ABI-specified defaults for DWARF CFI. + Copyright (C) 2012, 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +#define BACKEND ppc_ +#include "libebl_CPU.h" + +int +ppc_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info) +{ + static const uint8_t abi_cfi[] = + { + /* This instruction is provided in every CIE. It is not repeated here: + DW_CFA_def_cfa, ULEB128_7 (1), ULEB128_7 (0) */ + /* r1 is assumed to be restored from cfa adress, + r1 acts as a stack frame pointer. */ + DW_CFA_val_offset, ULEB128_7 (1), ULEB128_7 (0), + /* lr is not callee-saved but it needs to be preserved as it is pre-set + by the caller. */ + DW_CFA_same_value, ULEB128_7 (65), /* lr */ + + /* Callee-saved regs. */ +#define SV(n) DW_CFA_same_value, ULEB128_7 (n) + SV (2), /* r2 is TOC pointer. */ + SV (13), /* Reserved as system thread id (is it for CFI?). */ + /* r14-r31 are non-volatile registers. */ + SV (14), SV (15), SV (16), SV (17), SV (18), SV (19), SV (20), SV (21), + SV (22), SV (23), SV (24), SV (25), SV (26), SV (27), SV (28), SV (29), + SV (30), SV (31) + /* VMX registers v20-v31 and vrsave are non-volatile but they are + assigned DWARF registers 1144-1156 (v20-v31) which is outside of the + CFI supported range. */ +#undef SV + }; + + abi_info->initial_instructions = abi_cfi; + abi_info->initial_instructions_end = &abi_cfi[sizeof abi_cfi]; + abi_info->data_alignment_factor = ebl->class == ELFCLASS64 ? 8 : 4; + + abi_info->return_address_register = 65; + + return 0; +} + +__typeof (ppc_abi_cfi) + ppc64_abi_cfi + __attribute__ ((alias ("ppc_abi_cfi"))); diff --git a/backends/ppc_corenote.c b/backends/ppc_corenote.c index 707a395..9ac8871 100644 --- a/backends/ppc_corenote.c +++ b/backends/ppc_corenote.c @@ -123,7 +123,7 @@ static const Ebl_Register_Location spe_regs[] = { \ .name = "nip", .type = ELF_T_ADDR, .format = 'x', \ .offset = offsetof (struct EBLHOOK(prstatus), pr_reg[32]), \ - .group = "register" \ + .group = "register", .pc_register = true \ }, \ { \ .name = "orig_gpr3", .type = TYPE_LONG, .format = 'd', \ diff --git a/backends/ppc_init.c b/backends/ppc_init.c index 6054007..ad92765 100644 --- a/backends/ppc_init.c +++ b/backends/ppc_init.c @@ -1,5 +1,5 @@ /* Initialization of PPC specific backend library. - Copyright (C) 2004, 2005, 2006, 2007, 2008 Red Hat, Inc. + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2004. @@ -64,6 +64,11 @@ ppc_init (elf, machine, eh, ehlen) HOOK (eh, core_note); HOOK (eh, auxv_info); HOOK (eh, check_object_attribute); + HOOK (eh, abi_cfi); + /* gcc/config/ #define DWARF_FRAME_REGISTERS. */ + eh->frame_nregs = (114 - 1) + 32; + HOOK (eh, set_initial_registers_tid); + HOOK (eh, dwarf_to_regno); return MODVERSION; } diff --git a/backends/ppc_initreg.c b/backends/ppc_initreg.c new file mode 100644 index 0000000..64f5379 --- /dev/null +++ b/backends/ppc_initreg.c @@ -0,0 +1,114 @@ +/* Fetch live process registers from TID. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "system.h" +#include +#ifdef __powerpc__ +# include +# include +#endif + +#define BACKEND ppc_ +#include "libebl_CPU.h" + +bool +ppc_dwarf_to_regno (Ebl *ebl __attribute__ ((unused)), unsigned *regno) +{ + switch (*regno) + { + case 108: + // LR uses both 65 and 108 numbers, there is no consistency for it. + *regno = 65; + return true; + case 0 ... 107: + case 109 ... (114 - 1) -1: + return true; + case 1200 ... 1231: + *regno = *regno - 1200 + (114 - 1); + return true; + default: + return false; + } + abort (); +} + +__typeof (ppc_dwarf_to_regno) + ppc64_dwarf_to_regno + __attribute__ ((alias ("ppc_dwarf_to_regno"))); + +bool +ppc_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), + ebl_tid_registers_t *setfunc __attribute__ ((unused)), + void *arg __attribute__ ((unused))) +{ +#ifndef __powerpc__ + return false; +#else /* __powerpc__ */ + union + { + struct pt_regs r; + long l[sizeof (struct pt_regs) / sizeof (long)]; + } + user_regs; + eu_static_assert (sizeof (struct pt_regs) % sizeof (long) == 0); + /* PTRACE_GETREGS is EIO on kernel-2.6.18-308.el5.ppc64. */ + errno = 0; + for (unsigned regno = 0; regno < sizeof (user_regs) / sizeof (long); + regno++) + { + user_regs.l[regno] = ptrace (PTRACE_PEEKUSER, tid, + (void *) (uintptr_t) (regno + * sizeof (long)), + NULL); + if (errno != 0) + return false; + } + const size_t gprs = sizeof (user_regs.r.gpr) / sizeof (*user_regs.r.gpr); + Dwarf_Word dwarf_regs[gprs]; + for (unsigned gpr = 0; gpr < gprs; gpr++) + dwarf_regs[gpr] = user_regs.r.gpr[gpr]; + if (! setfunc (0, gprs, dwarf_regs, arg)) + return false; + dwarf_regs[0] = user_regs.r.link; + // LR uses both 65 and 108 numbers, there is no consistency for it. + if (! setfunc (65, 1, dwarf_regs, arg)) + return false; + /* Registers like msr, ctr, xer, dar, dsisr etc. are probably irrelevant + for CFI. */ + dwarf_regs[0] = user_regs.r.nip; + return setfunc (-1, 1, dwarf_regs, arg); +#endif /* __powerpc__ */ +} + +__typeof (ppc_set_initial_registers_tid) + ppc64_set_initial_registers_tid + __attribute__ ((alias ("ppc_set_initial_registers_tid"))); diff --git a/backends/ppc_regs.c b/backends/ppc_regs.c index 9c2d7e8..4b92a9a 100644 --- a/backends/ppc_regs.c +++ b/backends/ppc_regs.c @@ -48,7 +48,7 @@ ppc_register_info (Ebl *ebl __attribute__ ((unused)), if (regno < 0 || regno > 1155 || namelen < 8) return -1; - *prefix = NULL; + *prefix = ""; *bits = ebl->machine == EM_PPC64 ? 64 : 32; *type = (regno < 32 ? DW_ATE_signed : regno < 64 ? DW_ATE_float : DW_ATE_unsigned); diff --git a/backends/ppc_retval.c b/backends/ppc_retval.c index 29f5a23..b14a99f 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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_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,9 +103,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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/s390_cfi.c b/backends/s390_cfi.c new file mode 100644 index 0000000..cb49486 --- /dev/null +++ b/backends/s390_cfi.c @@ -0,0 +1,65 @@ +/* s390 ABI-specified defaults for DWARF CFI. + Copyright (C) 2012, 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +#define BACKEND s390_ +#include "libebl_CPU.h" + +int +s390_abi_cfi (Ebl *ebl, Dwarf_CIE *abi_info) +{ + static const uint8_t abi_cfi[] = + { + /* This instruction is provided in every CIE. It is not repeated here: + DW_CFA_def_cfa, ULEB128_7 (15), ULEB128_7 (96) */ + /* r14 is not callee-saved but it needs to be preserved as it is pre-set + by the caller. */ + DW_CFA_same_value, ULEB128_7 (14), /* r14 */ + + /* Callee-saved regs. */ +#define SV(n) DW_CFA_same_value, ULEB128_7 (n) + SV (6), SV (7), SV (8), SV (9), SV (10), /* r6-r13, r15 */ + SV (11), SV (12), SV (13), SV (15), + SV (16 + 8), SV (16 + 9), SV (16 + 10), SV (16 + 11), /* f8-f15 */ + SV (16 + 12), SV (16 + 13), SV (16 + 14), SV (16 + 15) +#undef SV + }; + + abi_info->initial_instructions = abi_cfi; + abi_info->initial_instructions_end = &abi_cfi[sizeof abi_cfi]; + abi_info->data_alignment_factor = ebl->class == ELFCLASS64 ? 8 : 4; + + abi_info->return_address_register = 14; + + return 0; +} diff --git a/backends/s390_corenote.c b/backends/s390_corenote.c new file mode 100644 index 0000000..7ca3516 --- /dev/null +++ b/backends/s390_corenote.c @@ -0,0 +1,189 @@ +/* S390-specific core note handling. + Copyright (C) 2012 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include + +#ifndef BITS +# define BITS 32 +# define BACKEND s390_ +#else +# define BITS 64 +# define BACKEND s390x_ +#endif +#include "libebl_CPU.h" + +static const Ebl_Register_Location prstatus_regs[] = + { +#define GR(at, n, dwreg, b...) \ + { .offset = at * BITS/8, .regno = dwreg, .count = n, .bits = b } + + GR ( 0, 1, 64, BITS), /* pswm */ + GR ( 1, 1, 65, BITS, .pc_register = true ), /* pswa */ + GR ( 2, 16, 0, BITS), /* r0-r15 */ + GR (18, 16, 48, 32), /* ar0-ar15 */ + +#undef GR + }; + + /* orig_r2 is at offset (BITS == 32 ? 34 * 4 : 26 * 8). */ +#define PRSTATUS_REGS_SIZE (BITS / 8 * (BITS == 32 ? 35 : 27)) + +static const Ebl_Register_Location fpregset_regs[] = + { +#define FPR(at, n, dwreg) \ + { .offset = at * 64/8, .regno = dwreg, .count = n, .bits = 64 } + + /* fpc is at offset 0, see fpregset_items, it has no assigned DWARF regno. + Bytes at offsets 4 to 7 are unused. */ + FPR (1 + 0, 1, 16), /* f0 */ + FPR (1 + 1, 1, 20), /* f1 */ + FPR (1 + 2, 1, 17), /* f2 */ + FPR (1 + 3, 1, 21), /* f3 */ + FPR (1 + 4, 1, 18), /* f4 */ + FPR (1 + 5, 1, 22), /* f5 */ + FPR (1 + 6, 1, 19), /* f6 */ + FPR (1 + 7, 1, 23), /* f7 */ + FPR (1 + 8, 1, 24), /* f8 */ + FPR (1 + 9, 1, 28), /* f9 */ + FPR (1 + 10, 1, 25), /* f10 */ + FPR (1 + 11, 1, 29), /* f11 */ + FPR (1 + 12, 1, 26), /* f12 */ + FPR (1 + 13, 1, 30), /* f13 */ + FPR (1 + 14, 1, 27), /* f14 */ + FPR (1 + 15, 1, 31), /* f15 */ + +#undef FPR + }; + +static const Ebl_Core_Item fpregset_items[] = + { + { + .name = "fpc", .group = "register", .offset = 0, .type = ELF_T_WORD, + .format = 'x', + }, + }; + +/* Do not set FPREGSET_SIZE so that we can supply fpregset_items. */ +#define EXTRA_NOTES_FPREGSET \ + EXTRA_REGSET_ITEMS (NT_FPREGSET, 17 * 8, fpregset_regs, fpregset_items) + +#if BITS == 32 +# define ULONG uint32_t +# define ALIGN_ULONG 4 +# define TYPE_ULONG ELF_T_WORD +# define TYPE_LONG ELF_T_SWORD +# define UID_T uint16_t +# define GID_T uint16_t +# define ALIGN_UID_T 2 +# define ALIGN_GID_T 2 +# define TYPE_UID_T ELF_T_HALF +# define TYPE_GID_T ELF_T_HALF +#else +# define ULONG uint64_t +# define ALIGN_ULONG 8 +# define TYPE_ULONG ELF_T_XWORD +# define TYPE_LONG ELF_T_SXWORD +# define UID_T uint32_t +# define GID_T uint32_t +# define ALIGN_UID_T 4 +# define ALIGN_GID_T 4 +# define TYPE_UID_T ELF_T_WORD +# define TYPE_GID_T ELF_T_WORD +#endif +#define PID_T int32_t +#define ALIGN_PID_T 4 +#define TYPE_PID_T ELF_T_SWORD +/* s390 psw_compat_t has alignment 8 bytes where it is inherited from. */ +#define ALIGN_PR_REG 8 + +#define PRSTATUS_REGSET_ITEMS \ + { \ + .name = "orig_r2", .type = TYPE_LONG, .format = 'd', \ + .offset = offsetof (struct EBLHOOK(prstatus), \ + pr_reg[BITS == 32 ? 34 : 26]), \ + .group = "register" \ + } + +#if BITS == 32 + +static const Ebl_Core_Item high_regs_items[] = + { +#define HR(n) \ + { \ + .name = "high_r" #n , .group = "register", .offset = (n) * 4, \ + .type = ELF_T_WORD, .format = 'x', \ + } + + /* Upper halves of r0-r15 are stored here. + FIXME: They are currently not combined with the r0-r15 lower halves. */ + HR (0), HR (1), HR (2), HR (3), HR (4), HR (5), HR (6), HR (7), + HR (8), HR (9), HR (10), HR (11), HR (12), HR (13), HR (14), HR (15) + +#undef HR + }; + +#define EXTRA_NOTES_HIGH_GPRS \ + EXTRA_ITEMS (NT_S390_HIGH_GPRS, 16 * 4, high_regs_items) + +#else /* BITS == 64 */ + +#define EXTRA_NOTES_HIGH_GPRS + +#endif /* BITS == 64 */ + +static const Ebl_Core_Item last_break_items[] = + { + { + .name = "last_break", .group = "system", .offset = BITS == 32 ? 4 : 0, + .type = BITS == 32 ? ELF_T_WORD : ELF_T_XWORD, .format = 'x', + }, + }; + +static const Ebl_Core_Item system_call_items[] = + { + { + .name = "system_call", .group = "system", .offset = 0, .type = ELF_T_WORD, + .format = 'd', + }, + }; + +#define EXTRA_NOTES \ + EXTRA_NOTES_FPREGSET \ + EXTRA_NOTES_HIGH_GPRS \ + EXTRA_ITEMS (NT_S390_LAST_BREAK, 8, last_break_items) \ + EXTRA_ITEMS (NT_S390_SYSTEM_CALL, 4, system_call_items) + +#include "linux-core-note.c" diff --git a/backends/s390_init.c b/backends/s390_init.c index 528e357..26b20b4 100644 --- a/backends/s390_init.c +++ b/backends/s390_init.c @@ -1,5 +1,5 @@ /* Initialization of S/390 specific backend library. - Copyright (C) 2005, 2006 Red Hat, Inc. + Copyright (C) 2005, 2006, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -37,6 +37,8 @@ /* This defines the common reloc hooks based on arm_reloc.def. */ #include "common-reloc.c" +extern __typeof (s390_core_note) s390x_core_note; + const char * s390_init (elf, machine, eh, ehlen) @@ -55,6 +57,20 @@ s390_init (elf, machine, eh, ehlen) HOOK (eh, reloc_simple_type); HOOK (eh, register_info); HOOK (eh, return_value_location); + if (eh->class == ELFCLASS64) + eh->core_note = s390x_core_note; + else + HOOK (eh, core_note); + HOOK (eh, abi_cfi); + /* gcc/config/ #define DWARF_FRAME_REGISTERS 34. + But from the gcc/config/s390/s390.h "Register usage." comment it looks as + if #32 (Argument pointer) and #33 (Condition code) are not used for + unwinding. */ + eh->frame_nregs = 32; + HOOK (eh, set_initial_registers_tid); + if (eh->class == ELFCLASS32) + HOOK (eh, normalize_pc); + HOOK (eh, unwind); /* Only the 64-bit format uses the incorrect hash table entry size. */ if (eh->class == ELFCLASS64) diff --git a/backends/s390_initreg.c b/backends/s390_initreg.c new file mode 100644 index 0000000..b4c4b67 --- /dev/null +++ b/backends/s390_initreg.c @@ -0,0 +1,95 @@ +/* Fetch live process registers from TID. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "system.h" +#include +#ifdef __s390__ +# include +# include +# include +#endif + +#define BACKEND s390_ +#include "libebl_CPU.h" + +bool +s390_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), + ebl_tid_registers_t *setfunc __attribute__ ((unused)), + void *arg __attribute__ ((unused))) +{ +#ifndef __s390__ + return false; +#else /* __s390__ */ + struct user user_regs; + ptrace_area parea; + parea.process_addr = (uintptr_t) &user_regs; + parea.kernel_addr = 0; + parea.len = sizeof (user_regs); + if (ptrace (PTRACE_PEEKUSR_AREA, tid, &parea, NULL) != 0) + return false; + /* If we run as s390x we get the 64-bit registers of tid. + But -m31 executable seems to use only the 32-bit parts of its + registers so we ignore the upper half. */ + Dwarf_Word dwarf_regs[16]; + for (unsigned u = 0; u < 16; u++) + dwarf_regs[u] = user_regs.regs.gprs[u]; + if (! setfunc (0, 16, dwarf_regs, arg)) + return false; + /* Avoid conversion double -> integer. */ + eu_static_assert (sizeof user_regs.regs.fp_regs.fprs[0] + == sizeof dwarf_regs[0]); + for (unsigned u = 0; u < 16; u++) + { + // Store the double bits as is in the Dwarf_Word without conversion. + union + { + double d; + Dwarf_Word w; + } fpr = { .d = user_regs.regs.fp_regs.fprs[u] }; + dwarf_regs[u] = fpr.w; + } + + if (! setfunc (16, 16, dwarf_regs, arg)) + return false; + dwarf_regs[0] = user_regs.regs.psw.addr; + return setfunc (-1, 1, dwarf_regs, arg); +#endif /* __s390__ */ +} + +void +s390_normalize_pc (Ebl *ebl __attribute__ ((unused)), Dwarf_Addr *pc) +{ + assert (ebl->class == ELFCLASS32); + + /* Clear S390 bit 31. */ + *pc &= (1U << 31) - 1; +} diff --git a/backends/s390_retval.c b/backends/s390_retval.c index 4cebe45..a927d46 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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_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,9 +82,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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/s390_unwind.c b/backends/s390_unwind.c new file mode 100644 index 0000000..752bc28 --- /dev/null +++ b/backends/s390_unwind.c @@ -0,0 +1,139 @@ +/* Get previous frame state for an existing frame state. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + +#define BACKEND s390_ +#include "libebl_CPU.h" + +/* s390/s390x do not annotate signal handler frame by CFI. It would be also + difficult as PC points into a stub built on stack. Function below is called + only if unwinder could not find CFI. Function then verifies the register + state for this frame really belongs to a signal frame. In such case it + fetches original registers saved by the signal frame. */ + +bool +s390_unwind (Ebl *ebl, Dwarf_Addr pc, ebl_tid_registers_t *setfunc, + ebl_tid_registers_get_t *getfunc, ebl_pid_memory_read_t *readfunc, + void *arg, bool *signal_framep) +{ + /* Caller already assumed caller adjustment but S390 instructions are 4 bytes + long. Undo it. */ + if ((pc & 0x3) != 0x3) + return false; + pc++; + /* We can assume big-endian read here. */ + Dwarf_Word instr; + if (! readfunc (pc, &instr, arg)) + return false; + /* Fetch only the very first two bytes. */ + instr = (instr >> (ebl->class == ELFCLASS64 ? 48 : 16)) & 0xffff; + /* See GDB s390_sigtramp_frame_sniffer. */ + /* Check for 'svc' as the first instruction. */ + if (((instr >> 8) & 0xff) != 0x0a) + return false; + /* Check for 'sigreturn' or 'rt_sigreturn' as the second instruction. */ + if ((instr & 0xff) != 119 && (instr & 0xff) != 173) + return false; + /* See GDB s390_sigtramp_frame_unwind_cache. */ + Dwarf_Word this_sp; + if (! getfunc (0 + 15, 1, &this_sp, arg)) + return false; + unsigned word_size = ebl->class == ELFCLASS64 ? 8 : 4; + Dwarf_Addr next_cfa = this_sp + 16 * word_size + 32; + /* "New-style RT frame" is not supported, + assuming "Old-style RT frame and all non-RT frames". + Pointer to the array of saved registers is at NEXT_CFA + 8. */ + Dwarf_Word sigreg_ptr; + if (! readfunc (next_cfa + 8, &sigreg_ptr, arg)) + return false; + /* Skip PSW mask. */ + sigreg_ptr += word_size; + /* Read PSW address. */ + Dwarf_Word val; + if (! readfunc (sigreg_ptr, &val, arg)) + return false; + if (! setfunc (-1, 1, &val, arg)) + return false; + sigreg_ptr += word_size; + /* Then the GPRs. */ + Dwarf_Word gprs[16]; + for (int i = 0; i < 16; i++) + { + if (! readfunc (sigreg_ptr, &gprs[i], arg)) + return false; + sigreg_ptr += word_size; + } + /* Then the ACRs. Skip them, they are not used in CFI. */ + for (int i = 0; i < 16; i++) + sigreg_ptr += 4; + /* The floating-point control word. */ + sigreg_ptr += 8; + /* And finally the FPRs. */ + Dwarf_Word fprs[16]; + for (int i = 0; i < 16; i++) + { + if (! readfunc (sigreg_ptr, &val, arg)) + return false; + if (ebl->class == ELFCLASS32) + { + Dwarf_Addr val_low; + if (! readfunc (sigreg_ptr + 4, &val_low, arg)) + return false; + val = (val << 32) | val_low; + } + fprs[i] = val; + sigreg_ptr += 8; + } + /* If we have them, the GPR upper halves are appended at the end. */ + if (ebl->class == ELFCLASS32) + { + /* Skip signal number. */ + sigreg_ptr += 4; + for (int i = 0; i < 16; i++) + { + if (! readfunc (sigreg_ptr, &val, arg)) + return false; + Dwarf_Word val_low = gprs[i]; + val = (val << 32) | val_low; + gprs[i] = val; + sigreg_ptr += 4; + } + } + if (! setfunc (0, 16, gprs, arg)) + return false; + if (! setfunc (16, 16, fprs, arg)) + return false; + *signal_framep = true; + return true; +} diff --git a/backends/s390x_corenote.c b/backends/s390x_corenote.c new file mode 100644 index 0000000..427bf7d --- /dev/null +++ b/backends/s390x_corenote.c @@ -0,0 +1,2 @@ +#define BITS 64 +#include "s390_corenote.c" diff --git a/backends/sh_regs.c b/backends/sh_regs.c index 3d323a9..d433236 100644 --- a/backends/sh_regs.c +++ b/backends/sh_regs.c @@ -50,7 +50,7 @@ sh_register_info (Ebl *ebl __attribute__ ((unused)), if (regno < 0 || regno > 103 || namelen < 6) return -1; - *prefix = NULL; + *prefix = ""; *bits = 32; *type = DW_ATE_signed; diff --git a/backends/sh_retval.c b/backends/sh_retval.c index 4692d35..d44f260 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 . @@ -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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_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,9 +79,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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 2c2728c..e1b1775 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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_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,9 +86,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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 fd4feef..db81a20 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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_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,9 +74,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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,10 +127,11 @@ 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); - tag = dwarf_tag (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); if (tag != DW_TAG_base_type) goto aggregate; if (dwarf_formudata (dwarf_attr_integrate (typedie, diff --git a/backends/x86_64_init.c b/backends/x86_64_init.c index 67a5880..b885558 100644 --- a/backends/x86_64_init.c +++ b/backends/x86_64_init.c @@ -1,5 +1,5 @@ /* Initialization of x86-64 specific backend library. - Copyright (C) 2002-2009 Red Hat, Inc. + Copyright (C) 2002-2009, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2002. @@ -60,6 +60,9 @@ x86_64_init (elf, machine, eh, ehlen) HOOK (eh, auxv_info); HOOK (eh, disasm); HOOK (eh, abi_cfi); + /* gcc/config/ #define DWARF_FRAME_REGISTERS. */ + eh->frame_nregs = 17; + HOOK (eh, set_initial_registers_tid); return MODVERSION; } diff --git a/backends/x86_64_initreg.c b/backends/x86_64_initreg.c new file mode 100644 index 0000000..db9216e --- /dev/null +++ b/backends/x86_64_initreg.c @@ -0,0 +1,73 @@ +/* Fetch live process registers from TID. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#ifdef __x86_64__ +# include +# include +#endif + +#define BACKEND x86_64_ +#include "libebl_CPU.h" + +bool +x86_64_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), + ebl_tid_registers_t *setfunc __attribute__ ((unused)), + void *arg __attribute__ ((unused))) +{ +#if !defined(__x86_64__) || !defined(__linux__) + return false; +#else /* __x86_64__ */ + struct user_regs_struct user_regs; + if (ptrace (PTRACE_GETREGS, tid, NULL, &user_regs) != 0) + return false; + Dwarf_Word dwarf_regs[17]; + dwarf_regs[0] = user_regs.rax; + dwarf_regs[1] = user_regs.rdx; + dwarf_regs[2] = user_regs.rcx; + dwarf_regs[3] = user_regs.rbx; + dwarf_regs[4] = user_regs.rsi; + dwarf_regs[5] = user_regs.rdi; + dwarf_regs[6] = user_regs.rbp; + dwarf_regs[7] = user_regs.rsp; + dwarf_regs[8] = user_regs.r8; + dwarf_regs[9] = user_regs.r9; + dwarf_regs[10] = user_regs.r10; + dwarf_regs[11] = user_regs.r11; + dwarf_regs[12] = user_regs.r12; + dwarf_regs[13] = user_regs.r13; + dwarf_regs[14] = user_regs.r14; + dwarf_regs[15] = user_regs.r15; + dwarf_regs[16] = user_regs.rip; + return setfunc (0, 17, dwarf_regs, arg); +#endif /* __x86_64__ */ +} diff --git a/backends/x86_64_retval.c b/backends/x86_64_retval.c index d67b05f..b3799ae 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 (typedie); - - /* Follow typedefs and qualifiers to get to the actual type. */ - while (tag == DW_TAG_typedef - || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type - || tag == DW_TAG_restrict_type || tag == DW_TAG_mutable_type) - { - attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); - typedie = dwarf_formref_die (attr, &die_mem); - tag = dwarf_tag (typedie); - } + Dwarf_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,9 +95,10 @@ 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 (typedie); + tag = DWARF_TAG_OR_RETURN (typedie); } /* Fall through. */ @@ -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.h.in b/config.h.in index e3ca087..8ceb0f9 100644 --- a/config.h.in +++ b/config.h.in @@ -3,8 +3,35 @@ /* Should ar and ranlib use -D behavior by default? */ #undef DEFAULT_AR_DETERMINISTIC -/* Defined if libdw should support GNU ref_alt FORM, dwz multi files. */ -#undef ENABLE_DWZ +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if defines struct user_regs_struct */ +#undef HAVE_SYS_USER_REGS + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H /* $libdir subdirectory containing libebl modules. */ #undef LIBEBL_SUBDIR @@ -36,6 +63,12 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + /* Support bzip2 decompression via -lbz2. */ #undef USE_BZLIB @@ -58,6 +91,11 @@ `char[]'. */ #undef YYTEXT_POINTER +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS diff --git a/config/ChangeLog b/config/ChangeLog index 02ecd97..9ebf14f 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,46 @@ +2014-08-25 Mark Wielaard + + * elfutils.spec.in: Update for 0.160. + +2014-05-17 Mark Wielaard + + * elfutils.spec.in: Update for 0.159. + (%files devel): Add libdwelf.h. + +2014-04-13 Mark Wielaard + + * eu.am (AM_CFLAGS): Don't add -fmudflap. + (COMPILE.os): Don't remove no_mudflap.os. + +2014-01-22 Mark Wielaard + + * eu.am (AM_CFLAGS): Unconditionally add -Wformat=2. + +2014-01-03 Mark Wielaard + + * elfutils.spec.in: Update for 0.158. + +2013-11-01 Michael Forney + + * eu.am: Use READELF. + +2013-09-30 Mark Wielaard + + * elfutils.spec.in: Update for readelf NT_SIGINFO and NT_FILE + core notes. + +2013-09-27 Mark Wielaard + + * config/elfutils.spec.in: Update for 0.157. + +2013-07-25 Jan Kratochvil + + * config/elfutils.spec.in: Update for 0.156. + +2013-04-24 Mark Wielaard + + * eu.am: Use AM_CPPFLAGS instead of INCLUDES. + 2012-08-27 Mark Wielaard * config/elfutils.spec.in: Update for 0.155. diff --git a/config/Makefile.in b/config/Makefile.in index 1e6dae7..186fe08 100644 --- a/config/Makefile.in +++ b/config/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,6 +14,51 @@ @SET_MAKE@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -34,10 +78,11 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = config -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog \ - config.guess config.sub depcomp install-sh missing ylwrap +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ChangeLog \ + ar-lib config.guess config.sub depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -46,18 +91,40 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = SOURCES = DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -66,10 +133,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -90,6 +160,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -100,6 +171,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -114,6 +186,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -197,11 +270,11 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): -tags: TAGS -TAGS: +tags TAGS: + +ctags CTAGS: -ctags: CTAGS -CTAGS: +cscope cscopelist: distdir: $(DISTFILES) @@ -336,15 +409,16 @@ uninstall-am: .MAKE: install-am install-strip -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-am @MAINTAINER_MODE_TRUE@$(srcdir)/elfutils.spec.in: $(top_srcdir)/NEWS diff --git a/config/ar-lib b/config/ar-lib new file mode 100755 index 0000000..fe2301e --- /dev/null +++ b/config/ar-lib @@ -0,0 +1,270 @@ +#! /bin/sh +# Wrapper for Microsoft lib.exe + +me=ar-lib +scriptversion=2012-03-01.08; # UTC + +# Copyright (C) 2010-2013 Free Software Foundation, Inc. +# Written by Peter Rosin . +# +# This program 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 2, or (at your option) +# any later version. +# +# This program 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 . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + + +# func_error message +func_error () +{ + echo "$me: $1" 1>&2 + exit 1 +} + +file_conv= + +# func_file_conv build_file +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv in + mingw) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_at_file at_file operation archive +# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE +# for each of them. +# When interpreting the content of the @FILE, do NOT use func_file_conv, +# since the user would need to supply preconverted file names to +# binutils ar, at least for MinGW. +func_at_file () +{ + operation=$2 + archive=$3 + at_file_contents=`cat "$1"` + eval set x "$at_file_contents" + shift + + for member + do + $AR -NOLOGO $operation:"$member" "$archive" || exit $? + done +} + +case $1 in + '') + func_error "no command. Try '$0 --help' for more information." + ;; + -h | --h*) + cat <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). # -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. +# Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + me=`echo "$0" | sed -e 's,.*/,,'` @@ -57,8 +53,8 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, +2012, 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -202,6 +198,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} @@ -304,7 +304,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) + arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) @@ -803,6 +803,9 @@ EOF i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; @@ -863,6 +866,13 @@ EOF i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; @@ -1196,6 +1206,9 @@ EOF BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1251,7 +1264,7 @@ EOF NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; - NSE-?:NONSTOP_KERNEL:*:*) + NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) @@ -1320,11 +1333,11 @@ EOF i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; esac -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - eval $set_cc_for_build cat >$dummy.c <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. +# Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -76,8 +71,8 @@ version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, +2012, 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -125,13 +120,17 @@ esac maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] @@ -154,7 +153,7 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) + -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; @@ -223,6 +222,12 @@ case $os in -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; -lynx*) os=-lynxos ;; @@ -247,11 +252,14 @@ case $basic_machine in # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ + | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | be32 | be64 \ + | arc \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ @@ -264,7 +272,7 @@ case $basic_machine in | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ @@ -319,7 +327,7 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -332,7 +340,10 @@ case $basic_machine in strongarm | thumb | xscale) basic_machine=arm-unknown ;; - + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; xscaleeb) basic_machine=armeb-unknown ;; @@ -355,6 +366,7 @@ case $basic_machine in # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ + | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ @@ -376,7 +388,8 @@ case $basic_machine in | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ @@ -775,9 +788,13 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; - microblaze) + microblaze*) basic_machine=microblaze-xilinx ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; mingw32) basic_machine=i386-pc os=-mingw32 @@ -991,7 +1008,7 @@ case $basic_machine in ;; ppc64) basic_machine=powerpc64-unknown ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown @@ -1006,7 +1023,11 @@ case $basic_machine in basic_machine=i586-unknown os=-pw32 ;; - rdos) + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) basic_machine=i386-pc os=-rdos ;; @@ -1339,15 +1360,15 @@ case $os in | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-uclibc* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ @@ -1530,6 +1551,9 @@ case $basic_machine in c4x-* | tic4x-*) os=-coff ;; + hexagon-*) + os=-elf + ;; tic54x-*) os=-coff ;; diff --git a/config/depcomp b/config/depcomp index bd0ac08..4ebd5b3 100755 --- a/config/depcomp +++ b/config/depcomp @@ -1,10 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2011-12-04.11; # UTC +scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, -# 2011 Free Software Foundation, Inc. +# Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,9 +27,9 @@ scriptversion=2011-12-04.11; # UTC case $1 in '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] @@ -40,8 +39,8 @@ as side-effects. Environment variables: depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. @@ -57,6 +56,66 @@ EOF ;; esac +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 @@ -69,6 +128,9 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" +# Avoid interferences from the environment. +gccflag= dashmflag= + # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case @@ -80,26 +142,32 @@ if test "$depmode" = hp; then fi if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc fi case "$depmode" in @@ -122,8 +190,7 @@ gcc3) done "$@" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -131,13 +198,17 @@ gcc3) ;; gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then @@ -145,33 +216,31 @@ gcc) fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. + # The second -e expression handles DOS-style file names with drive + # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. +## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory +## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -189,8 +258,7 @@ sgi) "$@" -MDupdate "$tmpdepfile" fi stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -198,43 +266,41 @@ sgi) if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the + # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" + make_dummy_depfile fi rm -f "$tmpdepfile" ;; +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the + # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u @@ -247,9 +313,7 @@ aix) "$@" -M fi stat=$? - - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi @@ -258,44 +322,100 @@ aix) do test -f "$tmpdepfile" && break done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : + # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -307,8 +427,8 @@ icc) sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -319,9 +439,8 @@ hp2) # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d @@ -332,8 +451,7 @@ hp2) "$@" +Maked fi stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi @@ -343,77 +461,61 @@ hp2) test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" else - echo "#dummy" > "$depfile" + make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; msvc7) if test "$libtool" = yes; then @@ -424,8 +526,7 @@ msvc7) "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" - if test "$stat" = 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -443,14 +544,15 @@ msvc7) p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g -s/\(.*\)/ \1 \\/p +s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { - s/.*/ / + s/.*/'"$tab"'/ G p }' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; @@ -478,7 +580,7 @@ dashmstdout) shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -498,18 +600,18 @@ dashmstdout) done test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' + # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -562,11 +664,12 @@ makedepend) # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; @@ -583,7 +686,7 @@ cpp) shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -602,10 +705,10 @@ cpp) esac done - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" @@ -637,23 +740,23 @@ msvisualcpp) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; + set fnord "$@" + shift + shift + ;; *) - set fnord "$@" "$arg" - shift - shift - ;; + set fnord "$@" "$arg" + shift + shift + ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 4d1bd76..912f237 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -169,6 +169,7 @@ rm -rf ${RPM_BUILD_ROOT} %{_includedir}/elfutils/libebl.h %{_includedir}/elfutils/libdw.h %{_includedir}/elfutils/libdwfl.h +%{_includedir}/elfutils/libdwelf.h %{_libdir}/libebl.a #%{_libdir}/libasm.so %{_libdir}/libdw.so @@ -195,6 +196,82 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Mon Aug 25 2014 Mark Wielaard 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 0.159-1 +- stack: New option -d, --debugname to lookup DWARF debuginfo name + for frame. New option -i, --inlines to show inlined frames + using DWARF debuginfo. +- libdwelf: New libdwelf.h header for libdw.so DWARF ELF Low-level + Functions. New function dwelf_elf_gnu_debuglink, + dwelf_dwarf_gnu_debugaltlink, and dwelf_elf_gnu_build_id. +- libdw: Support for DWZ multifile forms DW_FORM_GNU_ref_alt and + DW_FORM_GNU_strp_alt is now enabled by default and no longer + experimental. Added new functions dwarf_getalt and dwarf_setalt + to get or set the alternative debug file used for the alt FORMs. + The dwfl_linux_proc_find_elf callback will now find ELF from + process memory for (deleted) files if the Dwfl has process state + attached. +- libdwfl: The dwfl_build_id_find_debuginfo and + dwfl_standard_find_debuginfo functions will now try to + resolve and set the alternative debug file. +- backends: Add CFI unwinding for arm. Relies on .debug_frame. + Add arm process initial register state compatible mode to AARCH64. + Add aarch64 native and core unwind support. +- other: All separate elfutils-robustify patches have been merged. + CVE-2014-0172 Check overflow before calling malloc to uncompress + data. + +* Fri Jan 3 2014 Mark Wielaard 0.158-1 +- libdwfl: dwfl_core_file_report has new parameter executable. + New functions dwfl_module_getsymtab_first_global, + dwfl_module_getsym_info and dwfl_module_addrinfo. + Added unwinder with type Dwfl_Thread_Callbacks, opaque types + Dwfl_Thread and Dwfl_Frame and functions dwfl_attach_state, + dwfl_pid, dwfl_thread_dwfl, dwfl_thread_tid, dwfl_frame_thread, + dwfl_thread_state_registers, dwfl_thread_state_register_pc, + dwfl_getthread_frames, dwfl_getthreads, dwfl_thread_getframes + and dwfl_frame_pc. +- addr2line: New option -x to show the section an address was found in. +- stack: New utility that uses the new unwinder for processes and cores. +- backends: Unwinder support for i386, x86_64, s390, s390x, ppc and ppc64. + aarch64 support. + +* Mon Sep 30 2013 Mark Wielaard 0.157-1 +- libdw: Add new functions dwarf_getlocations, dwarf_getlocation_attr + and dwarf_getlocation_die. +- readelf: Show contents of NT_SIGINFO and NT_FILE core notes. +- addr2line: Support -i, --inlines output option. +- backends: abi_cfi hook for arm, ppc and s390. + +* Thu Jul 25 2013 Jan Kratochvil 0.156-1 +- lib: New macro COMPAT_VERSION_NEWPROTO. +- libdw: Handle GNU extension opcodes in dwarf_getlocation. +- libdwfl: Fix STB_GLOBAL over STB_WEAK preference in + dwfl_module_addrsym. Add minisymtab support. Add + parameter add_p_vaddr to dwfl_report_elf. Use DT_DEBUG + library search first. +- libebl: Handle new core note types in EBL. +- backends: Interpret NT_ARM_VFP. Implement core file + registers parsing for s390/s390x. +- readelf: Add --elf-section input option to inspect an embedded ELF + file. Add -U, --unresolved-address-offsets output control. + Add --debug-dump=decodedline support. Accept version + 8 .gdb_index section format. Adjust output formatting width. + When highpc is in constant form print it also as address. + Display raw .debug_aranges. Use libdw only for decodedaranges. +- elflint: Add __bss_start__ to the list of allowed symbols. +- tests: Add configure --enable-valgrind option to run all tests + under valgrind. Enable automake parallel-tests for make check. +- translations: Updated Polish translation. +- Updates for Automake 1.13. + * Fri Aug 24 2012 Mark Wielaard 0.155-1 - libelf: elf*_xlatetomd now works for cross-endian ELF note data. elf_getshdr now works consistently on non-mmaped ELF files after diff --git a/config/eu.am b/config/eu.am index 95e6520..c3b00e0 100644 --- a/config/eu.am +++ b/config/eu.am @@ -1,6 +1,6 @@ ## Common automake fragments for elfutils subdirectory makefiles. ## -## Copyright (C) 2010 Red Hat, Inc. +## Copyright (C) 2010, 2014 Red Hat, Inc. ## ## This file is part of elfutils. ## @@ -30,22 +30,13 @@ ## DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. -AM_CFLAGS = -std=gnu99 -Wall -Wshadow \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ $(if $($(*F)_no_Werror),,-Werror) \ $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ - $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2) \ $($(*F)_CFLAGS) -if MUDFLAP -AM_CFLAGS += -fmudflap -libmudflap = -lmudflap -else -libmudflap = -endif - -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) %.os: %.c %.o if AMDEP @@ -61,4 +52,4 @@ endif CLEANFILES = *.gcno *.gcda -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi diff --git a/config/install-sh b/config/install-sh index a9244eb..377bb86 100755 --- a/config/install-sh +++ b/config/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2011-01-19.21; # UTC +scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -35,7 +35,7 @@ scriptversion=2011-01-19.21; # UTC # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it +# 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written @@ -156,7 +156,7 @@ while test $# -ne 0; do -s) stripcmd=$stripprog;; -t) dst_arg=$2 - # Protect names problematic for `test' and other utilities. + # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac @@ -190,7 +190,7 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then fi shift # arg dst_arg=$arg - # Protect names problematic for `test' and other utilities. + # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac @@ -202,7 +202,7 @@ if test $# -eq 0; then echo "$0: no input file specified." >&2 exit 1 fi - # It's OK to call `install-sh -d' without argument. + # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi @@ -240,7 +240,7 @@ fi for src do - # Protect names problematic for `test' and other utilities. + # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac @@ -354,7 +354,7 @@ do if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. + # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in diff --git a/config/missing b/config/missing index 86a8fc3..cdea514 100755 --- a/config/missing +++ b/config/missing @@ -1,11 +1,10 @@ #! /bin/sh -# Common stub for a few missing GNU programs while installing. +# Common wrapper for a few potentially missing GNU programs. -scriptversion=2012-01-06.13; # UTC +scriptversion=2012-06-26.16; # UTC -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,68 +25,40 @@ scriptversion=2012-01-06.13; # UTC # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" + echo 1>&2 "Try '$0 --help' for more information" exit 1 fi -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi +case $1 in -msg="missing on your system" + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - yacc create \`y.tab.[ch]', if possible, from existing .[ch] + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man -Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and -\`g' are ignored when checking the name. +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. Send bug reports to ." exit $? @@ -99,228 +70,141 @@ Send bug reports to ." ;; -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac -# normalize program name to check for. -program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). This is about non-GNU programs, so use $1 not -# $program. -case $1 in - lex*|yacc*) - # Not GNU programs, they don't have --version. - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $program in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te*) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison*|yacc*) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG=\${$#} - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex*|flex*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG=\${$#} - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit $? - fi - ;; - - makeinfo*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'automa4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" ;; -esac - -exit 0 + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) diff --git a/config/test-driver b/config/test-driver new file mode 100755 index 0000000..32bf39e --- /dev/null +++ b/config/test-driver @@ -0,0 +1,127 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2012-06-27.10; # UTC + +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This program 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 2, or (at your option) +# any later version. +# +# This program 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 . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <$log_file 2>&1 +estatus=$? +if test $enable_hard_errors = no && test $estatus -eq 99; then + estatus=1 +fi + +case $estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config/ylwrap b/config/ylwrap index 9253635..1c4d776 100755 --- a/config/ylwrap +++ b/config/ylwrap @@ -1,10 +1,9 @@ #! /bin/sh # ylwrap - wrapper for lex/yacc invocations. -scriptversion=2011-08-25.18; # UTC +scriptversion=2012-12-21.17; # UTC -# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, -# 2007, 2009, 2010, 2011 Free Software Foundation, Inc. +# Copyright (C) 1996-2013 Free Software Foundation, Inc. # # Written by Tom Tromey . # @@ -30,9 +29,41 @@ scriptversion=2011-08-25.18; # UTC # bugs to or send patches to # . +get_dirname () +{ + case $1 in + */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; + # Otherwise, we want the empty string (not "."). + esac +} + +# guard FILE +# ---------- +# The CPP macro used to guard inclusion of FILE. +guard() +{ + printf '%s\n' "$1" \ + | sed \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ + -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ + -e 's/__*/_/g' +} + +# quote_for_sed [STRING] +# ---------------------- +# Return STRING (or stdin) quoted to be used as a sed pattern. +quote_for_sed () +{ + case $# in + 0) cat;; + 1) printf '%s\n' "$1";; + esac \ + | sed -e 's|[][\\.*]|\\&|g' +} + case "$1" in '') - echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 + echo "$0: No files given. Try '$0 --help' for more information." 1>&2 exit 1 ;; --basedir) @@ -67,6 +98,8 @@ esac # The input. input="$1" shift +# We'll later need for a correct munging of "#line" directives. +input_sub_rx=`get_dirname "$input" | quote_for_sed` case "$input" in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. @@ -76,15 +109,47 @@ case "$input" in input="`pwd`/$input" ;; esac +input_rx=`get_dirname "$input" | quote_for_sed` + +# Since DOS filename conventions don't allow two dots, +# the DOS version of Bison writes out y_tab.c instead of y.tab.c +# and y_tab.h instead of y.tab.h. Test to see if this is the case. +y_tab_nodot=false +if test -f y_tab.c || test -f y_tab.h; then + y_tab_nodot=true +fi + +# The parser itself, the first file, is the destination of the .y.c +# rule in the Makefile. +parser=$1 + +# A sed program to s/FROM/TO/g for all the FROM/TO so that, for +# instance, we rename #include "y.tab.h" into #include "parse.h" +# during the conversion from y.tab.c to parse.c. +sed_fix_filenames= + +# Also rename header guards, as Bison 2.7 for instance uses its header +# guard in its implementation file. +sed_fix_header_guards= -pairlist= while test "$#" -ne 0; do if test "$1" = "--"; then shift break fi - pairlist="$pairlist $1" + from=$1 + # Handle y_tab.c and y_tab.h output by DOS + if $y_tab_nodot; then + case $from in + "y.tab.c") from=y_tab.c;; + "y.tab.h") from=y_tab.h;; + esac + fi shift + to=$1 + shift + sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" + sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" done # The program to run. @@ -115,98 +180,56 @@ esac ret=$? if test $ret -eq 0; then - set X $pairlist - shift - first=yes - # Since DOS filename conventions don't allow two dots, - # the DOS version of Bison writes out y_tab.c instead of y.tab.c - # and y_tab.h instead of y.tab.h. Test to see if this is the case. - y_tab_nodot="no" - if test -f y_tab.c || test -f y_tab.h; then - y_tab_nodot="yes" - fi - - # The directory holding the input. - input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'` - # Quote $INPUT_DIR so we can use it in a regexp. - # FIXME: really we should care about more than `.' and `\'. - input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'` - - while test "$#" -ne 0; do - from="$1" - # Handle y_tab.c and y_tab.h output by DOS - if test $y_tab_nodot = "yes"; then - if test $from = "y.tab.c"; then - from="y_tab.c" - else - if test $from = "y.tab.h"; then - from="y_tab.h" - fi - fi - fi + for from in * + do + to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` if test -f "$from"; then # If $2 is an absolute path name, then just use that, - # otherwise prepend `../'. - case "$2" in - [\\/]* | ?:[\\/]*) target="$2";; - *) target="../$2";; + # otherwise prepend '../'. + case $to in + [\\/]* | ?:[\\/]*) target=$to;; + *) target="../$to";; esac - # We do not want to overwrite a header file if it hasn't - # changed. This avoid useless recompilations. However the - # parser itself (the first file) should always be updated, - # because it is the destination of the .y.c rule in the - # Makefile. Divert the output of all other files to a temporary - # file so we can compare them to existing versions. - if test $first = no; then + # Do not overwrite unchanged header files to avoid useless + # recompilations. Always update the parser itself: it is the + # destination of the .y.c rule in the Makefile. Divert the + # output of all other files to a temporary file so we can + # compare them to existing versions. + if test $from != $parser; then realtarget="$target" - target="tmp-`echo $target | sed s/.*[\\/]//g`" + target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` fi - # Edit out `#line' or `#' directives. - # - # We don't want the resulting debug information to point at - # an absolute srcdir; it is better for it to just mention the - # .y file with no path. - # - # We want to use the real output file name, not yy.lex.c for - # instance. - # - # We want the include guards to be adjusted too. - FROM=`echo "$from" | sed \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ - -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` - TARGET=`echo "$2" | sed \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ - -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` - - sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \ - -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$? - - # Check whether header files must be updated. - if test $first = no; then + + # Munge "#line" or "#" directives. Don't let the resulting + # debug information point at an absolute srcdir. Use the real + # output file name, not yy.lex.c for instance. Adjust the + # include guards too. + sed -e "/^#/!b" \ + -e "s|$input_rx|$input_sub_rx|" \ + -e "$sed_fix_filenames" \ + -e "$sed_fix_header_guards" \ + "$from" >"$target" || ret=$? + + # Check whether files must be updated. + if test "$from" != "$parser"; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then - echo "$2" is unchanged + echo "$to is unchanged" rm -f "$target" else - echo updating "$2" + echo "updating $to" mv -f "$target" "$realtarget" fi fi else - # A missing file is only an error for the first file. This - # is a blatant hack to let us support using "yacc -d". If -d - # is not specified, we don't want an error when the header - # file is "missing". - if test $first = yes; then + # A missing file is only an error for the parser. This is a + # blatant hack to let us support using "yacc -d". If -d is not + # specified, don't fail when the header file is "missing". + if test "$from" = "$parser"; then ret=1 fi fi - shift - shift - first=no done -else - ret=$? fi # Remove the directory. diff --git a/configure b/configure index 30a4cc6..447015e 100755 --- a/configure +++ b/configure @@ -1,19 +1,17 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for elfutils 0.155. +# Generated by GNU Autoconf 2.69 for elfutils 0.160. # # Report bugs to . # # -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# Copyright (C) 1996-2012 Red Hat, Inc. +# Copyright (C) 1996-2014 Red Hat, Inc. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## @@ -138,6 +136,31 @@ export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh @@ -171,11 +194,13 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi -test x\$exitcode = x0 || exit 1" +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else @@ -215,21 +240,25 @@ IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi if test x$as_have_required = xno; then : @@ -332,6 +361,14 @@ $as_echo X"$as_dir" | } # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take @@ -453,6 +490,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). @@ -487,16 +528,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -508,28 +549,8 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -561,16 +582,58 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='elfutils' PACKAGE_TARNAME='elfutils' -PACKAGE_VERSION='0.155' -PACKAGE_STRING='elfutils 0.155' +PACKAGE_VERSION='0.160' +PACKAGE_STRING='elfutils 0.160' PACKAGE_BUGREPORT='https://bugzilla.redhat.com/' PACKAGE_URL='' ac_unique_file="libelf/libelf.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +CC_BIARCH +BIARCH_FALSE +BIARCH_TRUE +EGREP +GREP +CPP eu_version XGETTEXT_EXTRA_OPTIONS MSGMERGE @@ -600,18 +663,23 @@ TESTS_RPATH_FALSE TESTS_RPATH_TRUE BUILD_STATIC_FALSE BUILD_STATIC_TRUE +USE_VALGRIND_FALSE +USE_VALGRIND_TRUE +HAVE_VALGRIND GCOV_FALSE GCOV_TRUE GPROF_FALSE GPROF_TRUE DEBUGPRED -MUDFLAP_FALSE -MUDFLAP_TRUE NEVER_FALSE NEVER_TRUE base_cpu NATIVE_LD_FALSE NATIVE_LD_TRUE +NM +READELF +ac_ct_AR +AR LEXLIB LEX_OUTPUT_ROOT LEX @@ -635,8 +703,6 @@ CPPFLAGS LDFLAGS CFLAGS CC -ENABLE_DWZ_FALSE -ENABLE_DWZ_TRUE USE_LOCKS_FALSE USE_LOCKS_TRUE host_os @@ -651,6 +717,10 @@ MODVERSION MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V am__untar am__tar AMTAR @@ -715,23 +785,24 @@ SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking +enable_silent_rules enable_maintainer_mode enable_deterministic_archives enable_thread_safety -enable_dwz enable_dependency_tracking enable_largefile enable_generic -enable_mudflap enable_debugpred enable_gprof enable_gcov +enable_valgrind enable_tests_rpath enable_libebl_subdir with_zlib with_bzlib with_lzma enable_nls +with_biarch ' ac_precious_vars='build_alias host_alias @@ -742,7 +813,8 @@ LDFLAGS LIBS CPPFLAGS YACC -YFLAGS' +YFLAGS +CPP' # Initialize some variables set by options. @@ -1198,8 +1270,6 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1285,7 +1355,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures elfutils 0.155 to adapt to many kinds of systems. +\`configure' configures elfutils 0.160 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1355,7 +1425,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of elfutils 0.155:";; + short | recursive ) echo "Configuration of elfutils 0.160:";; esac cat <<\_ACEOF @@ -1363,22 +1433,25 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer --enable-deterministic-archives ar and ranlib default to -D behavior - --enable-thread-safety enable thread safety of libraries - --enable-dwz enable experimental GNU ref_alt FORM, dwz multi file - support in libdw - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors + --enable-thread-safety enable thread safety of libraries EXPERIMENTAL + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build --disable-largefile omit support for large files --disable-generic do not build generic linker - --enable-mudflap build binaries with mudflap instrumentation --enable-debugpred build binaries with support to debug branch prediction --enable-gprof build binaries with gprof support --enable-gcov build binaries with gcov support + --enable-valgrind run all tests under valgrind --enable-tests-rpath build $ORIGIN-using rpath into tests --enable-libebl-subdir=DIR install libebl_CPU modules in $(libdir)/DIR @@ -1390,6 +1463,7 @@ Optional Packages: --with-zlib support [zlib] compression in libdwfl --with-bzlib support [bzlib] compression in libdwfl --with-lzma support [lzma] compression in libdwfl + --with-biarch enable biarch tests despite build problems Some influential environment variables: CC C compiler command @@ -1405,6 +1479,7 @@ Some influential environment variables: YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. + CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1472,14 +1547,14 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -elfutils configure 0.155 -generated by GNU Autoconf 2.68 +elfutils configure 0.160 +generated by GNU Autoconf 2.69 -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -Copyright (C) 1996-2012 Red Hat, Inc. +Copyright (C) 1996-2014 Red Hat, Inc. _ACEOF exit fi @@ -1553,7 +1628,7 @@ $as_echo "$ac_try_echo"; } >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext + test -x conftest$ac_exeext }; then : ac_retval=0 else @@ -1571,12 +1646,359 @@ fi as_fn_set_status $ac_retval } # ac_fn_c_try_link + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by elfutils $as_me 0.155, which was -generated by GNU Autoconf 2.68. Invocation command line was +It was created by elfutils $as_me 0.160, which was +generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -1958,7 +2380,7 @@ ac_config_files="$ac_config_files config/Makefile" -am__api_version='1.11' +am__api_version='1.13' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -1997,7 +2419,7 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -2055,9 +2477,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -2068,32 +2487,40 @@ case `pwd` in esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac -# Do `set' in a subshell so we don't clobber the current shell's +# Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done test "$2" = conftest.file ) then @@ -2105,6 +2532,16 @@ Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. @@ -2127,12 +2564,12 @@ if test x"${MISSING+set}" != xset; then esac fi # Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then @@ -2144,10 +2581,10 @@ if test x"${install_sh}" != xset; then esac fi -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. +# will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. @@ -2166,7 +2603,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2206,7 +2643,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2257,7 +2694,7 @@ do test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ @@ -2286,12 +2723,6 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -2310,7 +2741,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2374,20 +2805,59 @@ else fi rmdir .tst 2>/dev/null -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; fi -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi @@ -2396,7 +2866,7 @@ fi # Define the identity of the package. PACKAGE='elfutils' - VERSION='0.155' + VERSION='0.160' cat >>confdefs.h <<_ACEOF @@ -2424,12 +2894,22 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' @@ -2437,6 +2917,7 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. @@ -2591,27 +3072,9 @@ if test "$use_locks" = yes; then : $as_echo "#define USE_LOCKS 1" >>confdefs.h fi - - - -# Check whether --enable-dwz was given. -if test "${enable_dwz+set}" = set; then : - enableval=$enable_dwz; enable_dwz=$enableval -else - enable_dwz=no -fi - - if test "$enable_dwz" = yes; then - ENABLE_DWZ_TRUE= - ENABLE_DWZ_FALSE='#' -else - ENABLE_DWZ_TRUE='#' - ENABLE_DWZ_FALSE= -fi - -if test "$enable_dwz" = yes; then : - $as_echo "#define ENABLE_DWZ 1" >>confdefs.h - +if test "$use_locks" = yes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: thread-safety is EXPERIMENTAL tests might fail." >&5 +$as_echo "$as_me: WARNING: thread-safety is EXPERIMENTAL tests might fail." >&2;} fi @@ -2638,7 +3101,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2678,7 +3141,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2731,7 +3194,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2772,7 +3235,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue @@ -2830,7 +3293,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2874,7 +3337,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3320,8 +3783,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -3424,7 +3886,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. +# Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -3480,8 +3942,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -3516,16 +3978,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -3534,8 +3996,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -3543,7 +4005,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -3614,7 +4076,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3654,7 +4116,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3707,7 +4169,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3751,7 +4213,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3783,7 +4245,8 @@ a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } -e { yyless (input () != 0); } +e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ + yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% @@ -3894,161 +4357,436 @@ fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc with C99 support" >&5 -$as_echo_n "checking for gcc with C99 support... " >&6; } -if ${ac_cv_c99+:} false; then : +# Only available since automake 1.12 +if test -n "$ac_tool_prefix"; then + for ac_prog in ar lib "link -lib" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else - old_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -std=gnu99" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (int a) { for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c99=yes + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. else - ac_cv_c99=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -CFLAGS="$old_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c99" >&5 -$as_echo "$ac_cv_c99" >&6; } -if test "x$ac_cv_c99" != xyes; then : - as_fn_error $? "gcc with C99 support required" "$LINENO" 5 +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __thread support" >&5 -$as_echo_n "checking for __thread support... " >&6; } -if ${ac_cv_tls+:} false; then : + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar lib "link -lib" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else - # Use the same flags that we use for our DSOs, so the test is representative. -# Some old compiler/linker/libc combinations fail some ways and not others. -save_CFLAGS="$CFLAGS" -save_LDFLAGS="$LDFLAGS" -CFLAGS="-fpic $CFLAGS" -LDFLAGS="-shared -Wl,-z,defs,-z,relro $LDFLAGS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#undef __thread -static __thread int a; int foo (int b) { return a + b; } -int -main () -{ -exit (foo (0)); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_tls=yes + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else - ac_cv_tls=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -CFLAGS="$save_CFLAGS" -LDFLAGS="$save_LDFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5 -$as_echo "$ac_cv_tls" >&6; } -if test "x$ac_cv_tls" != xyes; then : - as_fn_error $? "__thread support required" "$LINENO" 5 +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : - enableval=$enable_largefile; + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi fi -if test "$enable_largefile" != no; then +: ${AR=ar} - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if ${ac_cv_sys_largefile_CC+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 +$as_echo_n "checking the archiver ($AR) interface... " >&6; } +if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + am_cv_ar_interface=ar + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} +int some_variable = 0; _ACEOF - if ac_fn_c_try_compile "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_largefile_CC=' -n32'; break +if ac_fn_c_try_compile "$LINENO"; then : + am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 + (eval $am_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + am_cv_ar_interface=ar + else + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 + (eval $am_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + am_cv_ar_interface=lib + else + am_cv_ar_interface=unknown + fi + fi + rm -f conftest.lib libconftest.a + fi -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 +$as_echo "$am_cv_ar_interface" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if ${ac_cv_sys_file_offset_bits+:} false; then : +case $am_cv_ar_interface in +ar) + ;; +lib) + # Microsoft lib, so override with the ar-lib wrapper script. + # FIXME: It is wrong to rewrite AR. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__AR in this case, + # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something + # similar. + AR="$am_aux_dir/ar-lib $AR" + ;; +unknown) + as_fn_error $? "could not determine $AR interface" "$LINENO" 5 + ;; +esac + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}readelf", so it can be a program name with args. +set dummy ${ac_tool_prefix}readelf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_READELF+:} false; then : $as_echo_n "(cached) " >&6 else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ + if test -n "$READELF"; then + ac_cv_prog_READELF="$READELF" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_READELF="${ac_tool_prefix}readelf" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=no; break +fi +fi +READELF=$ac_cv_prog_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_READELF"; then + ac_ct_READELF=$READELF + # Extract the first word of "readelf", so it can be a program name with args. +set dummy readelf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_READELF+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_READELF"; then + ac_cv_prog_ac_ct_READELF="$ac_ct_READELF" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_READELF="readelf" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_READELF=$ac_cv_prog_ac_ct_READELF +if test -n "$ac_ct_READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_READELF" >&5 +$as_echo "$ac_ct_READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_READELF" = x; then + READELF="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + READELF=$ac_ct_READELF + fi +else + READELF="$ac_cv_prog_READELF" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. +set dummy ${ac_tool_prefix}nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + ac_cv_prog_NM="$NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NM="${ac_tool_prefix}nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NM=$ac_cv_prog_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NM"; then + ac_ct_NM=$NM + # Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NM"; then + ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NM="nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NM=$ac_cv_prog_ac_ct_NM +if test -n "$ac_ct_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 +$as_echo "$ac_ct_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NM" = x; then + NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NM=$ac_ct_NM + fi +else + NM="$ac_cv_prog_NM" +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc with C99 support" >&5 +$as_echo_n "checking for gcc with C99 support... " >&6; } +if ${ac_cv_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + old_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -std=gnu99" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (int a) { for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; } +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c99=yes +else + ac_cv_c99=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +CFLAGS="$old_CFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c99" >&5 +$as_echo "$ac_cv_c99" >&6; } +if test "x$ac_cv_c99" != xyes; then : + as_fn_error $? "gcc with C99 support required" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __thread support" >&5 +$as_echo_n "checking for __thread support... " >&6; } +if ${ac_cv_tls+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Use the same flags that we use for our DSOs, so the test is representative. +# Some old compiler/linker/libc combinations fail some ways and not others. +save_CFLAGS="$CFLAGS" +save_LDFLAGS="$LDFLAGS" +CFLAGS="-fpic $CFLAGS" +LDFLAGS="-shared -Wl,-z,defs,-z,relro $LDFLAGS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#undef __thread +static __thread int a; int foo (int b) { return a + b; } +int +main () +{ +exit (foo (0)); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_tls=yes +else + ac_cv_tls=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +CFLAGS="$save_CFLAGS" +LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5 +$as_echo "$ac_cv_tls" >&6; } +if test "x$ac_cv_tls" != xyes; then : + as_fn_error $? "__thread support required" "$LINENO" 5 +fi + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, @@ -4066,29 +4804,30 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=64; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown + if ac_fn_c_try_compile "$LINENO"; then : break -done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF -;; -esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if ${ac_cv_sys_large_files+:} false; then : +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do @@ -4112,12 +4851,12 @@ main () } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=no; break + ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#define _LARGE_FILES 1 +#define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, @@ -4136,28 +4875,99 @@ main () } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=1; break + ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown + ac_cv_sys_file_offset_bits=unknown break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* - fi -fi - - + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + +fi + + native_ld=no # Check whether --enable-generic was given. if test "${enable_generic+set}" = set; then : @@ -4198,49 +5008,6 @@ else fi -use_mudflap=no -# Check whether --enable-mudflap was given. -if test "${enable_mudflap+set}" = set; then : - enableval=$enable_mudflap; if test "x$enable_mudflap" = xyes; then - # Check whether the compiler support -fmudflap. - old_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fmudflap" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - use_mudflap=yes -else - use_mudflap=fail -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$old_CFLAGS" -fi -fi - -if test "$use_mudflap" = fail; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "--enable-mudflap requires a compiler which understands this option -See \`config.log' for more details" "$LINENO" 5; } -fi - if test "$use_mudflap" = yes; then - MUDFLAP_TRUE= - MUDFLAP_FALSE='#' -else - MUDFLAP_TRUE='#' - MUDFLAP_FALSE= -fi - - # Check whether --enable-debugpred was given. if test "${enable_debugpred+set}" = set; then : enableval=$enable_debugpred; use_debugpred=$enableval @@ -4296,7 +5063,66 @@ else fi - if test "$use_mudflap" = yes -o "$use_gprof" = yes -o "$use_gcov" = yes; then +# Check whether --enable-valgrind was given. +if test "${enable_valgrind+set}" = set; then : + enableval=$enable_valgrind; use_valgrind=$enableval +else + use_valgrind=no +fi + +if test "$use_valgrind" = yes; then + # Extract the first word of "valgrind", so it can be a program name with args. +set dummy valgrind; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_HAVE_VALGRIND+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$HAVE_VALGRIND"; then + ac_cv_prog_HAVE_VALGRIND="$HAVE_VALGRIND" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_HAVE_VALGRIND="yes" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_HAVE_VALGRIND" && ac_cv_prog_HAVE_VALGRIND="no" +fi +fi +HAVE_VALGRIND=$ac_cv_prog_HAVE_VALGRIND +if test -n "$HAVE_VALGRIND"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_VALGRIND" >&5 +$as_echo "$HAVE_VALGRIND" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "$HAVE_VALGRIND" = "no"; then + as_fn_error $? "valgrind not found" "$LINENO" 5 + fi +fi + if test "$use_valgrind" = yes; then + USE_VALGRIND_TRUE= + USE_VALGRIND_FALSE='#' +else + USE_VALGRIND_TRUE='#' + USE_VALGRIND_FALSE= +fi + + + if test "$use_gprof" = yes -o "$use_gcov" = yes; then BUILD_STATIC_TRUE= BUILD_STATIC_FALSE='#' else @@ -4648,6 +5474,9 @@ ac_config_files="$ac_config_files libelf/Makefile" ac_config_files="$ac_config_files libebl/Makefile" +ac_config_files="$ac_config_files libdwelf/Makefile" + + ac_config_files="$ac_config_files libdw/Makefile" @@ -4703,7 +5532,7 @@ $as_echo "$USE_NLS" >&6; } - GETTEXT_MACRO_VERSION=0.17 + GETTEXT_MACRO_VERSION=0.18 @@ -4795,7 +5624,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4813,219 +5642,798 @@ if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$localedir" || localedir='${datadir}/locale' + + + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + + + ac_config_commands="$ac_config_commands po-directories" + + + + + +ac_config_files="$ac_config_files version.h:config/version.h.in" + + + +# 1.234 -> 1234 +case "$PACKAGE_VERSION" in +[0-9].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;; +*) as_fn_error $? "confused by version number '$PACKAGE_VERSION'" "$LINENO" 5 ;; +esac +case "$eu_version" in +*.*) + # 1234.567 -> "1234", "567" + eu_extra_version="${eu_version#*.}" + eu_version="${eu_version%%.*}" + case "$eu_extra_version" in + [0-9][0-9][0-9]) ;; + [0-9][0-9]) eu_extra_version="${eu_extra_version}0" ;; + [0-9]) eu_extra_version="${eu_extra_version}00" ;; + *) as_fn_error $? "confused by version number '$PACKAGE_VERSION'" "$LINENO" 5 ;; + esac + ;; +*) + eu_extra_version=000 + ;; +esac + +case "$eu_version" in + 0[0-9][0-9][0-9]) eu_version="${eu_version#0}$eu_extra_version" ;; +[0-9][0-9][0-9][0-9]) eu_version="${eu_version}$eu_extra_version" ;; +[0-9][0-9][0-9]) eu_version="${eu_version}0$eu_extra_version" ;; +[0-9][0-9]) eu_version="${eu_version}00$eu_extra_version";; +*) as_fn_error $? "confused by version number '$PACKAGE_VERSION'" "$LINENO" 5 ;; +esac + +# Round up to the next release API (x.y) version. +eu_version=$(( (eu_version + 999) / 1000 )) + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then +$as_echo "#define STDC_HEADERS 1" >>confdefs.h - case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; - *) MSGFMT_015=$MSGFMT ;; - esac +fi - case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; - *) GMSGFMT_015=$GMSGFMT ;; - esac +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF +fi +done -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi -# Find out how to test for executable files. Don't use a zero-byte file, -# as systems may use methods other than mode bits to determine executability. -cat >conf$$.file <<_ASEOF -#! /bin/sh -exit 0 -_ASEOF -chmod +x conf$$.file -if test -x conf$$.file >/dev/null 2>&1; then - ac_executable_p="test -x" +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if ${ac_cv_sizeof_long+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_executable_p="test -f" -fi -rm -f conf$$.file + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : -# Extract the first word of "xgettext", so it can be a program name with args. -set dummy xgettext; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_XGETTEXT+:} false; then : - $as_echo_n "(cached) " >&6 else - case "$XGETTEXT" in - [\\/]* | ?:[\\/]*) - ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. - ;; - *) - ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$ac_save_IFS" - test -z "$ac_dir" && ac_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then - echo "$as_me: trying $ac_dir/$ac_word..." >&5 - if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && - (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then - ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" - break 2 - fi - fi - done - done - IFS="$ac_save_IFS" - test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" - ;; -esac + if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long=0 + fi fi -XGETTEXT="$ac_cv_path_XGETTEXT" -if test "$XGETTEXT" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 -$as_echo "$XGETTEXT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } - rm -f messages.po - case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; - *) XGETTEXT_015=$XGETTEXT ;; - esac +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi -# Find out how to test for executable files. Don't use a zero-byte file, -# as systems may use methods other than mode bits to determine executability. -cat >conf$$.file <<_ASEOF -#! /bin/sh -exit 0 -_ASEOF -chmod +x conf$$.file -if test -x conf$$.file >/dev/null 2>&1; then - ac_executable_p="test -x" +# 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_fn_c_check_type "$LINENO" "struct user_regs_struct" "ac_cv_type_struct_user_regs_struct" "#include + #include + #include +" +if test "x$ac_cv_type_struct_user_regs_struct" = xyes; then : + sys_user_has_user_regs=yes else - ac_executable_p="test -f" + sys_user_has_user_regs=no fi -rm -f conf$$.file -# Extract the first word of "msgmerge", so it can be a program name with args. -set dummy msgmerge; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_MSGMERGE+:} false; then : +if test "$sys_user_has_user_regs" = "yes"; then + +$as_echo "#define HAVE_SYS_USER_REGS 1" >>confdefs.h + +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. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $CC option for 32-bit word size" >&5 +$as_echo_n "checking $CC option for 32-bit word size... " >&6; } +if ${utrace_cv_CC_m32+:} false; then : $as_echo_n "(cached) " >&6 else - case "$MSGMERGE" in - [\\/]* | ?:[\\/]*) - ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. - ;; - *) - ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$ac_save_IFS" - test -z "$ac_dir" && ac_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then - echo "$as_me: trying $ac_dir/$ac_word..." >&5 - if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then - ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" - break 2 - fi - fi - done - done - IFS="$ac_save_IFS" - test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" - ;; -esac + save_CC="$CC" +utrace_cv_CC_m32=none +for ut_try in -m32 -m31; do + CC=`echo "$save_CC" | sed 's/ -m[36][241]//'`" $ut_try" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 1; } +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + utrace_cv_CC_m32=$ut_try fi -MSGMERGE="$ac_cv_path_MSGMERGE" -if test "$MSGMERGE" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 -$as_echo "$MSGMERGE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test x$utrace_cv_CC_m32 = xnone || break +done +CC="$save_CC" fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $utrace_cv_CC_m32" >&5 +$as_echo "$utrace_cv_CC_m32" >&6; } +if test x$utrace_cv_CC_m32 != xnone; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if ${utrace_cv_host64+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#if (UINTPTR_MAX > 0xffffffffUL) +@utrace_host64@ +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "@utrace_host64@" >/dev/null 2>&1; then : + utrace_cv_host64=yes +else + utrace_cv_host64=no +fi +rm -f conftest* - test -n "$localedir" || localedir='${datadir}/locale' - - - test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= - - - ac_config_commands="$ac_config_commands po-directories" - +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $utrace_cv_host64" >&5 +$as_echo "$utrace_cv_host64" >&6; } +if test $utrace_cv_host64 = no; then : + utrace_biarch=-m64 utrace_thisarch=$utrace_cv_CC_m32 +else + utrace_biarch=$utrace_cv_CC_m32 utrace_thisarch=-m64 +fi +biarch_CC=`echo "$CC" | sed "s/ *${utrace_thisarch}//"` +biarch_CC="$biarch_CC $utrace_biarch" +fi +utrace_biarch_forced=no +# Check whether --with-biarch was given. +if test "${with_biarch+set}" = set; then : + withval=$with_biarch; if test "x$with_biarch" != xno; then : + utrace_biarch_forced=yes +fi +fi -ac_config_files="$ac_config_files version.h:config/version.h.in" +if test $utrace_biarch_forced = yes; then : + utrace_cv_cc_biarch=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: enabling biarch tests regardless using $biarch_CC" >&5 +$as_echo "$as_me: enabling biarch tests regardless using $biarch_CC" >&6;} +else + if test x$utrace_cv_CC_m32 != xnone; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $biarch_CC makes executables we can run" >&5 +$as_echo_n "checking whether $biarch_CC makes executables we can run... " >&6; } +if ${utrace_cv_cc_biarch+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_CC="$CC" +CC="$biarch_CC" +if test "$cross_compiling" = yes; then : + utrace_cv_cc_biarch=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + utrace_cv_cc_biarch=yes +else + utrace_cv_cc_biarch=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi -# 1.234 -> 1234 -case "$PACKAGE_VERSION" in -[0-9].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;; -*) as_fn_error $? "confused by version number '$PACKAGE_VERSION'" "$LINENO" 5 ;; -esac -case "$eu_version" in -*.*) - # 1234.567 -> "1234", "567" - eu_extra_version="${eu_version#*.}" - eu_version="${eu_version%%.*}" - case "$eu_extra_version" in - [0-9][0-9][0-9]) ;; - [0-9][0-9]) eu_extra_version="${eu_extra_version}0" ;; - [0-9]) eu_extra_version="${eu_extra_version}00" ;; - *) as_fn_error $? "confused by version number '$PACKAGE_VERSION'" "$LINENO" 5 ;; - esac - ;; -*) - eu_extra_version=000 - ;; -esac +CC="$save_CC" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $utrace_cv_cc_biarch" >&5 +$as_echo "$utrace_cv_cc_biarch" >&6; } +else + utrace_cv_cc_biarch=no +fi +if test $utrace_cv_cc_biarch != yes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: not running biarch tests, $biarch_CC does not work" >&5 +$as_echo "$as_me: WARNING: not running biarch tests, $biarch_CC does not work" >&2;} +fi +fi + if test $utrace_cv_cc_biarch = yes; then + BIARCH_TRUE= + BIARCH_FALSE='#' +else + BIARCH_TRUE='#' + BIARCH_FALSE= +fi -case "$eu_version" in - 0[0-9][0-9][0-9]) eu_version="${eu_version#0}$eu_extra_version" ;; -[0-9][0-9][0-9][0-9]) eu_version="${eu_version}$eu_extra_version" ;; -[0-9][0-9][0-9]) eu_version="${eu_version}0$eu_extra_version" ;; -[0-9][0-9]) eu_version="${eu_version}00$eu_extra_version";; -*) as_fn_error $? "confused by version number '$PACKAGE_VERSION'" "$LINENO" 5 ;; -esac +# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine. +CC_BIARCH="$CC $utrace_biarch" -# Round up to the next release API (x.y) version. -eu_version=$(( (eu_version + 999) / 1000 )) cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -5136,6 +6544,14 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' @@ -5152,10 +6568,6 @@ if test -z "${USE_LOCKS_TRUE}" && test -z "${USE_LOCKS_FALSE}"; then as_fn_error $? "conditional \"USE_LOCKS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${ENABLE_DWZ_TRUE}" && test -z "${ENABLE_DWZ_FALSE}"; then - as_fn_error $? "conditional \"ENABLE_DWZ\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -5172,10 +6584,6 @@ if test -z "${NEVER_TRUE}" && test -z "${NEVER_FALSE}"; then as_fn_error $? "conditional \"NEVER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${MUDFLAP_TRUE}" && test -z "${MUDFLAP_FALSE}"; then - as_fn_error $? "conditional \"MUDFLAP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${GPROF_TRUE}" && test -z "${GPROF_FALSE}"; then as_fn_error $? "conditional \"GPROF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -5184,6 +6592,10 @@ if test -z "${GCOV_TRUE}" && test -z "${GCOV_FALSE}"; then as_fn_error $? "conditional \"GCOV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${USE_VALGRIND_TRUE}" && test -z "${USE_VALGRIND_FALSE}"; then + as_fn_error $? "conditional \"USE_VALGRIND\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${BUILD_STATIC_TRUE}" && test -z "${BUILD_STATIC_FALSE}"; then as_fn_error $? "conditional \"BUILD_STATIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -5216,6 +6628,10 @@ if test -z "${STANDALONE_TRUE}" && test -z "${STANDALONE_FALSE}"; then as_fn_error $? "conditional \"STANDALONE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${BIARCH_TRUE}" && test -z "${BIARCH_FALSE}"; then + as_fn_error $? "conditional \"BIARCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 @@ -5514,16 +6930,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -5583,28 +6999,16 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -5625,8 +7029,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by elfutils $as_me 0.155, which was -generated by GNU Autoconf 2.68. Invocation command line was +This file was extended by elfutils $as_me 0.160, which was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -5691,11 +7095,11 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -elfutils config.status 0.155 -configured by $0, generated by GNU Autoconf 2.68, +elfutils config.status 0.160 +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -5786,7 +7190,7 @@ fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' @@ -5836,6 +7240,7 @@ do "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "libelf/Makefile") CONFIG_FILES="$CONFIG_FILES libelf/Makefile" ;; "libebl/Makefile") CONFIG_FILES="$CONFIG_FILES libebl/Makefile" ;; + "libdwelf/Makefile") CONFIG_FILES="$CONFIG_FILES libdwelf/Makefile" ;; "libdw/Makefile") CONFIG_FILES="$CONFIG_FILES libdw/Makefile" ;; "libdwfl/Makefile") CONFIG_FILES="$CONFIG_FILES libdwfl/Makefile" ;; "libcpu/Makefile") CONFIG_FILES="$CONFIG_FILES libcpu/Makefile" ;; @@ -6442,7 +7847,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files + # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in @@ -6455,7 +7860,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but + # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -6489,21 +7894,19 @@ $as_echo X"$mf" | continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. + # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue + test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || @@ -6546,7 +7949,7 @@ $as_echo X"$file" | case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. @@ -6562,7 +7965,8 @@ $as_echo X"$file" | if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" - cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration @@ -6573,12 +7977,12 @@ $as_echo X"$file" | test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` - # Hide the ALL_LINGUAS assigment from automake < 1.5. + # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. - # Hide the ALL_LINGUAS assigment from automake < 1.5. + # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES diff --git a/configure.ac b/configure.ac index adec1c1..76a172d 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. dnl Configure input file for elfutils. -*-autoconf-*- dnl -dnl Copyright (C) 1996-2012 Red Hat, Inc. +dnl Copyright (C) 1996-2014 Red Hat, Inc. dnl dnl This file is part of elfutils. dnl @@ -17,16 +17,16 @@ 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 . -AC_INIT([elfutils],[0.155],[https://bugzilla.redhat.com/],[elfutils]) +AC_INIT([elfutils],[0.160],[https://bugzilla.redhat.com/],[elfutils]) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_FILES([config/Makefile]) -AC_COPYRIGHT([Copyright (C) 1996-2012 Red Hat, Inc.]) +AC_COPYRIGHT([Copyright (C) 1996-2014 Red Hat, Inc.]) AC_PREREQ(2.63) dnl Minimum Autoconf version required. dnl We use GNU make extensions; automake 1.10 defaults to -Wportability. -AM_INIT_AUTOMAKE([gnits 1.8 -Wno-portability dist-bzip2 no-dist-gzip]) +AM_INIT_AUTOMAKE([gnits 1.11 -Wno-portability dist-bzip2 no-dist-gzip parallel-tests]) AM_MAINTAINER_MODE dnl Unique ID for this build. @@ -60,25 +60,24 @@ AC_DEFINE_UNQUOTED(DEFAULT_AR_DETERMINISTIC, $default_ar_deterministic, [Should ar and ranlib use -D behavior by default?]) AC_ARG_ENABLE([thread-safety], -AS_HELP_STRING([--enable-thread-safety], [enable thread safety of libraries]), -use_locks=$enableval, use_locks=no) +AS_HELP_STRING([--enable-thread-safety], + [enable thread safety of libraries EXPERIMENTAL]), + use_locks=$enableval, use_locks=no) AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes) AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)]) +AS_IF([test "$use_locks" = yes], + [AC_MSG_WARN([thread-safety is EXPERIMENTAL tests might fail.])]) AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.]) -AC_ARG_ENABLE([dwz], -AS_HELP_STRING([--enable-dwz], [enable experimental GNU ref_alt FORM, dwz multi file support in libdw]), -enable_dwz=$enableval, enable_dwz=no) -AM_CONDITIONAL(ENABLE_DWZ, test "$enable_dwz" = yes) -AS_IF([test "$enable_dwz" = yes], [AC_DEFINE(ENABLE_DWZ)]) - -AH_TEMPLATE([ENABLE_DWZ], [Defined if libdw should support GNU ref_alt FORM, dwz multi files.]) - AC_PROG_CC AC_PROG_RANLIB AC_PROG_YACC AM_PROG_LEX +# Only available since automake 1.12 +m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) +AC_CHECK_TOOL([READELF], [readelf]) +AC_CHECK_TOOL([NM], [nm]) AC_CACHE_CHECK([for gcc with C99 support], ac_cv_c99, [dnl old_CFLAGS="$CFLAGS" @@ -142,26 +141,6 @@ dnl Support to work around automake's inflexible dependency generation. dnl See src/Makefile.am for more information. AM_CONDITIONAL(NEVER, false) -dnl Enable debugging via mudflap. This option will cause most libraries -dnl to be built as archives which are statically linked into the applications. -dnl All code, as far as possible, is compiled instrumented to catch all -dnl the bugs valgrind is able to catch. -use_mudflap=no -AC_ARG_ENABLE([mudflap], -AS_HELP_STRING([--enable-mudflap], -[build binaries with mudflap instrumentation]), [dnl -if test "x$enable_mudflap" = xyes; then - # Check whether the compiler support -fmudflap. - old_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fmudflap" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[use_mudflap=yes],[use_mudflap=fail]) - CFLAGS="$old_CFLAGS" -fi]) -if test "$use_mudflap" = fail; then - AC_MSG_FAILURE([--enable-mudflap requires a compiler which understands this option]) -fi -AM_CONDITIONAL(MUDFLAP, test "$use_mudflap" = yes) - dnl enable debugging of branch prediction. AC_ARG_ENABLE([debugpred], AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]), @@ -190,8 +169,19 @@ if test "$use_gcov" = yes; then fi AM_CONDITIONAL(GCOV, test "$use_gcov" = yes) +AC_ARG_ENABLE([valgrind], +AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]), +[use_valgrind=$enableval], [use_valgrind=no]) +if test "$use_valgrind" = yes; then + AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no) + if test "$HAVE_VALGRIND" = "no"; then + AC_MSG_ERROR([valgrind not found]) + fi +fi +AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes) + AM_CONDITIONAL(BUILD_STATIC, [dnl -test "$use_mudflap" = yes -o "$use_gprof" = yes -o "$use_gcov" = yes]) +test "$use_gprof" = yes -o "$use_gcov" = yes]) AC_ARG_ENABLE([tests-rpath], AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]), @@ -237,6 +227,9 @@ AC_CONFIG_FILES([libelf/Makefile]) dnl Higher-level ELF support library. AC_CONFIG_FILES([libebl/Makefile]) +dnl DWARF-ELF Lower-level Functions support library. +AC_CONFIG_FILES([libdwelf/Makefile]) + dnl DWARF library. AC_CONFIG_FILES([libdw/Makefile]) @@ -306,4 +299,26 @@ esac # Round up to the next release API (x.y) version. 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 ] + [#include ] + [#include ]]) +if test "$sys_user_has_user_regs" = "yes"; then + AC_DEFINE(HAVE_SYS_USER_REGS, 1, + [Define to 1 if 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 +# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine. +CC_BIARCH="$CC $utrace_biarch" +AC_SUBST([CC_BIARCH]) + AC_OUTPUT diff --git a/elfutils.spec b/elfutils.spec index c680bc9..79d7830 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ # -*- rpm-spec-*- Summary: A collection of utilities and DSOs to handle compiled objects Name: elfutils -Version: 0.155 +Version: 0.160 Release: 1 License: GPLv3+ and (GPLv2+ or LGPLv3+) Group: Development/Tools @@ -169,6 +169,7 @@ rm -rf ${RPM_BUILD_ROOT} %{_includedir}/elfutils/libebl.h %{_includedir}/elfutils/libdw.h %{_includedir}/elfutils/libdwfl.h +%{_includedir}/elfutils/libdwelf.h %{_libdir}/libebl.a #%{_libdir}/libasm.so %{_libdir}/libdw.so @@ -195,6 +196,82 @@ rm -rf ${RPM_BUILD_ROOT} %{_libdir}/libelf.a %changelog +* Mon Aug 25 2014 Mark Wielaard 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 0.159-1 +- stack: New option -d, --debugname to lookup DWARF debuginfo name + for frame. New option -i, --inlines to show inlined frames + using DWARF debuginfo. +- libdwelf: New libdwelf.h header for libdw.so DWARF ELF Low-level + Functions. New function dwelf_elf_gnu_debuglink, + dwelf_dwarf_gnu_debugaltlink, and dwelf_elf_gnu_build_id. +- libdw: Support for DWZ multifile forms DW_FORM_GNU_ref_alt and + DW_FORM_GNU_strp_alt is now enabled by default and no longer + experimental. Added new functions dwarf_getalt and dwarf_setalt + to get or set the alternative debug file used for the alt FORMs. + The dwfl_linux_proc_find_elf callback will now find ELF from + process memory for (deleted) files if the Dwfl has process state + attached. +- libdwfl: The dwfl_build_id_find_debuginfo and + dwfl_standard_find_debuginfo functions will now try to + resolve and set the alternative debug file. +- backends: Add CFI unwinding for arm. Relies on .debug_frame. + Add arm process initial register state compatible mode to AARCH64. + Add aarch64 native and core unwind support. +- other: All separate elfutils-robustify patches have been merged. + CVE-2014-0172 Check overflow before calling malloc to uncompress + data. + +* Fri Jan 3 2014 Mark Wielaard 0.158-1 +- libdwfl: dwfl_core_file_report has new parameter executable. + New functions dwfl_module_getsymtab_first_global, + dwfl_module_getsym_info and dwfl_module_addrinfo. + Added unwinder with type Dwfl_Thread_Callbacks, opaque types + Dwfl_Thread and Dwfl_Frame and functions dwfl_attach_state, + dwfl_pid, dwfl_thread_dwfl, dwfl_thread_tid, dwfl_frame_thread, + dwfl_thread_state_registers, dwfl_thread_state_register_pc, + dwfl_getthread_frames, dwfl_getthreads, dwfl_thread_getframes + and dwfl_frame_pc. +- addr2line: New option -x to show the section an address was found in. +- stack: New utility that uses the new unwinder for processes and cores. +- backends: Unwinder support for i386, x86_64, s390, s390x, ppc and ppc64. + aarch64 support. + +* Mon Sep 30 2013 Mark Wielaard 0.157-1 +- libdw: Add new functions dwarf_getlocations, dwarf_getlocation_attr + and dwarf_getlocation_die. +- readelf: Show contents of NT_SIGINFO and NT_FILE core notes. +- addr2line: Support -i, --inlines output option. +- backends: abi_cfi hook for arm, ppc and s390. + +* Thu Jul 25 2013 Jan Kratochvil 0.156-1 +- lib: New macro COMPAT_VERSION_NEWPROTO. +- libdw: Handle GNU extension opcodes in dwarf_getlocation. +- libdwfl: Fix STB_GLOBAL over STB_WEAK preference in + dwfl_module_addrsym. Add minisymtab support. Add + parameter add_p_vaddr to dwfl_report_elf. Use DT_DEBUG + library search first. +- libebl: Handle new core note types in EBL. +- backends: Interpret NT_ARM_VFP. Implement core file + registers parsing for s390/s390x. +- readelf: Add --elf-section input option to inspect an embedded ELF + file. Add -U, --unresolved-address-offsets output control. + Add --debug-dump=decodedline support. Accept version + 8 .gdb_index section format. Adjust output formatting width. + When highpc is in constant form print it also as address. + Display raw .debug_aranges. Use libdw only for decodedaranges. +- elflint: Add __bss_start__ to the list of allowed symbols. +- tests: Add configure --enable-valgrind option to run all tests + under valgrind. Enable automake parallel-tests for make check. +- translations: Updated Polish translation. +- Updates for Automake 1.13. + * Fri Aug 24 2012 Mark Wielaard 0.155-1 - libelf: elf*_xlatetomd now works for cross-endian ELF note data. elf_getshdr now works consistently on non-mmaped ELF files after diff --git a/lib/ChangeLog b/lib/ChangeLog index 47e831e..4415213 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,33 @@ +2014-01-17 Lei Zhang + + * crc32_file.c: Include config.h. + +2013-12-12 Josh Stone + + * dynamicsizehash.c (lookup): Add a shortcut around division. + +2013-04-30 Jan Kratochvil + + * eu-config.h (COMPAT_VERSION_NEWPROTO): New. Twice. + +2013-04-26 Jan Kratochvil + + * system.h (LE64, BE64): Move here the definitions from + libdwfl/link_map.c. + +2013-04-24 Mark Wielaard + + * Makefile.am: Use AM_CPPFLAGS instead of INCLUDES. + +2012-10-09 Adam Markey + + * system.h: Changed pwrite_retry, write_retry, and pread_retry to + handle case where not all data was read/written. + +2012-10-08 Jan Kratochvil + + * system.h (eu_static_assert): New macro. + 2012-01-21 Ulrich Drepper * Makefile.am (libeu_a_SOURCES): Add color.c. diff --git a/lib/Makefile.am b/lib/Makefile.am index 740dd0f..97f295e 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -29,7 +29,7 @@ ## include $(top_srcdir)/config/eu.am AM_CFLAGS += -fpic -INCLUDES += -I$(srcdir)/../libelf +AM_CPPFLAGS += -I$(srcdir)/../libelf noinst_LIBRARIES = libeu.a diff --git a/lib/Makefile.in b/lib/Makefile.in index 34eb05e..7e21563 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,6 +16,51 @@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -35,12 +79,13 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog -@MUDFLAP_TRUE@am__append_1 = -fmudflap +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(noinst_HEADERS) ChangeLog subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -50,8 +95,11 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = libeu_a_AR = $(AR) $(ARFLAGS) libeu_a_LIBADD = am_libeu_a_OBJECTS = xstrdup.$(OBJEXT) xstrndup.$(OBJEXT) \ @@ -59,29 +107,75 @@ am_libeu_a_OBJECTS = xstrdup.$(OBJEXT) xstrndup.$(OBJEXT) \ crc32_file.$(OBJEXT) md5.$(OBJEXT) sha1.$(OBJEXT) \ color.$(OBJEXT) libeu_a_OBJECTS = $(am_libeu_a_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = SOURCES = $(libeu_a_SOURCES) DIST_SOURCES = $(libeu_a_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -90,10 +184,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -114,6 +211,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -124,6 +222,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -138,6 +237,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -187,20 +287,14 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(srcdir)/../libelf -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 $(if \ $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) -fpic -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) - + $($(*F)_no_Wunused),,-Wunused -Wextra) $($(*F)_CFLAGS) -fpic +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi noinst_LIBRARIES = libeu.a libeu_a_SOURCES = xstrdup.c xstrndup.c xmalloc.c next_prime.c \ crc32.c crc32_file.c md5.c sha1.c \ @@ -249,10 +343,11 @@ $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + libeu.a: $(libeu_a_OBJECTS) $(libeu_a_DEPENDENCIES) $(EXTRA_libeu_a_DEPENDENCIES) - -rm -f libeu.a - $(libeu_a_AR) libeu.a $(libeu_a_OBJECTS) $(libeu_a_LIBADD) - $(RANLIB) libeu.a + $(AM_V_at)-rm -f libeu.a + $(AM_V_AR)$(libeu_a_AR) libeu.a $(libeu_a_OBJECTS) $(libeu_a_LIBADD) + $(AM_V_at)$(RANLIB) libeu.a mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -271,39 +366,28 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrndup.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -315,15 +399,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -332,6 +412,21 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -472,17 +567,17 @@ uninstall-am: .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am diff --git a/lib/crc32_file.c b/lib/crc32_file.c index 9a168f6..c0b18e9 100644 --- a/lib/crc32_file.c +++ b/lib/crc32_file.c @@ -26,6 +26,10 @@ the GNU Lesser General Public License along with this program. If not, see . */ +#ifdef HAVE_CONFIG_H +# include +#endif + #include "system.h" #include #include diff --git a/lib/dynamicsizehash.c b/lib/dynamicsizehash.c index 40f48d5..1fdff1b 100644 --- a/lib/dynamicsizehash.c +++ b/lib/dynamicsizehash.c @@ -49,8 +49,9 @@ lookup (htab, hval, val) HASHTYPE hval; TYPE val __attribute__ ((unused)); { - /* First hash function: simply take the modul but prevent zero. */ - size_t idx = 1 + hval % htab->size; + /* First hash function: simply take the modul but prevent zero. Small values + can skip the division, which helps performance when this is common. */ + size_t idx = 1 + (hval < htab->size ? hval : hval % htab->size); if (htab->table[idx].hashval != 0) { diff --git a/lib/eu-config.h b/lib/eu-config.h index 68efb82..3afff26 100644 --- a/lib/eu-config.h +++ b/lib/eu-config.h @@ -170,12 +170,18 @@ asm (".section predict_data, \"aw\"; .previous\n" ".symver _compat." #version "." #name "," #name "@" #version); # define NEW_VERSION(name, version) \ asm (".symver " #name "," #name "@@@" #version); +# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ + asm (".symver _compat." #version "." #name "," #name "@" #version); \ + __typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \ + asm ("_compat." #version "." #name); # define COMPAT_VERSION(name, version, prefix) \ asm (".symver _compat." #version "." #name "," #name "@" #version); \ __typeof (name) _compat_##prefix##_##name asm ("_compat." #version "." #name); #else # define OLD_VERSION(name, version) /* Nothing for static linking. */ # define NEW_VERSION(name, version) /* Nothing for static linking. */ +# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ + error "should use #ifdef SHARED" # define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SHARED" #endif diff --git a/lib/system.h b/lib/system.h index 9ac01f8..f31cfd0 100644 --- a/lib/system.h +++ b/lib/system.h @@ -34,13 +34,18 @@ #include #include #include +#include #if __BYTE_ORDER == __LITTLE_ENDIAN # define LE32(n) (n) +# define LE64(n) (n) # define BE32(n) bswap_32 (n) +# define BE64(n) bswap_64 (n) #elif __BYTE_ORDER == __BIG_ENDIAN # define BE32(n) (n) +# define BE64(n) (n) # define LE32(n) bswap_32 (n) +# define LE64(n) bswap_64 (n) #else # error "Unknown byte order" #endif @@ -64,12 +69,61 @@ extern int crc32_file (int fd, uint32_t *resp); #define gettext_noop(Str) Str -#define pwrite_retry(fd, buf, len, off) \ - TEMP_FAILURE_RETRY (pwrite (fd, buf, len, off)) -#define write_retry(fd, buf, n) \ - TEMP_FAILURE_RETRY (write (fd, buf, n)) -#define pread_retry(fd, buf, len, off) \ - TEMP_FAILURE_RETRY (pread (fd, buf, len, off)) +static inline ssize_t __attribute__ ((unused)) +pwrite_retry (int fd, const void *buf, size_t len, off_t off) +{ + ssize_t recvd = 0; + + do + { + ssize_t ret = TEMP_FAILURE_RETRY (pwrite (fd, buf + recvd, len - recvd, + off + recvd)); + if (ret <= 0) + return ret < 0 ? ret : recvd; + + recvd += ret; + } + while ((size_t) recvd < len); + + return recvd; +} + +static inline ssize_t __attribute__ ((unused)) +write_retry (int fd, const void *buf, size_t len) +{ + ssize_t recvd = 0; + + do + { + ssize_t ret = TEMP_FAILURE_RETRY (write (fd, buf + recvd, len - recvd)); + if (ret <= 0) + return ret < 0 ? ret : recvd; + + recvd += ret; + } + while ((size_t) recvd < len); + + return recvd; +} + +static inline ssize_t __attribute__ ((unused)) +pread_retry (int fd, void *buf, size_t len, off_t off) +{ + ssize_t recvd = 0; + + do + { + ssize_t ret = TEMP_FAILURE_RETRY (pread (fd, buf + recvd, len - recvd, + off + recvd)); + if (ret <= 0) + return ret < 0 ? ret : recvd; + + recvd += ret; + } + while ((size_t) recvd < len); + + return recvd; +} /* We need define two variables, argp_program_version_hook and @@ -121,4 +175,11 @@ extern char *color_weak; extern const char color_off[]; +/* A static assertion. This will cause a compile-time error if EXPR, + which must be a compile-time constant, is false. */ + +#define eu_static_assert(expr) \ + extern int never_defined_just_used_for_checking[(expr) ? 1 : -1] \ + __attribute__ ((unused)) + #endif /* system.h */ diff --git a/libasm/ChangeLog b/libasm/ChangeLog index f9a863d..2613610 100644 --- a/libasm/ChangeLog +++ b/libasm/ChangeLog @@ -1,3 +1,11 @@ +2014-04-13 Mark Wielaard + + * Makefile.am: Remove !MUDFLAP conditions. + +2013-04-24 Mark Wielaard + + * Makefile.am: Use AM_CPPFLAGS instead of INCLUDES. + 2011-02-08 Roland McGrath * asm_newscn.c (asm_newscn): Remove unused variable. diff --git a/libasm/Makefile.am b/libasm/Makefile.am index abe5468..3d6a2e5 100644 --- a/libasm/Makefile.am +++ b/libasm/Makefile.am @@ -28,16 +28,14 @@ ## not, see . ## include $(top_srcdir)/config/eu.am -INCLUDES += -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl -I$(top_srcdir)/libdw +AM_CPPFLAGS += -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl -I$(top_srcdir)/libdw GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include) VERSION = 1 lib_LIBRARIES = libasm.a -if !MUDFLAP noinst_LIBRARIES = libasm_pic.a noinst_PROGRAMS = $(noinst_LIBRARIES:_pic.a=.so) -endif pkginclude_HEADERS = libasm.h libasm_a_SOURCES = asm_begin.c asm_abort.c asm_end.c asm_error.c \ @@ -54,7 +52,6 @@ libasm_a_SOURCES = asm_begin.c asm_abort.c asm_end.c asm_error.c \ disasm_begin.c disasm_cb.c disasm_end.c disasm_str.c \ symbolhash.c -if !MUDFLAP libasm_pic_a_SOURCES = am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os) @@ -64,12 +61,12 @@ libasm_so_LDLIBS += -lpthread endif libasm_so_SOURCES = -libasm.so: libasm_pic.a libasm.map +libasm.so$(EXEEXT): libasm_pic.a libasm.map $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \ -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 + if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi ln -fs $@ $@.$(VERSION) install: install-am libasm.so @@ -83,7 +80,6 @@ uninstall: uninstall-am rm -f $(DESTDIR)$(libdir)/libasm.so.$(VERSION) rm -f $(DESTDIR)$(libdir)/libasm.so rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils -endif noinst_HEADERS = libasmP.h symbolhash.h EXTRA_DIST = libasm.map diff --git a/libasm/Makefile.in b/libasm/Makefile.in index b20ae8f..37dbd9c 100644 --- a/libasm/Makefile.in +++ b/libasm/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -18,6 +17,51 @@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -36,16 +80,15 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(noinst_HEADERS) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/config/eu.am ChangeLog -@MUDFLAP_TRUE@am__append_1 = -fmudflap -@MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1) -@MUDFLAP_TRUE@am_libasm_pic_a_OBJECTS = -@MUDFLAP_FALSE@@USE_LOCKS_TRUE@am__append_2 = -lpthread +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(noinst_HEADERS) $(pkginclude_HEADERS) ChangeLog +noinst_PROGRAMS = $(am__EXEEXT_1) +@USE_LOCKS_TRUE@am__append_1 = -lpthread subdir = libasm ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -83,8 +126,11 @@ am__uninstall_files_from_dir = { \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)" LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = libasm_a_AR = $(AR) $(ARFLAGS) libasm_a_LIBADD = am_libasm_a_OBJECTS = asm_begin.$(OBJEXT) asm_abort.$(OBJEXT) \ @@ -105,36 +151,82 @@ libasm_a_OBJECTS = $(am_libasm_a_OBJECTS) libasm_pic_a_AR = $(AR) $(ARFLAGS) libasm_pic_a_LIBADD = libasm_pic_a_OBJECTS = $(am_libasm_pic_a_OBJECTS) -@MUDFLAP_FALSE@am__EXEEXT_1 = libasm.so$(EXEEXT) +am__EXEEXT_1 = libasm.so$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_libasm_so_OBJECTS = libasm_so_OBJECTS = $(am_libasm_so_OBJECTS) libasm_so_LDADD = $(LDADD) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = SOURCES = $(libasm_a_SOURCES) $(libasm_pic_a_SOURCES) \ $(libasm_so_SOURCES) DIST_SOURCES = $(libasm_a_SOURCES) $(libasm_pic_a_SOURCES) \ $(libasm_so_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -143,10 +235,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -167,6 +262,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -177,6 +273,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -191,6 +288,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -240,25 +338,21 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl \ -I$(top_srcdir)/libdw -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ - $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ + $(if $($(*F)_no_Werror),,-Werror) \ + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ + $($(*F)_CFLAGS) +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda $(am_libasm_pic_a_OBJECTS) \ libasm.so.$(VERSION) -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include) lib_LIBRARIES = libasm.a -@MUDFLAP_FALSE@noinst_LIBRARIES = libasm_pic.a +noinst_LIBRARIES = libasm_pic.a pkginclude_HEADERS = libasm.h libasm_a_SOURCES = asm_begin.c asm_abort.c asm_end.c asm_error.c \ asm_getelf.c asm_newscn.c asm_newscn_ingrp.c \ @@ -274,10 +368,10 @@ libasm_a_SOURCES = asm_begin.c asm_abort.c asm_end.c asm_error.c \ disasm_begin.c disasm_cb.c disasm_end.c disasm_str.c \ symbolhash.c -@MUDFLAP_FALSE@libasm_pic_a_SOURCES = -@MUDFLAP_FALSE@am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os) -@MUDFLAP_FALSE@libasm_so_LDLIBS = $(am__append_2) -@MUDFLAP_FALSE@libasm_so_SOURCES = +libasm_pic_a_SOURCES = +am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os) +libasm_so_LDLIBS = $(am__append_1) +libasm_so_SOURCES = noinst_HEADERS = libasmP.h symbolhash.h EXTRA_DIST = libasm.map all: all-am @@ -317,7 +411,6 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): install-libLIBRARIES: $(lib_LIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ @@ -325,6 +418,8 @@ install-libLIBRARIES: $(lib_LIBRARIES) else :; fi; \ done; \ test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } @$(POST_INSTALL) @@ -348,20 +443,19 @@ clean-libLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + libasm.a: $(libasm_a_OBJECTS) $(libasm_a_DEPENDENCIES) $(EXTRA_libasm_a_DEPENDENCIES) - -rm -f libasm.a - $(libasm_a_AR) libasm.a $(libasm_a_OBJECTS) $(libasm_a_LIBADD) - $(RANLIB) libasm.a + $(AM_V_at)-rm -f libasm.a + $(AM_V_AR)$(libasm_a_AR) libasm.a $(libasm_a_OBJECTS) $(libasm_a_LIBADD) + $(AM_V_at)$(RANLIB) libasm.a + libasm_pic.a: $(libasm_pic_a_OBJECTS) $(libasm_pic_a_DEPENDENCIES) $(EXTRA_libasm_pic_a_DEPENDENCIES) - -rm -f libasm_pic.a - $(libasm_pic_a_AR) libasm_pic.a $(libasm_pic_a_OBJECTS) $(libasm_pic_a_LIBADD) - $(RANLIB) libasm_pic.a + $(AM_V_at)-rm -f libasm_pic.a + $(AM_V_AR)$(libasm_pic_a_AR) libasm_pic.a $(libasm_pic_a_OBJECTS) $(libasm_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libasm_pic.a clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) -@MUDFLAP_TRUE@libasm.so$(EXEEXT): $(libasm_so_OBJECTS) $(libasm_so_DEPENDENCIES) $(EXTRA_libasm_so_DEPENDENCIES) -@MUDFLAP_TRUE@ @rm -f libasm.so$(EXEEXT) -@MUDFLAP_TRUE@ $(LINK) $(libasm_so_OBJECTS) $(libasm_so_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -402,22 +496,25 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symbolhash.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -433,26 +530,15 @@ uninstall-pkgincludeHEADERS: files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -464,15 +550,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -481,6 +563,21 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -522,10 +619,8 @@ installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -@MUDFLAP_TRUE@install: install-am install-exec: install-exec-am install-data: install-data-am -@MUDFLAP_TRUE@uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am @@ -625,20 +720,20 @@ uninstall-am: uninstall-libLIBRARIES uninstall-pkgincludeHEADERS .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \ - ctags distclean distclean-compile distclean-generic \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLIBRARIES install-man install-pdf install-pdf-am \ - install-pkgincludeHEADERS install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-libLIBRARIES \ - uninstall-pkgincludeHEADERS + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLIBRARIES install-man install-pdf \ + install-pdf-am install-pkgincludeHEADERS install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-libLIBRARIES uninstall-pkgincludeHEADERS %.os: %.c %.o @@ -649,25 +744,25 @@ uninstall-am: uninstall-libLIBRARIES uninstall-pkgincludeHEADERS @AMDEP_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @AMDEP_TRUE@ fi @AMDEP_FALSE@ $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED $< -@MUDFLAP_FALSE@libasm.so: libasm_pic.a libasm.map -@MUDFLAP_FALSE@ $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \ -@MUDFLAP_FALSE@ -Wl,--version-script,$(srcdir)/libasm.map,--no-undefined \ -@MUDFLAP_FALSE@ -Wl,--soname,$@.$(VERSION) \ -@MUDFLAP_FALSE@ ../libebl/libebl.a ../libelf/libelf.so $(libasm_so_LDLIBS) -@MUDFLAP_FALSE@ if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi -@MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION) - -@MUDFLAP_FALSE@install: install-am libasm.so -@MUDFLAP_FALSE@ $(mkinstalldirs) $(DESTDIR)$(libdir) -@MUDFLAP_FALSE@ $(INSTALL_PROGRAM) libasm.so $(DESTDIR)$(libdir)/libasm-$(PACKAGE_VERSION).so -@MUDFLAP_FALSE@ ln -fs libasm-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libasm.so.$(VERSION) -@MUDFLAP_FALSE@ ln -fs libasm.so.$(VERSION) $(DESTDIR)$(libdir)/libasm.so - -@MUDFLAP_FALSE@uninstall: uninstall-am -@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libasm-$(PACKAGE_VERSION).so -@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libasm.so.$(VERSION) -@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libasm.so -@MUDFLAP_FALSE@ rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils +libasm.so$(EXEEXT): libasm_pic.a libasm.map + $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \ + -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 + ln -fs $@ $@.$(VERSION) + +install: install-am libasm.so + $(mkinstalldirs) $(DESTDIR)$(libdir) + $(INSTALL_PROGRAM) libasm.so $(DESTDIR)$(libdir)/libasm-$(PACKAGE_VERSION).so + ln -fs libasm-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libasm.so.$(VERSION) + ln -fs libasm.so.$(VERSION) $(DESTDIR)$(libdir)/libasm.so + +uninstall: uninstall-am + rm -f $(DESTDIR)$(libdir)/libasm-$(PACKAGE_VERSION).so + rm -f $(DESTDIR)$(libdir)/libasm.so.$(VERSION) + rm -f $(DESTDIR)$(libdir)/libasm.so + rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog index b1d79a9..a20f440 100644 --- a/libcpu/ChangeLog +++ b/libcpu/ChangeLog @@ -1,3 +1,16 @@ +2014-04-13 Mark Wielaard + + * Makefile.am (i386_gendis_LDADD): Remove libmudflap. + +2013-04-24 Mark Wielaard + + * Makefile.am: Use AM_CPPFLAGS instead of INCLUDES. + +2012-10-10 Roland McGrath + + * Makefile.am (%_defs, $(srcdir)/%_dis.h): Redirect to temp file, + mv into place with separate command. + 2012-06-26 Roland McGrath * Makefile.am [!MAINTAINER_MODE] ($(srcdir)/%_dis.h): New rule. diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am index 8f62be2..3beccf3 100644 --- a/libcpu/Makefile.am +++ b/libcpu/Makefile.am @@ -28,7 +28,7 @@ ## not, see . ## include $(top_srcdir)/config/eu.am -INCLUDES += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ +AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ -I$(srcdir)/../libdw -I$(srcdir)/../libasm AM_CFLAGS += -fpic -fdollars-in-identifiers LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) -P$( $@ + m4 -D$* -DDISASSEMBLER $< > $@T + mv -f $@T $@ if MAINTAINER_MODE noinst_HEADERS = memory-access.h i386_parse.h i386_data.h @@ -54,7 +55,8 @@ noinst_HEADERS = memory-access.h i386_parse.h i386_data.h noinst_PROGRAMS = i386_gendis $(srcdir)/%_dis.h: %_defs i386_gendis - ./i386_gendis $< > $@ + ./i386_gendis $< > $@T + mv -f $@T $@ else @@ -76,7 +78,7 @@ i386_lex_CFLAGS = -Wno-unused-label -Wno-unused-function -Wno-sign-compare i386_parse.o: i386_parse.c i386.mnemonics i386_parse_CFLAGS = -DNMNES="`wc -l < i386.mnemonics`" i386_lex.o: i386_parse.h -i386_gendis_LDADD = $(libeu) -lm $(libmudflap) +i386_gendis_LDADD = $(libeu) -lm i386_parse.h: i386_parse.c ; diff --git a/libcpu/Makefile.in b/libcpu/Makefile.in index 427fe97..1cd457b 100644 --- a/libcpu/Makefile.in +++ b/libcpu/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -18,6 +17,51 @@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -36,14 +80,15 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(am__noinst_HEADERS_DIST) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog \ - i386_lex.c i386_parse.c -@MUDFLAP_TRUE@am__append_1 = -fmudflap +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am i386_lex.c i386_parse.c \ + $(top_srcdir)/config/depcomp $(top_srcdir)/config/ylwrap \ + $(am__noinst_HEADERS_DIST) ChangeLog @MAINTAINER_MODE_TRUE@noinst_PROGRAMS = i386_gendis$(EXEEXT) subdir = libcpu ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -53,8 +98,11 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = libcpu_i386_a_AR = $(AR) $(ARFLAGS) libcpu_i386_a_LIBADD = am_libcpu_i386_a_OBJECTS = i386_disasm.$(OBJEXT) @@ -67,38 +115,93 @@ PROGRAMS = $(noinst_PROGRAMS) am_i386_gendis_OBJECTS = i386_gendis.$(OBJEXT) i386_lex.$(OBJEXT) \ i386_parse.$(OBJEXT) i386_gendis_OBJECTS = $(am_i386_gendis_OBJECTS) -am__DEPENDENCIES_1 = -i386_gendis_DEPENDENCIES = $(libeu) $(am__DEPENDENCIES_1) +i386_gendis_DEPENDENCIES = $(libeu) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = @MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ || +AM_V_LEX = $(am__v_LEX_@AM_V@) +am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) +am__v_LEX_0 = @echo " LEX " $@; +am__v_LEX_1 = YLWRAP = $(top_srcdir)/config/ylwrap @MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ || +am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ + -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) +AM_V_YACC = $(am__v_YACC_@AM_V@) +am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) +am__v_YACC_0 = @echo " YACC " $@; +am__v_YACC_1 = SOURCES = $(libcpu_i386_a_SOURCES) $(libcpu_x86_64_a_SOURCES) \ $(i386_gendis_SOURCES) DIST_SOURCES = $(libcpu_i386_a_SOURCES) $(libcpu_x86_64_a_SOURCES) \ $(i386_gendis_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac am__noinst_HEADERS_DIST = memory-access.h i386_parse.h i386_data.h HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -107,10 +210,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -131,6 +237,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -141,6 +248,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -155,6 +263,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -204,22 +313,17 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ -I$(srcdir)/../libdw -I$(srcdir)/../libasm -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 $(if \ $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) -fpic -fdollars-in-identifiers -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) - + $($(*F)_no_Wunused),,-Wunused -Wextra) $($(*F)_CFLAGS) -fpic \ + -fdollars-in-identifiers +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda $(foreach P,i386 x86_64,$P_defs \ $P.mnemonics) -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) -P$(> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -511,18 +618,18 @@ uninstall-am: .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES clean-noinstPROGRAMS ctags distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES clean-noinstPROGRAMS cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am %.os: %.c %.o @@ -538,10 +645,12 @@ i386_disasm.o: i386.mnemonics $(srcdir)/i386_dis.h x86_64_disasm.o: x86_64.mnemonics $(srcdir)/x86_64_dis.h %_defs: $(srcdir)/defs/i386 - m4 -D$* -DDISASSEMBLER $< > $@ + m4 -D$* -DDISASSEMBLER $< > $@T + mv -f $@T $@ @MAINTAINER_MODE_TRUE@$(srcdir)/%_dis.h: %_defs i386_gendis -@MAINTAINER_MODE_TRUE@ ./i386_gendis $< > $@ +@MAINTAINER_MODE_TRUE@ ./i386_gendis $< > $@T +@MAINTAINER_MODE_TRUE@ mv -f $@T $@ @MAINTAINER_MODE_FALSE@$(srcdir)/%_dis.h: @MAINTAINER_MODE_FALSE@ @echo '*** missing $@; configure with --enable-maintainer-mode' diff --git a/libcpu/i386_lex.c b/libcpu/i386_lex.c index 5700712..d1a730d 100644 --- a/libcpu/i386_lex.c +++ b/libcpu/i386_lex.c @@ -27,7 +27,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 35 +#define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -72,7 +72,6 @@ typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN @@ -103,6 +102,8 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#endif /* ! C99 */ + #endif /* ! FLEXINT_H */ #ifdef __cplusplus @@ -171,7 +172,12 @@ typedef unsigned int flex_uint32_t; typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif -extern int i386_leng; +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t i386_leng; extern FILE *i386_in, *i386_out; @@ -210,11 +216,6 @@ extern FILE *i386_in, *i386_out; #define unput(c) yyunput( c, (yytext_ptr) ) -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state @@ -232,7 +233,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -302,8 +303,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* yy_hold_char holds the character lost when i386_text is formed. */ static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int i386_leng; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t i386_leng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; @@ -331,7 +332,7 @@ static void i386__init_buffer (YY_BUFFER_STATE b,FILE *file ); YY_BUFFER_STATE i386__scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE i386__scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE i386__scan_bytes (yyconst char *bytes,int len ); +YY_BUFFER_STATE i386__scan_bytes (yyconst char *bytes,yy_size_t len ); void *i386_alloc (yy_size_t ); void *i386_realloc (void *,yy_size_t ); @@ -363,7 +364,7 @@ void i386_free (void * ); /* Begin user sect3 */ -#define i386_wrap(n) 1 +#define i386_wrap() 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; @@ -580,7 +581,7 @@ char *i386_text; static void eat_to_eol (void); static void invalid_char (int ch); -#line 584 "i386_lex.c" +#line 585 "i386_lex.c" #define INITIAL 0 #define MAIN 1 @@ -620,7 +621,7 @@ FILE *i386_get_out (void ); void i386_set_out (FILE * out_str ); -int i386_get_leng (void ); +yy_size_t i386_get_leng (void ); char *i386_get_text (void ); @@ -681,7 +682,7 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - unsigned n; \ + size_t n; \ for ( n = 0; n < max_size && \ (c = getc( i386_in )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -769,7 +770,7 @@ YY_DECL #line 57 "i386_lex.l" -#line 773 "i386_lex.c" +#line 774 "i386_lex.c" if ( !(yy_init) ) { @@ -840,7 +841,7 @@ yy_find_action: if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) { - int yyl; + yy_size_t yyl; for ( yyl = 0; yyl < i386_leng; ++yyl ) if ( i386_text[yyl] == '\n' ) @@ -973,7 +974,7 @@ YY_RULE_SETUP #line 104 "i386_lex.l" ECHO; YY_BREAK -#line 977 "i386_lex.c" +#line 978 "i386_lex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(MAIN): yyterminate(); @@ -1161,21 +1162,21 @@ static int yy_get_next_buffer (void) else { - int num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -1206,7 +1207,7 @@ static int yy_get_next_buffer (void) /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); + (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } @@ -1302,7 +1303,7 @@ static int yy_get_next_buffer (void) yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 61); - return yy_is_jam ? 0 : yy_current_state; + return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) @@ -1317,7 +1318,7 @@ static int yy_get_next_buffer (void) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ - register int number_to_move = (yy_n_chars) + 2; + register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = @@ -1370,7 +1371,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -1648,7 +1649,7 @@ void i386_pop_buffer_state (void) */ static void i386_ensure_buffer_stack (void) { - int num_to_alloc; + yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { @@ -1740,17 +1741,17 @@ YY_BUFFER_STATE i386__scan_string (yyconst char * yystr ) /** Setup the input buffer state to scan the given bytes. The next call to i386_lex() will * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE i386__scan_bytes (yyconst char * yybytes, int _yybytes_len ) +YY_BUFFER_STATE i386__scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; - int i; + yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; @@ -1832,7 +1833,7 @@ FILE *i386_get_out (void) /** Get the length of the current token. * */ -int i386_get_leng (void) +yy_size_t i386_get_leng (void) { return i386_leng; } diff --git a/libcpu/i386_parse.c b/libcpu/i386_parse.c index ad065c6..d6bcf8d 100644 --- a/libcpu/i386_parse.c +++ b/libcpu/i386_parse.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.7. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.5" +#define YYBISON_VERSION "2.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -58,8 +58,6 @@ /* Pull parsers. */ #define YYPULL 1 -/* Using locations. */ -#define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse i386_parse @@ -70,10 +68,8 @@ #define yydebug i386_debug #define yynerrs i386_nerrs - /* Copy the first part of user declarations. */ - -/* Line 268 of yacc.c */ +/* Line 371 of yacc.c */ #line 1 "i386_parse.y" /* Parser for i386 CPU description. @@ -290,14 +286,16 @@ extern FILE *outfile; static size_t best_mnemonic_bits; #endif +/* Line 371 of yacc.c */ +#line 291 "i386_parse.c" -/* Line 268 of yacc.c */ -#line 296 "i386_parse.c" - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE @@ -307,11 +305,17 @@ static size_t best_mnemonic_bits; # define YYERROR_VERBOSE 0 #endif -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 +/* In a future release of Bison, this section will be replaced + by #include "y.tab.h". */ +#ifndef YY_I386_I_PARSE_H_INCLUDED +# define YY_I386_I_PARSE_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int i386_debug; #endif - /* Tokens. */ #ifndef YYTOKENTYPE @@ -345,12 +349,10 @@ static size_t best_mnemonic_bits; - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 293 of yacc.c */ +/* Line 387 of yacc.c */ #line 217 "i386_parse.y" unsigned long int num; @@ -362,21 +364,36 @@ typedef union YYSTYPE struct argument *arg; - -/* Line 293 of yacc.c */ -#line 368 "i386_parse.c" +/* Line 387 of yacc.c */ +#line 369 "i386_parse.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif +extern YYSTYPE i386_lval; -/* Copy the second part of user declarations. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int i386_parse (void *YYPARSE_PARAM); +#else +int i386_parse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int i386_parse (void); +#else +int i386_parse (); +#endif +#endif /* ! YYPARSE_PARAM */ + +#endif /* !YY_I386_I_PARSE_H_INCLUDED */ +/* Copy the second part of user declarations. */ -/* Line 343 of yacc.c */ -#line 380 "i386_parse.c" +/* Line 390 of yacc.c */ +#line 397 "i386_parse.c" #ifdef short # undef short @@ -429,24 +446,24 @@ typedef short int yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ -# define YY_(msgid) msgid +# define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) +# define YYUSE(E) ((void) (E)) #else -# define YYUSE(e) /* empty */ +# define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint -# define YYID(n) (n) +# define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) @@ -482,6 +499,7 @@ YYID (yyi) # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif @@ -573,20 +591,20 @@ union yyalloc #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from FROM to TO. The source and destination do +/* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ while (YYID (0)) # endif # endif @@ -680,7 +698,7 @@ static const yytype_uint16 yyrline[] = }; #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -689,7 +707,7 @@ static const char *const yytname[] = "kSYNONYM", "kID", "kNUMBER", "kPERCPERC", "kBITFIELD", "kCHAR", "kSPACE", "'\\n'", "':'", "','", "'0'", "'1'", "$accept", "spec", "masks", "mask", "instrs", "instr", "bitfieldopt", "bytes", "byte", - "bit", "optargs", "args", "arg", "argcomp", 0 + "bit", "optargs", "args", "arg", "argcomp", YY_NULL }; #endif @@ -771,10 +789,10 @@ static const yytype_uint8 yytable[] = 27, 48, 37, 34, 36, 0, 46, 18 }; -#define yypact_value_is_default(yystate) \ - ((yystate) == (-35)) +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-35))) -#define yytable_value_is_error(yytable_value) \ +#define yytable_value_is_error(Yytable_value) \ YYID (0) static const yytype_int8 yycheck[] = @@ -823,62 +841,35 @@ static const yytype_uint8 yystos[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (1); \ - goto yybackup; \ - } \ - else \ - { \ +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) - +/* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (YYID (0)) -#endif - - /* This macro is provided for backward compatibility. */ - #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ - #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else @@ -928,6 +919,8 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) YYSTYPE const * const yyvaluep; #endif { + FILE *yyo = yyoutput; + YYUSE (yyo); if (!yyvaluep) return; # ifdef YYPRINT @@ -939,7 +932,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) switch (yytype) { default: - break; + break; } } @@ -1179,12 +1172,11 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = 0; + const char *yyformat = YY_NULL; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -1244,11 +1236,13 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, break; } yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } } } } @@ -1268,10 +1262,12 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, # undef YYCASE_ } - yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } if (*yymsg_alloc < yysize) { @@ -1331,32 +1327,27 @@ yydestruct (yymsg, yytype, yyvaluep) { default: - break; + break; } } -/* Prevent warnings from -Wmissing-prototypes. */ -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ /* The lookahead symbol. */ int yychar; + +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; +YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); /* Number of syntax errors so far. */ int yynerrs; @@ -1396,7 +1387,7 @@ yyparse () `yyss': related to states. `yyvs': related to semantic values. - Refer to the stacks thru separate pointers, to allow yyoverflow + Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ @@ -1414,7 +1405,7 @@ yyparse () int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken; + int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -1432,9 +1423,8 @@ yyparse () Keep to zero when no symbol should be popped. */ int yylen = 0; - yytoken = 0; - yyss = yyssa; - yyvs = yyvsa; + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -1443,14 +1433,6 @@ yyparse () yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - yyssp = yyss; - yyvsp = yyvs; - goto yysetstate; /*------------------------------------------------------------. @@ -1591,7 +1573,9 @@ yybackup: yychar = YYEMPTY; yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -1628,8 +1612,7 @@ yyreduce: switch (yyn) { case 2: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 248 "i386_parse.y" { if (error_message_count != 0) @@ -1641,29 +1624,25 @@ yyreduce: break; case 5: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 262 "i386_parse.y" { new_bitfield ((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].num)); } break; case 6: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 264 "i386_parse.y" { new_bitfield ((yyvsp[(2) - (2)].str), -1); } break; case 7: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 266 "i386_parse.y" { new_bitfield ((yyvsp[(2) - (2)].str), -2); } break; case 8: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 268 "i386_parse.y" { struct synonym *newp = xmalloc (sizeof (*newp)); @@ -1679,8 +1658,7 @@ yyreduce: break; case 12: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 287 "i386_parse.y" { if ((yyvsp[(3) - (6)].field) != NULL && strcmp ((yyvsp[(3) - (6)].field)->name, "RE") != 0 @@ -1767,8 +1745,7 @@ yyreduce: break; case 14: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 373 "i386_parse.y" { struct known_bitfield search; @@ -1787,15 +1764,13 @@ yyreduce: break; case 15: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 388 "i386_parse.y" { (yyval.field) = NULL; } break; case 16: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 392 "i386_parse.y" { check_bits ((yyvsp[(3) - (3)].bit)); @@ -1809,8 +1784,7 @@ yyreduce: break; case 17: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 402 "i386_parse.y" { check_bits ((yyvsp[(1) - (1)].bit)); @@ -1819,8 +1793,7 @@ yyreduce: break; case 18: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 409 "i386_parse.y" { struct bitvalue *runp = (yyvsp[(1) - (2)].bit); @@ -1832,15 +1805,13 @@ yyreduce: break; case 19: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 417 "i386_parse.y" { (yyval.bit) = (yyvsp[(1) - (1)].bit); } break; case 20: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 421 "i386_parse.y" { (yyval.bit) = xmalloc (sizeof (struct bitvalue)); @@ -1851,8 +1822,7 @@ yyreduce: break; case 21: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 428 "i386_parse.y" { (yyval.bit) = xmalloc (sizeof (struct bitvalue)); @@ -1863,8 +1833,7 @@ yyreduce: break; case 22: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 435 "i386_parse.y" { (yyval.bit) = xmalloc (sizeof (struct bitvalue)); @@ -1888,22 +1857,19 @@ yyreduce: break; case 23: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 457 "i386_parse.y" { (yyval.arg) = (yyvsp[(2) - (2)].arg); } break; case 24: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 459 "i386_parse.y" { (yyval.arg) = NULL; } break; case 25: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 463 "i386_parse.y" { struct argument *runp = (yyvsp[(1) - (3)].arg); @@ -1917,8 +1883,7 @@ yyreduce: break; case 26: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 473 "i386_parse.y" { (yyval.arg) = xmalloc (sizeof (struct argument)); @@ -1928,8 +1893,7 @@ yyreduce: break; case 27: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 481 "i386_parse.y" { struct argname *runp = (yyvsp[(1) - (2)].name); @@ -1941,15 +1905,13 @@ yyreduce: break; case 28: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 489 "i386_parse.y" { (yyval.name) = (yyvsp[(1) - (1)].name); } break; case 29: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 492 "i386_parse.y" { (yyval.name) = xmalloc (sizeof (struct argname)); @@ -1985,8 +1947,7 @@ yyreduce: break; case 30: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 524 "i386_parse.y" { (yyval.name) = xmalloc (sizeof (struct argname)); @@ -1999,8 +1960,7 @@ yyreduce: break; case 31: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 533 "i386_parse.y" { (yyval.name) = xmalloc (sizeof (struct argname)); @@ -2011,8 +1971,7 @@ yyreduce: break; case 32: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 540 "i386_parse.y" { (yyval.name) = xmalloc (sizeof (struct argname)); @@ -2025,9 +1984,8 @@ yyreduce: break; - -/* Line 1806 of yacc.c */ -#line 2031 "i386_parse.c" +/* Line 1792 of yacc.c */ +#line 1989 "i386_parse.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2190,7 +2148,9 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -2214,7 +2174,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#if !defined(yyoverflow) || YYERROR_VERBOSE +#if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -2256,8 +2216,7 @@ yyreturn: } - -/* Line 2067 of yacc.c */ +/* Line 2055 of yacc.c */ #line 550 "i386_parse.y" @@ -3397,4 +3356,3 @@ create_mnemonic_table (void) } } #endif - diff --git a/libcpu/i386_parse.h b/libcpu/i386_parse.h index 9f7a3d2..9689c32 100644 --- a/libcpu/i386_parse.h +++ b/libcpu/i386_parse.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.7. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,6 +30,15 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ +#ifndef YY_I386_I_PARSE_H_INCLUDED +# define YY_I386_I_PARSE_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int i386_debug; +#endif /* Tokens. */ #ifndef YYTOKENTYPE @@ -63,12 +72,10 @@ - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 2068 of yacc.c */ +/* Line 2058 of yacc.c */ #line 217 "i386_parse.y" unsigned long int num; @@ -80,9 +87,8 @@ typedef union YYSTYPE struct argument *arg; - -/* Line 2068 of yacc.c */ -#line 86 "i386_parse.h" +/* Line 2058 of yacc.c */ +#line 92 "i386_parse.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -91,4 +97,18 @@ typedef union YYSTYPE extern YYSTYPE i386_lval; +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int i386_parse (void *YYPARSE_PARAM); +#else +int i386_parse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int i386_parse (void); +#else +int i386_parse (); +#endif +#endif /* ! YYPARSE_PARAM */ +#endif /* !YY_I386_I_PARSE_H_INCLUDED */ diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 416a16f..5f9b097 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,360 @@ +2014-08-15 Mark Wielaard + + * 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 + + * 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 + + * dwarf.h: Remove DW_TAG_mutable_type. + +2014-05-02 Mark Wielaard + + * libdwP.h (__check_build_id): Removed now unused. + +2014-05-01 Mark Wielaard + + * libdwP.h (struct Dwarf): Remove free_alt. + * dwarf_end.c (dwarf_end): Don't check free_alt, don't end alt_dwarf. + * dwarf_setalt.c (dwarf_setalt): Don't check or set free_alt. + +2014-04-30 Mark Wielaard + + * libdw.map (ELFUTILS_0.159): Add dwelf_elf_gnu_build_id. + +2014-04-15 Florian Weimer + + * dwarf_begin_elf.c (__check_build_id, try_debugaltlink) + (open_debugaltlink): Move to libdwfl. + (check_section): Do not locate alternate debuginfo. + +2014-04-24 Florian Weimer + + * libdw.map (ELFUTILS_0.159): Export dwelf_dwarf_gnu_debugaltlink. + +2014-04-22 Florian Weimer + + * dwarf_getalt.c, dwarf_setalt.c: New files. + * Makefile.am (libdw_a_SOURCES): Add them. + * libdw.h (dwarf_getalt, dwarf_setalt): Add function declarations. + * libdwP.h (dwarf_getalt, dwarf_setalt): Add internal function + declarations. + * libdw.map (ELFUTILS_0.159): Export the two new functions. + +2014-04-15 Florian Weimer + + * libdwP.h (enum IDX_gnu_debugaltlink): New. + * dwarf_begin_elf.c (dwarf_scnnames): Increase string size and add + .gnu_debugaltlink. + (check_section): Obtain .gnu_debugaltlink section from the + setiondata array. + +2014-04-11 Mark Wielaard + + * libdw.map (ELFUTILS_0.159): New. Add dwelf_elf_gnu_debuglink. + * Makefile.am (libdw.so): Depend on libdwelf_pic.a. + (libdwelf_objects): New variable. + (libdw_a_LIBADD): Add libdwelf objects. + +2014-04-22 Mark Wielaard + + * memory-access.h (get_sleb128_step): Remove undefined behavior + of left shifting a signed value. Replace it with a multiplication. + +2014-04-13 Mark Wielaard + + * Makefile.am: Remove !MUDFLAP conditions. + +2014-04-09 Mark Wielaard + + * dwarf_begin_elf.c (check_section): Check for unsigned overflow + before calling malloc to uncompress data. + +2014-03-03 Jan Kratochvil + + Fix abort() on missing section headers. + * dwarf_begin_elf.c (check_section): Replace abort call by goto err. + New label err to return NULL. + +2014-02-05 Josh Stone + + * dwarf_decl_file.c (dwarf_decl_file): Read the idx as unsigned. + * dwarf_decl_line.c (__libdw_attr_intval): Read the line/column as + unsigned. Change the range assert to DWARF_E_INVALID_DWARF. + +2013-12-30 Mark Wielaard + + * libdw.map (ELFUTILS_0.158): Add dwfl_core_file_attach and + dwfl_linux_proc_attach. + +2013-12-20 Mark Wielaard + + * libdw.map (ELFUTILS_0.158): Add dwfl_getthread_frames. + +2013-12-18 Mark Wielaard + + * libdw.map (ELFUTILS_0.158): Remove dwfl_module_addrsym_elf and + dwfl_module_getsym_elf. Add dwfl_module_addrinfo and + dwfl_module_getsym_info. + +2013-12-16 Mark Wielaard + + * libdw.map (ELFUTILS_0.158): Add dwfl_module_getsymtab_first_global. + +2013-12-10 Josh Stone + + * memory-access.h (get_uleb128_rest_return): Removed. + (get_sleb128_rest_return): Removed. + (get_uleb128_step): Make this a self-contained block. + (get_sleb128_step): Ditto, and use a bitfield to extend signs. + (get_uleb128): Make this wholly implemented by __libdw_get_uleb128. + (get_sleb128): Make this wholly implemented by __libdw_get_sleb128. + (__libdw_get_uleb128): Simplify and inline for all callers. + (__libdw_get_sleb128): Ditto. + * dwarf_getlocation.c (store_implicit_value): Void the unused uleb128. + * memory-access.c: Delete file. + * Makefile.am (libdw_a_SOURCES): Remove it. + (DEFS): Remove the now unused -DIS_LIBDW. + +2013-12-09 Josh Stone + + * libdw_form.c (__libdw_form_val_compute_len): Renamed function from + __libdw_form_val_len, now handling only non-constant form lengths. + * libdwP.h (__libdw_form_val_len): New inlined function. + +2013-12-09 Mark Wielaard + + * dwarf_getlocation.c (__libdw_intern_expression): Handle empty + location expressions. + * dwarf_getlocation_attr.c (dwarf_getlocation_attr): When no + location found, return empty location expression. + * dwarf_getlocation_implicit_pointer.c + (dwarf_getlocation_implicit_pointer): Likewise. + (__libdw_empty_loc_attr): New internal function. + * libdwP.h (__libdw_empty_loc_attr): Define. + +2013-11-27 Mark Wielaard + + * libdw.map (ELFUTILS_0.158): Add dwfl_module_addrsym_elf and + dwfl_module_getsym_elf. + +2013-11-26 Mark Wielaard + + * libdw.map (ELFUTILS_0.156): Move dwfl_attach_state, dwfl_pid, + dwfl_thread_dwfl, dwfl_thread_tid, dwfl_frame_thread, + dwfl_thread_state_registers, dwfl_thread_state_register_pc, + dwfl_getthreads, dwfl_thread_getframes and dwfl_frame_pc to ... + (ELFUTILS_0.158): ... here. + +2013-11-09 Mark Wielaard + + * dwarf_getaranges.c (dwarf_getaranges): Read segment_size and + check that it is zero. + +2013-11-07 Jan Kratochvil + + * cfi.h (struct Dwarf_Frame_s): Make the comment more specific. + * libdw.map (ELFUTILS_0.156): Add dwfl_attach_state, dwfl_pid, + dwfl_thread_dwfl, dwfl_thread_tid, dwfl_frame_thread, + dwfl_thread_state_registers, dwfl_thread_state_register_pc, + dwfl_getthreads, dwfl_thread_getframes and dwfl_frame_pc. + +2013-11-01 Michael Forney + + * Makefile.am (libdwfl_objects): New definition. + (libdw_a_LIBADD): Use libdwfl_objects. + +2013-11-01 Michael Forney + + * Makefile.am: Use READELF. + +2013-10-30 Jan Kratochvil + + * libdw.map (ELFUTILS_0.158): New. + +2013-10-10 Mark Wielaard + + * dwarf_getfuncs.c (struct visitor_info): Rename start_offset to + start_addr and rename last_offset to last_addr. Now both void *. + (tree_visitor): Use start_add and die_addr instead of start_offset + and die_offset. + (dwarf_getfuncs): Use last_addr instead of last_offset. + +2013-10-06 Mark Wielaard + + * cfi.c (execute_cfi): Make sure DW_CFA_expression and + DW_CFA_val_expression are not used with abi_cfi. + +2013-10-03 Josh Stone + + * dwarf_formref_die.c (dwarf_formref_die): Don't hash the sig8 here. + * libdw_findcu.c (__libdw_intern_next_unit): Since this never revisits + a unit, make sure to always hash the sig8 here, so none are missed. + +2013-09-29 Mark Wielaard + + * dwarf_getlocation.c (store_implicit_value): Cast op->number2 to + uintptr_t before casting to char *. + (__libdw_intern_expression): Cast data to uintptr_t before casting + to Dwarf_Word. + * dwarf_getlocation_attr.c (dwarf_getlocation_attr): Cast + op->number2 to uintptr_t before casting to char *. + +2013-09-24 Josh Stone + + * libdw_visit_scopes.c (classify_die): Removed. + (may_have_scopes): New function to replace classify_die. There's no + need for full classification; just find tags that may contain scopes. + (__libdw_visit_scopes): Use a direct tag comparison for imported + units, and use may_have_scopes to test if recursion is needed. + +2013-09-20 Mark Wielaard + + * dwarf_getfuncs.c (visitor_info): New struct. + (tree_visitor): New function. + (dwarf_getfuncs): Use __libdw_visit_scopes with tree_visitor. + * libdw.h (dwarf_getfuncs): Expand function documentation. + +2013-09-12 Mark Wielaard + + * fde.c (intern_fde): Free fde and set libdw errno when start + or end could not be read. + +2013-08-24 Mark Wielaard + + * dwarf_getlocation.c (store_implicit_value): Don't take data + as argument, get block data from op number2. Return false when + block data length and op number don't match up. + (__libdw_intern_expression): Store start of block for + DW_OP_implicit_value and DW_OP_GNU_entry_value instead of + relative data offset. Also store block start (including length) + for DW_OP_GNU_const_type. Don't pass data to store_implicit_value. + * dwarf_getlocation_attr.c: New file. + * dwarf_getlocation_die.c: Likewise. + * libdw.h (dwarf_getlocation_die): New function definition. + (dwarf_getlocation_attr): Likewise. + * libdwP.h: Declare internal dwarf_getlocation_die. + * libdw.map (ELFUTILS_0.157): Add dwarf_getlocation_die and + dwarf_getlocation_attr. + * Makefile.am (libdw_a_SOURCES): Add dwarf_getlocation_die.c and + dwarf_getlocation_attr.c. + +2013-08-23 Mark Wielaard + + * dwarf_getlocation.c (attr_ok): Also accept DW_AT_segment. + (attr_base_address): New function. + (initial_offset_base): New function. + (getlocations_addr): New function. Taken from... + (dwarf_getlocation_addr): here. Use new initial_offset_base and + getlocations_addr. + (dwarf_getlocations): New function. + * libdw.h (dwarf_getlocations): New function definition. + * libdw.map (ELFUTILS_0.157): New. + +2013-07-02 Mark Wielaard + + * dwarf_getsrclines.c (dwarf_getsrclines): Add new stack allocation + limit MAX_STACK_ALLOC. After MAX_STACK_ALLOC lines use malloc in + NEW_LINE macro. Free malloced line records if any at the end. + +2013-07-02 Mark Wielaard + + * dwarf_getcfi_elf.c (getcfi_shdr): Check sh_type == SHT_PROGBITS. + +2013-06-26 Mark Wielaard + + * libdw_visit_scopes.c (__libdw_visit_scopes): Don't reject root + DIEs without children. Return an error whenever dwarf_child or + dwarf_siblingof return an error. Don't call recurse and increase + the depth for an imported unit. Walk the children of an imported + unit as if they are logical children of the parent root DIE. + +2013-05-03 Mark Wielaard + + * dwarf_getsrclines.c (dwarf_getsrclines): Only set end_sequence + when nlinelist > 0. + +2013-04-28 Jan Kratochvil + + * libdw.map (ELFUTILS_0.156): New. + +2013-04-24 Mark Wielaard + + * Makefile.am: Use AM_CPPFLAGS instead of INCLUDES. + +2013-04-10 Mark Wielaard + + * dwarf_formref_die.c (dwarf_formref_die): Reference size is only + equal to address size when we have a DW_FORM_ref_addr for DWARF + version 2. + +2013-03-25 Mark Wielaard + + * dwarf_getsrclines.c (dwarf_getsrclines): Mark highest address as + end_sequence. + +2013-03-12 Mark Wielaard + + * dwarf_getsrcfiles.c (dwarf_getsrcfiles): Allow DW_TAG_partial_unit. + * dwarf_getsrclines.c (dwarf_getsrclines): Likewise. + +2013-02-15 Mark Wielaard + + * dwarf_formstring.c (dwarf_formstring): Check dbg_ret->sectiondata, + not dbg->sectiondata. + +2013-01-07 Roland McGrath + + * memory-access.h + [ALLOW_UNALIGNED] (read_8ubyte_unaligned_noncvt): New macro. + [!ALLOW_UNALIGNED] (read_8ubyte_unaligned_noncvt): New inline function. + +2012-12-18 Mark Wielaard + + * dwarf_begin_elf.c (valid_p): Call Dwarf_Sig8_Hash_free if invalid. + (check_section): Likewise on error. + (scngrp_read): Likewise. + (dwarf_begin_elf): Likewise. + +2012-10-09 Petr Machata + + * dwarf_getlocation.c (__libdw_intern_expression): Handle + DW_OP_GNU_parameter_ref, DW_OP_GNU_convert, DW_OP_GNU_reinterpret, + DW_OP_GNU_regval_type, DW_OP_GNU_entry_value, + DW_OP_GNU_deref_type, DW_OP_GNU_const_type. + +2012-10-08 Jan Kratochvil + + * cfi.c: New include system.h. + (execute_cfi) (enough_registers): Clear new memory after realloc. + +2012-10-08 Jan Kratochvil + + * fde.c (__libdw_find_fde): Change to likely. Return + DWARF_E_NO_MATCH if .eh_frame_hdr points to FDE which is too short for + searched PC. + +2012-10-08 Jan Kratochvil + + * dwarf_getlocation.c (__libdw_intern_expression) : Make new + loclist element DW_OP_call_frame_cfa before decoding the opcodes. + Remove the later DW_OP_call_frame_cfa push to RESULT. + +2012-10-08 Jan Kratochvil + + Code cleanup. + * fde.c (binary_search_fde): Remove always true
= start> + conditional. Move L initialization upwards. + 2012-08-24 Mark Wielaard * dwarf_begin_elf.c (check_section): Only probe for dwz multi files diff --git a/libdw/Makefile.am b/libdw/Makefile.am index c6ac264..2e42a37 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 @@ -28,18 +28,15 @@ ## not, see . ## include $(top_srcdir)/config/eu.am -DEFS += -DIS_LIBDW if BUILD_STATIC AM_CFLAGS += -fpic endif -INCLUDES += -I$(srcdir)/../libelf +AM_CPPFLAGS += -I$(srcdir)/../libelf VERSION = 1 lib_LIBRARIES = libdw.a -if !MUDFLAP noinst_LIBRARIES = libdw_pic.a noinst_PROGRAMS = $(noinst_LIBRARIES:_pic.a=.so) -endif include_HEADERS = dwarf.h pkginclude_HEADERS = libdw.h @@ -79,7 +76,7 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.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 memory-access.c \ + libdw_findcu.c libdw_form.c libdw_alloc.c \ libdw_visit_scopes.c \ dwarf_entry_breakpoints.c \ dwarf_next_cfi.c \ @@ -87,7 +84,10 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \ dwarf_frame_info.c dwarf_frame_cfa.c dwarf_frame_register.c \ dwarf_cfi_addrframe.c \ dwarf_getcfi.c dwarf_getcfi_elf.c dwarf_cfi_end.c \ - dwarf_aggregate_size.c dwarf_getlocation_implicit_pointer.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_cu_getdwarf.c \ + dwarf_cu_die.c if MAINTAINER_MODE BUILT_SOURCES = $(srcdir)/known-dwarf.h @@ -97,12 +97,11 @@ $(srcdir)/known-dwarf.h: $(top_srcdir)/config/known-dwarf.awk $(srcdir)/dwarf.h mv -f $@.new $@ endif -if !MUDFLAP libdw_pic_a_SOURCES = am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os) libdw_so_SOURCES = -libdw.so: $(srcdir)/libdw.map libdw_pic.a \ +libdw.so$(EXEEXT): $(srcdir)/libdw.map libdw_pic.a ../libdwelf/libdwelf_pic.a \ ../libdwfl/libdwfl_pic.a ../libebl/libebl.a \ ../libelf/libelf.so # The rpath is necessary for libebl because its $ORIGIN use will @@ -112,7 +111,7 @@ libdw.so: $(srcdir)/libdw.map libdw_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 + if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi ln -fs $@ $@.$(VERSION) install: install-am libdw.so @@ -126,9 +125,12 @@ uninstall: uninstall-am rm -f $(DESTDIR)$(libdir)/libdw.so.$(VERSION) rm -f $(DESTDIR)$(libdir)/libdw.so rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils -endif -libdw_a_LIBADD = $(addprefix ../libdwfl/,$(shell $(AR) t ../libdwfl/libdwfl.a)) +libdwfl_objects = $(shell $(AR) t ../libdwfl/libdwfl.a) +libdw_a_LIBADD = $(addprefix ../libdwfl/,$(libdwfl_objects)) + +libdwelf_objects = $(shell $(AR) t ../libdwelf/libdwelf.a) +libdw_a_LIBADD += $(addprefix ../libdwelf/,$(libdwelf_objects)) noinst_HEADERS = libdwP.h memory-access.h dwarf_abbrev_hash.h \ dwarf_sig8_hash.h cfi.h encoded-value.h diff --git a/libdw/Makefile.in b/libdw/Makefile.in index 0a0da22..fdf02fb 100644 --- a/libdw/Makefile.in +++ b/libdw/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -18,6 +17,51 @@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -36,16 +80,16 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \ - $(pkginclude_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog -@MUDFLAP_TRUE@am__append_1 = -fmudflap -@BUILD_STATIC_TRUE@am__append_2 = -fpic -@MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1) -@MUDFLAP_TRUE@am_libdw_pic_a_OBJECTS = +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(include_HEADERS) $(noinst_HEADERS) $(pkginclude_HEADERS) \ + ChangeLog +@BUILD_STATIC_TRUE@am__append_1 = -fpic +noinst_PROGRAMS = $(am__EXEEXT_1) subdir = libdw ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -84,11 +128,14 @@ am__uninstall_files_from_dir = { \ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" \ "$(DESTDIR)$(pkgincludedir)" LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = libdw_a_AR = $(AR) $(ARFLAGS) -libdw_a_DEPENDENCIES = $(addprefix ../libdwfl/,$(shell $(AR) t \ - ../libdwfl/libdwfl.a)) +libdw_a_DEPENDENCIES = $(addprefix ../libdwfl/,$(libdwfl_objects)) \ + $(addprefix ../libdwelf/,$(libdwelf_objects)) am_libdw_a_OBJECTS = dwarf_begin.$(OBJEXT) dwarf_begin_elf.$(OBJEXT) \ dwarf_end.$(OBJEXT) dwarf_getelf.$(OBJEXT) \ dwarf_getpubnames.$(OBJEXT) dwarf_getabbrev.$(OBJEXT) \ @@ -136,62 +183,113 @@ am_libdw_a_OBJECTS = dwarf_begin.$(OBJEXT) dwarf_begin_elf.$(OBJEXT) \ dwarf_decl_column.$(OBJEXT) dwarf_func_inline.$(OBJEXT) \ dwarf_getsrc_file.$(OBJEXT) libdw_findcu.$(OBJEXT) \ libdw_form.$(OBJEXT) libdw_alloc.$(OBJEXT) \ - memory-access.$(OBJEXT) libdw_visit_scopes.$(OBJEXT) \ - dwarf_entry_breakpoints.$(OBJEXT) dwarf_next_cfi.$(OBJEXT) \ - cie.$(OBJEXT) fde.$(OBJEXT) cfi.$(OBJEXT) \ - frame-cache.$(OBJEXT) dwarf_frame_info.$(OBJEXT) \ + libdw_visit_scopes.$(OBJEXT) dwarf_entry_breakpoints.$(OBJEXT) \ + dwarf_next_cfi.$(OBJEXT) cie.$(OBJEXT) fde.$(OBJEXT) \ + cfi.$(OBJEXT) frame-cache.$(OBJEXT) dwarf_frame_info.$(OBJEXT) \ dwarf_frame_cfa.$(OBJEXT) dwarf_frame_register.$(OBJEXT) \ dwarf_cfi_addrframe.$(OBJEXT) dwarf_getcfi.$(OBJEXT) \ dwarf_getcfi_elf.$(OBJEXT) dwarf_cfi_end.$(OBJEXT) \ dwarf_aggregate_size.$(OBJEXT) \ - dwarf_getlocation_implicit_pointer.$(OBJEXT) + dwarf_getlocation_implicit_pointer.$(OBJEXT) \ + dwarf_getlocation_die.$(OBJEXT) \ + dwarf_getlocation_attr.$(OBJEXT) dwarf_getalt.$(OBJEXT) \ + dwarf_setalt.$(OBJEXT) dwarf_cu_getdwarf.$(OBJEXT) \ + dwarf_cu_die.$(OBJEXT) libdw_a_OBJECTS = $(am_libdw_a_OBJECTS) libdw_pic_a_AR = $(AR) $(ARFLAGS) libdw_pic_a_LIBADD = libdw_pic_a_OBJECTS = $(am_libdw_pic_a_OBJECTS) -@MUDFLAP_FALSE@am__EXEEXT_1 = libdw.so$(EXEEXT) +am__EXEEXT_1 = libdw.so$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_libdw_so_OBJECTS = libdw_so_OBJECTS = $(am_libdw_so_OBJECTS) libdw_so_LDADD = $(LDADD) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = SOURCES = $(libdw_a_SOURCES) $(libdw_pic_a_SOURCES) \ $(libdw_so_SOURCES) DIST_SOURCES = $(libdw_a_SOURCES) $(libdw_pic_a_SOURCES) \ $(libdw_so_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac HEADERS = $(include_HEADERS) $(noinst_HEADERS) $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ -DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' \ - -DIS_LIBDW +DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -212,6 +310,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -222,6 +321,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -236,6 +336,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -285,22 +386,17 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(srcdir)/../libelf -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 $(if \ $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) $(am__append_2) -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) - + $($(*F)_no_Wunused),,-Wunused -Wextra) $($(*F)_CFLAGS) \ + $(am__append_1) +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi lib_LIBRARIES = libdw.a -@MUDFLAP_FALSE@noinst_LIBRARIES = libdw_pic.a +noinst_LIBRARIES = libdw_pic.a include_HEADERS = dwarf.h pkginclude_HEADERS = libdw.h libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \ @@ -338,7 +434,7 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.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 memory-access.c \ + libdw_findcu.c libdw_form.c libdw_alloc.c \ libdw_visit_scopes.c \ dwarf_entry_breakpoints.c \ dwarf_next_cfi.c \ @@ -346,14 +442,20 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \ dwarf_frame_info.c dwarf_frame_cfa.c dwarf_frame_register.c \ dwarf_cfi_addrframe.c \ dwarf_getcfi.c dwarf_getcfi_elf.c dwarf_cfi_end.c \ - dwarf_aggregate_size.c dwarf_getlocation_implicit_pointer.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_cu_getdwarf.c \ + dwarf_cu_die.c @MAINTAINER_MODE_TRUE@BUILT_SOURCES = $(srcdir)/known-dwarf.h @MAINTAINER_MODE_TRUE@MAINTAINERCLEANFILES = $(srcdir)/known-dwarf.h -@MUDFLAP_FALSE@libdw_pic_a_SOURCES = -@MUDFLAP_FALSE@am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os) -@MUDFLAP_FALSE@libdw_so_SOURCES = -libdw_a_LIBADD = $(addprefix ../libdwfl/,$(shell $(AR) t ../libdwfl/libdwfl.a)) +libdw_pic_a_SOURCES = +am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os) +libdw_so_SOURCES = +libdwfl_objects = $(shell $(AR) t ../libdwfl/libdwfl.a) +libdw_a_LIBADD = $(addprefix ../libdwfl/,$(libdwfl_objects)) \ + $(addprefix ../libdwelf/,$(libdwelf_objects)) +libdwelf_objects = $(shell $(AR) t ../libdwelf/libdwelf.a) noinst_HEADERS = libdwP.h memory-access.h dwarf_abbrev_hash.h \ dwarf_sig8_hash.h cfi.h encoded-value.h @@ -397,7 +499,6 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): install-libLIBRARIES: $(lib_LIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ @@ -405,6 +506,8 @@ install-libLIBRARIES: $(lib_LIBRARIES) else :; fi; \ done; \ test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } @$(POST_INSTALL) @@ -428,20 +531,19 @@ clean-libLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + libdw.a: $(libdw_a_OBJECTS) $(libdw_a_DEPENDENCIES) $(EXTRA_libdw_a_DEPENDENCIES) - -rm -f libdw.a - $(libdw_a_AR) libdw.a $(libdw_a_OBJECTS) $(libdw_a_LIBADD) - $(RANLIB) libdw.a + $(AM_V_at)-rm -f libdw.a + $(AM_V_AR)$(libdw_a_AR) libdw.a $(libdw_a_OBJECTS) $(libdw_a_LIBADD) + $(AM_V_at)$(RANLIB) libdw.a + libdw_pic.a: $(libdw_pic_a_OBJECTS) $(libdw_pic_a_DEPENDENCIES) $(EXTRA_libdw_pic_a_DEPENDENCIES) - -rm -f libdw_pic.a - $(libdw_pic_a_AR) libdw_pic.a $(libdw_pic_a_OBJECTS) $(libdw_pic_a_LIBADD) - $(RANLIB) libdw_pic.a + $(AM_V_at)-rm -f libdw_pic.a + $(AM_V_AR)$(libdw_pic_a_AR) libdw_pic.a $(libdw_pic_a_OBJECTS) $(libdw_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libdw_pic.a clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) -@MUDFLAP_TRUE@libdw.so$(EXEEXT): $(libdw_so_OBJECTS) $(libdw_so_DEPENDENCIES) $(EXTRA_libdw_so_DEPENDENCIES) -@MUDFLAP_TRUE@ @rm -f libdw.so$(EXEEXT) -@MUDFLAP_TRUE@ $(LINK) $(libdw_so_OBJECTS) $(libdw_so_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -466,6 +568,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_cfi_addrframe.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_cfi_end.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_child.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_cu_die.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_cu_getdwarf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_cuoffset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_decl_column.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_decl_file.Po@am__quote@ @@ -494,6 +598,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getabbrevattr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getabbrevcode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getabbrevtag.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getalt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getarange_addr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getarangeinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getaranges.Po@am__quote@ @@ -504,6 +609,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getelf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getfuncs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getlocation.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getlocation_attr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getlocation_die.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getlocation_implicit_pointer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getmacros.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_getpubnames.Po@am__quote@ @@ -545,6 +652,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_onearange.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_onesrcline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_ranges.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_setalt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_siblingof.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_sig8_hash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf_srclang.Po@am__quote@ @@ -557,25 +665,27 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdw_findcu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdw_form.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdw_visit_scopes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory-access.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -592,8 +702,11 @@ uninstall-includeHEADERS: dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -609,26 +722,15 @@ uninstall-pkgincludeHEADERS: files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -640,15 +742,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -657,6 +755,21 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -699,11 +812,8 @@ installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -@MUDFLAP_TRUE@install: $(BUILT_SOURCES) -@MUDFLAP_TRUE@ $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am -@MUDFLAP_TRUE@uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am @@ -807,19 +917,20 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLIBRARIES \ .MAKE: all check install install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \ - ctags distclean distclean-compile distclean-generic \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-includeHEADERS install-info \ - install-info-am install-libLIBRARIES install-man install-pdf \ - install-pdf-am install-pkgincludeHEADERS install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ - ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLIBRARIES install-man install-pdf install-pdf-am \ + install-pkgincludeHEADERS install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ uninstall-libLIBRARIES uninstall-pkgincludeHEADERS @@ -834,30 +945,30 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLIBRARIES \ @MAINTAINER_MODE_TRUE@$(srcdir)/known-dwarf.h: $(top_srcdir)/config/known-dwarf.awk $(srcdir)/dwarf.h @MAINTAINER_MODE_TRUE@ gawk -f $^ > $@.new @MAINTAINER_MODE_TRUE@ mv -f $@.new $@ -@MUDFLAP_FALSE@libdw.so: $(srcdir)/libdw.map libdw_pic.a \ -@MUDFLAP_FALSE@ ../libdwfl/libdwfl_pic.a ../libebl/libebl.a \ -@MUDFLAP_FALSE@ ../libelf/libelf.so +libdw.so$(EXEEXT): $(srcdir)/libdw.map libdw_pic.a ../libdwelf/libdwelf_pic.a \ + ../libdwfl/libdwfl_pic.a ../libebl/libebl.a \ + ../libelf/libelf.so # The rpath is necessary for libebl because its $ORIGIN use will # not fly in a setuid executable that links in libdw. -@MUDFLAP_FALSE@ $(LINK) -shared -o $@ -Wl,--soname,$@.$(VERSION),-z,defs \ -@MUDFLAP_FALSE@ -Wl,--enable-new-dtags,-rpath,$(pkglibdir) \ -@MUDFLAP_FALSE@ -Wl,--version-script,$<,--no-undefined \ -@MUDFLAP_FALSE@ -Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\ -@MUDFLAP_FALSE@ -ldl $(zip_LIBS) -@MUDFLAP_FALSE@ if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi -@MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION) - -@MUDFLAP_FALSE@install: install-am libdw.so -@MUDFLAP_FALSE@ $(mkinstalldirs) $(DESTDIR)$(libdir) -@MUDFLAP_FALSE@ $(INSTALL_PROGRAM) libdw.so $(DESTDIR)$(libdir)/libdw-$(PACKAGE_VERSION).so -@MUDFLAP_FALSE@ ln -fs libdw-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libdw.so.$(VERSION) -@MUDFLAP_FALSE@ ln -fs libdw.so.$(VERSION) $(DESTDIR)$(libdir)/libdw.so - -@MUDFLAP_FALSE@uninstall: uninstall-am -@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libdw-$(PACKAGE_VERSION).so -@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libdw.so.$(VERSION) -@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libdw.so -@MUDFLAP_FALSE@ rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils + $(LINK) -shared -o $@ -Wl,--soname,$@.$(VERSION),-z,defs \ + -Wl,--enable-new-dtags,-rpath,$(pkglibdir) \ + -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 + ln -fs $@ $@.$(VERSION) + +install: install-am libdw.so + $(mkinstalldirs) $(DESTDIR)$(libdir) + $(INSTALL_PROGRAM) libdw.so $(DESTDIR)$(libdir)/libdw-$(PACKAGE_VERSION).so + ln -fs libdw-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libdw.so.$(VERSION) + ln -fs libdw.so.$(VERSION) $(DESTDIR)$(libdir)/libdw.so + +uninstall: uninstall-am + rm -f $(DESTDIR)$(libdir)/libdw-$(PACKAGE_VERSION).so + rm -f $(DESTDIR)$(libdir)/libdw.so.$(VERSION) + rm -f $(DESTDIR)$(libdir)/libdw.so + rmdir --ignore-fail-on-non-empty $(DESTDIR)$(includedir)/elfutils # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/libdw/cfi.c b/libdw/cfi.c index f59f17d..a146f12 100644 --- a/libdw/cfi.c +++ b/libdw/cfi.c @@ -35,6 +35,7 @@ #include "cfi.h" #include "memory-access.h" #include "encoded-value.h" +#include "system.h" #include #include #include @@ -89,6 +90,9 @@ execute_cfi (Dwarf_CFI *cache, } else { + eu_static_assert (reg_unspecified == 0); + memset (bigger->regs + bigger->nregs, 0, + (reg + 1 - bigger->nregs) * sizeof bigger->regs[0]); bigger->nregs = reg + 1; fs = bigger; } @@ -248,6 +252,8 @@ execute_cfi (Dwarf_CFI *cache, continue; case DW_CFA_expression: + /* Expression rule relies on section data, abi_cfi cannot use it. */ + assert (! abi_cfi); get_uleb128 (regno, program); offset = program - (const uint8_t *) cache->data->d.d_buf; /* DW_FORM_block is a ULEB128 length followed by that many bytes. */ @@ -258,6 +264,8 @@ execute_cfi (Dwarf_CFI *cache, continue; case DW_CFA_val_expression: + /* Expression rule relies on section data, abi_cfi cannot use it. */ + assert (! abi_cfi); get_uleb128 (regno, program); /* DW_FORM_block is a ULEB128 length followed by that many bytes. */ offset = program - (const uint8_t *) cache->data->d.d_buf; diff --git a/libdw/cfi.h b/libdw/cfi.h index 8949833..98ac6cf 100644 --- a/libdw/cfi.h +++ b/libdw/cfi.h @@ -1,5 +1,5 @@ /* Internal definitions for libdw CFI interpreter. - Copyright (C) 2009-2010 Red Hat, Inc. + Copyright (C) 2009-2010, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -150,8 +150,8 @@ struct dwarf_frame_register Dwarf_Sword value:(sizeof (Dwarf_Sword) * 8 - 3); }; -/* This holds everything we know about the state of the frame - at a particular PC location described by an FDE. */ +/* This holds instructions for unwinding frame at a particular PC location + described by an FDE. */ struct Dwarf_Frame_s { /* This frame description covers PC values in [start, end). */ diff --git a/libdw/dwarf.h b/libdw/dwarf.h index 41cae5b..d98a4bd 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, diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c index a9c826c..4c6346a 100644 --- a/libdw/dwarf_begin_elf.c +++ b/libdw/dwarf_begin_elf.c @@ -1,5 +1,5 @@ /* Create descriptor from ELF descriptor for processing file. - Copyright (C) 2002-2011 Red Hat, Inc. + Copyright (C) 2002-2011, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2002. @@ -32,7 +32,6 @@ #endif #include -#include #include #include #include @@ -54,7 +53,7 @@ /* Section names. */ -static const char dwarf_scnnames[IDX_last][17] = +static const char dwarf_scnnames[IDX_last][18] = { [IDX_debug_info] = ".debug_info", [IDX_debug_types] = ".debug_types", @@ -67,117 +66,11 @@ static const char dwarf_scnnames[IDX_last][17] = [IDX_debug_str] = ".debug_str", [IDX_debug_macinfo] = ".debug_macinfo", [IDX_debug_macro] = ".debug_macro", - [IDX_debug_ranges] = ".debug_ranges" + [IDX_debug_ranges] = ".debug_ranges", + [IDX_gnu_debugaltlink] = ".gnu_debugaltlink" }; #define ndwarf_scnnames (sizeof (dwarf_scnnames) / sizeof (dwarf_scnnames[0])) -#ifdef ENABLE_DWZ -internal_function int -__check_build_id (Dwarf *dw, const uint8_t *build_id, const size_t id_len) -{ - if (dw == NULL) - return -1; - - Elf *elf = dw->elf; - Elf_Scn *scn = elf_nextscn (elf, NULL); - if (scn == NULL) - return -1; - - do - { - GElf_Shdr shdr_mem; - GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); - if (likely (shdr != NULL) && shdr->sh_type == SHT_NOTE) - { - size_t pos = 0; - GElf_Nhdr nhdr; - size_t name_pos; - size_t desc_pos; - Elf_Data *data = elf_getdata (scn, NULL); - while ((pos = gelf_getnote (data, pos, &nhdr, &name_pos, - &desc_pos)) > 0) - if (nhdr.n_type == NT_GNU_BUILD_ID - && nhdr.n_namesz == sizeof "GNU" - && ! memcmp (data->d_buf + name_pos, "GNU", sizeof "GNU")) - return (nhdr.n_descsz == id_len - && ! memcmp (data->d_buf + desc_pos, - build_id, id_len)) ? 0 : 1; - } - } - while ((scn = elf_nextscn (elf, scn)) != NULL); - - return -1; -} - -/* Try to open an debug alt link by name, checking build_id. - Marks free_alt on success, return NULL on failure. */ -static Dwarf * -try_debugaltlink (Dwarf *result, const char *try_name, - const uint8_t *build_id, const size_t id_len) -{ - int fd = open (try_name, O_RDONLY); - if (fd > 0) - { - result->alt_dwarf = INTUSE (dwarf_begin) (fd, DWARF_C_READ); - if (result->alt_dwarf != NULL) - { - Elf *elf = result->alt_dwarf->elf; - if (__check_build_id (result->alt_dwarf, build_id, id_len) == 0 - && elf_cntl (elf, ELF_C_FDREAD) == 0) - { - close (fd); - result->free_alt = 1; - return result; - } - INTUSE (dwarf_end) (result->alt_dwarf); - } - close (fd); - } - return NULL; -} - -/* For dwz multifile support, ignore if it looks wrong. */ -static Dwarf * -open_debugaltlink (Dwarf *result, const char *alt_name, - const uint8_t *build_id, const size_t id_len) -{ - /* First try the name itself, it is either an absolute path or - a relative one. Sadly we don't know relative from where at - this point. */ - if (try_debugaltlink (result, alt_name, build_id, id_len) != NULL) - return result; - - /* Lets try based on the build-id. This is somewhat distro specific, - we are following the Fedora implementation described at - https://fedoraproject.org/wiki/Releases/FeatureBuildId#Find_files_by_build_ID - */ -#define DEBUG_PREFIX "/usr/lib/debug/.build-id/" -#define PREFIX_LEN sizeof (DEBUG_PREFIX) - char id_name[PREFIX_LEN + 1 + id_len * 2 + sizeof ".debug" - 1]; - strcpy (id_name, DEBUG_PREFIX); - int n = snprintf (&id_name[PREFIX_LEN - 1], - 4, "%02" PRIx8 "/", (uint8_t) build_id[0]); - assert (n == 3); - for (size_t i = 1; i < id_len; ++i) - { - n = snprintf (&id_name[PREFIX_LEN - 1 + 3 + (i - 1) * 2], - 3, "%02" PRIx8, (uint8_t) build_id[i]); - assert (n == 2); - } - strcpy (&id_name[PREFIX_LEN - 1 + 3 + (id_len - 1) * 2], - ".debug"); - - if (try_debugaltlink (result, id_name, build_id, id_len)) - return result; - - /* Everything failed, mark this Dwarf as not having an alternate, - but don't fail the load. The user may want to set it by hand - before usage. */ - result->alt_dwarf = NULL; - return result; -} -#endif /* ENABLE_DWZ */ - static Dwarf * check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp) { @@ -187,9 +80,9 @@ check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp) /* Get the section header data. */ shdr = gelf_getshdr (scn, &shdr_mem); if (shdr == NULL) - /* This should never happen. If it does something is - wrong in the libelf library. */ - abort (); + /* We may read /proc/PID/mem with only program headers mapped and section + headers out of the mapped pages. */ + goto err; /* Ignore any SHT_NOBITS sections. Debugging sections should not have been stripped, but in case of a corrupt file we won't try @@ -215,28 +108,14 @@ check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp) { /* The section name must be valid. Otherwise is the ELF file invalid. */ + err: __libdw_free_zdata (result); + Dwarf_Sig8_Hash_free (&result->sig8_hash); __libdw_seterrno (DWARF_E_INVALID_ELF); free (result); return NULL; } -#ifdef ENABLE_DWZ - /* For dwz multifile support, ignore if it looks wrong. */ - if (strcmp (scnname, ".gnu_debugaltlink") == 0) - { - Elf_Data *data = elf_getdata (scn, NULL); - if (data != NULL && data->d_size != 0) - { - const char *alt_name = data->d_buf; - const void *build_id = memchr (data->d_buf, '\0', data->d_size); - const int id_len = data->d_size - (build_id - data->d_buf + 1); - if (alt_name && build_id && id_len > 0) - return open_debugaltlink (result, alt_name, build_id + 1, id_len); - } - } -#endif /* ENABLE_DWZ */ - /* Recognize the various sections. Most names start with .debug_. */ size_t cnt; for (cnt = 0; cnt < ndwarf_scnnames; ++cnt) @@ -280,6 +159,12 @@ check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp) memcpy (&size, data->d_buf + 4, sizeof size); size = be64toh (size); + /* Check for unsigned overflow so malloc always allocated + enough memory for both the Elf_Data header and the + uncompressed section data. */ + if (unlikely (sizeof (Elf_Data) + size < size)) + break; + Elf_Data *zdata = malloc (sizeof (Elf_Data) + size); if (unlikely (zdata == NULL)) break; @@ -344,6 +229,7 @@ valid_p (Dwarf *result) && unlikely (result->sectiondata[IDX_debug_info] == NULL)) { __libdw_free_zdata (result); + Dwarf_Sig8_Hash_free (&result->sig8_hash); __libdw_seterrno (DWARF_E_NO_DWARF); free (result); result = NULL; @@ -375,6 +261,7 @@ scngrp_read (Dwarf *result, Elf *elf, GElf_Ehdr *ehdr, Elf_Scn *scngrp) { /* We cannot read the section content. Fail! */ __libdw_free_zdata (result); + Dwarf_Sig8_Hash_free (&result->sig8_hash); free (result); return NULL; } @@ -391,6 +278,7 @@ scngrp_read (Dwarf *result, Elf *elf, GElf_Ehdr *ehdr, Elf_Scn *scngrp) /* A section group refers to a non-existing section. Should never happen. */ __libdw_free_zdata (result); + Dwarf_Sig8_Hash_free (&result->sig8_hash); __libdw_seterrno (DWARF_E_INVALID_ELF); free (result); return NULL; @@ -471,11 +359,13 @@ dwarf_begin_elf (elf, cmd, scngrp) } else if (cmd == DWARF_C_WRITE) { + Dwarf_Sig8_Hash_free (&result->sig8_hash); __libdw_seterrno (DWARF_E_UNIMPL); free (result); return NULL; } + Dwarf_Sig8_Hash_free (&result->sig8_hash); __libdw_seterrno (DWARF_E_INVALID_CMD); free (result); return NULL; diff --git a/libdw/dwarf_cu_die.c b/libdw/dwarf_cu_die.c new file mode 100644 index 0000000..48f4176 --- /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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#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/memory-access.c b/libdw/dwarf_cu_getdwarf.c similarity index 68% rename from libdw/memory-access.c rename to libdw/dwarf_cu_getdwarf.c index 7666fb6..f8a2e9b 100644 --- a/libdw/memory-access.c +++ b/libdw/dwarf_cu_getdwarf.c @@ -1,5 +1,5 @@ -/* Out of line functions for memory-access.h macros. - Copyright (C) 2005, 2006 Red Hat, Inc. +/* 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 @@ -29,22 +29,19 @@ #ifdef HAVE_CONFIG_H # include #endif + +#include + #include "libdwP.h" -#include "memory-access.h" -uint64_t -internal_function -__libdw_get_uleb128 (uint64_t acc, unsigned int i, const unsigned char **addrp) -{ - unsigned char __b; - get_uleb128_rest_return (acc, i, addrp); -} -int64_t -internal_function -__libdw_get_sleb128 (int64_t acc, unsigned int i, const unsigned char **addrp) +Dwarf * +dwarf_cu_getdwarf (cu) + Dwarf_CU *cu; { - unsigned char __b; - int64_t _v = acc; - get_sleb128_rest_return (acc, i, addrp); + if (cu == NULL) + /* Some error occurred before. */ + return NULL; + + return cu->dbg; } diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c index c18aceb..5657132 100644 --- a/libdw/dwarf_decl_file.c +++ b/libdw/dwarf_decl_file.c @@ -40,9 +40,9 @@ const char * dwarf_decl_file (Dwarf_Die *die) { Dwarf_Attribute attr_mem; - Dwarf_Sword idx = 0; + Dwarf_Word idx = 0; - if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate) + if (INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) (die, DW_AT_decl_file, &attr_mem), &idx) != 0) return NULL; diff --git a/libdw/dwarf_decl_line.c b/libdw/dwarf_decl_line.c index 5b6db5f..80fae6c 100644 --- a/libdw/dwarf_decl_line.c +++ b/libdw/dwarf_decl_line.c @@ -50,15 +50,20 @@ int internal_function __libdw_attr_intval (Dwarf_Die *die, int *linep, int attval) { Dwarf_Attribute attr_mem; - Dwarf_Sword line; + Dwarf_Word line; - int res = INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate) + int res = INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) (die, attval, &attr_mem), &line); if (res == 0) { - assert (line >= 0 && line <= INT_MAX); - *linep = line; + if (line > INT_MAX) + { + __libdw_seterrno (DWARF_E_INVALID_DWARF); + res = -1; + } + else + *linep = line; } return res; diff --git a/libdw/dwarf_end.c b/libdw/dwarf_end.c index e65314a..241a257 100644 --- a/libdw/dwarf_end.c +++ b/libdw/dwarf_end.c @@ -1,5 +1,5 @@ /* Release debugging handling context. - Copyright (C) 2002-2011 Red Hat, Inc. + Copyright (C) 2002-2011, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2002. @@ -111,10 +111,6 @@ dwarf_end (dwarf) if (dwarf->free_elf) elf_end (dwarf->elf); - /* Free the alternative Dwarf descriptor if necessary. */ - if (dwarf->free_alt) - INTUSE (dwarf_end) (dwarf->alt_dwarf); - /* Free the context descriptor. */ free (dwarf); } diff --git a/libdw/dwarf_formref_die.c b/libdw/dwarf_formref_die.c index f070127..b54e216 100644 --- a/libdw/dwarf_formref_die.c +++ b/libdw/dwarf_formref_die.c @@ -50,7 +50,7 @@ dwarf_formref_die (attr, result) { /* This has an absolute offset. */ - uint8_t ref_size = (cu->version == 2 + uint8_t ref_size = (cu->version == 2 && attr->form == DW_FORM_ref_addr ? cu->address_size : cu->offset_size); @@ -89,7 +89,6 @@ dwarf_formref_die (attr, result) ?: DWARF_E_INVALID_REFERENCE); return NULL; } - Dwarf_Sig8_Hash_insert (&cu->dbg->sig8_hash, cu->type_sig8, cu); } while (cu->type_sig8 != sig); diff --git a/libdw/dwarf_formstring.c b/libdw/dwarf_formstring.c index c66454e..02b56d4 100644 --- a/libdw/dwarf_formstring.c +++ b/libdw/dwarf_formstring.c @@ -1,5 +1,5 @@ /* Return string associated with given attribute. - Copyright (C) 2003-2010 Red Hat, Inc. + Copyright (C) 2003-2010, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2003. @@ -60,7 +60,7 @@ dwarf_formstring (attrp) if (unlikely (attrp->form != DW_FORM_strp && attrp->form != DW_FORM_GNU_strp_alt) - || dbg->sectiondata[IDX_debug_str] == NULL) + || dbg_ret->sectiondata[IDX_debug_str] == NULL) { __libdw_seterrno (DWARF_E_NO_STRING); return NULL; diff --git a/libdw/dwarf_getalt.c b/libdw/dwarf_getalt.c new file mode 100644 index 0000000..cc434f0 --- /dev/null +++ b/libdw/dwarf_getalt.c @@ -0,0 +1,42 @@ +/* Retrieves the DWARF descriptor for debugaltlink data. + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "libdwP.h" + +Dwarf * +dwarf_getalt (Dwarf *main) +{ + if (main == NULL) + return NULL; + return main->alt_dwarf; +} +INTDEF (dwarf_getalt) diff --git a/libdw/dwarf_getaranges.c b/libdw/dwarf_getaranges.c index cc70cb2..20ac7ec 100644 --- a/libdw/dwarf_getaranges.c +++ b/libdw/dwarf_getaranges.c @@ -144,9 +144,10 @@ dwarf_getaranges (dbg, aranges, naranges) if (address_size != 4 && address_size != 8) goto invalid; - /* Ignore the segment size value. */ - // XXX Really? - (void) *readp++; + /* We don't actually support segment selectors. */ + unsigned int segment_size = *readp++; + if (segment_size != 0) + goto invalid; /* Round the address to the next multiple of 2*address_size. */ readp += ((2 * address_size - ((readp - hdrstart) % (2 * address_size))) diff --git a/libdw/dwarf_getcfi_elf.c b/libdw/dwarf_getcfi_elf.c index ba00e05..a423ef3 100644 --- a/libdw/dwarf_getcfi_elf.c +++ b/libdw/dwarf_getcfi_elf.c @@ -280,8 +280,13 @@ getcfi_shdr (Elf *elf, const GElf_Ehdr *ehdr) hdr_vaddr = shdr->sh_addr; } else if (!strcmp (name, ".eh_frame")) - return getcfi_scn_eh_frame (elf, ehdr, scn, shdr, - hdr_scn, hdr_vaddr); + { + if (shdr->sh_type == SHT_PROGBITS) + return getcfi_scn_eh_frame (elf, ehdr, scn, shdr, + hdr_scn, hdr_vaddr); + else + return NULL; + } } } diff --git a/libdw/dwarf_getfuncs.c b/libdw/dwarf_getfuncs.c index afc5b6e..82894c9 100644 --- a/libdw/dwarf_getfuncs.c +++ b/libdw/dwarf_getfuncs.c @@ -1,5 +1,5 @@ /* Get function information. - Copyright (C) 2005 Red Hat, Inc. + Copyright (C) 2005, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2005. @@ -35,6 +35,63 @@ #include "libdwP.h" +struct visitor_info +{ + /* The user callback of dwarf_getfuncs. */ + int (*callback) (Dwarf_Die *, void *); + + /* The user arg value to dwarf_getfuncs. */ + void *arg; + + /* Addr of the DIE offset where to (re)start the search. Zero for all. */ + void *start_addr; + + /* Last subprogram DIE addr seen. */ + void *last_addr; + + /* The CU only contains C functions. Allows pruning of most subtrees. */ + bool c_cu; +}; + +static int +tree_visitor (unsigned int depth __attribute__ ((unused)), + struct Dwarf_Die_Chain *chain, void *arg) +{ + struct visitor_info *const v = arg; + Dwarf_Die *die = &chain->die; + void *start_addr = v->start_addr; + void *die_addr = die->addr; + + /* Pure C CUs can only contain defining subprogram DIEs as direct + children of the CU DIE or as nested function inside a normal C + code constructs. */ + int tag = INTUSE(dwarf_tag) (die); + if (v->c_cu + && tag != DW_TAG_subprogram + && tag != DW_TAG_lexical_block + && tag != DW_TAG_inlined_subroutine) + { + chain->prune = true; + return DWARF_CB_OK; + } + + /* Skip all DIEs till we found the (re)start addr. */ + if (start_addr != NULL) + { + if (die_addr == start_addr) + v->start_addr = NULL; + return DWARF_CB_OK; + } + + /* If this isn't a (defining) subprogram entity, skip DIE. */ + if (tag != DW_TAG_subprogram + || INTUSE(dwarf_hasattr) (die, DW_AT_declaration)) + return DWARF_CB_OK; + + v->last_addr = die_addr; + return (*v->callback) (die, v->arg); +} + ptrdiff_t dwarf_getfuncs (Dwarf_Die *cudie, int (*callback) (Dwarf_Die *, void *), void *arg, ptrdiff_t offset) @@ -43,31 +100,18 @@ dwarf_getfuncs (Dwarf_Die *cudie, int (*callback) (Dwarf_Die *, void *), || INTUSE(dwarf_tag) (cudie) != DW_TAG_compile_unit)) return -1; - Dwarf_Die die_mem; - Dwarf_Die *die; + int lang = INTUSE(dwarf_srclang) (cudie); + bool c_cu = (lang == DW_LANG_C89 + || lang == DW_LANG_C + || lang == DW_LANG_C99); - int res; - if (offset == 0) - res = INTUSE(dwarf_child) (cudie, &die_mem); - else - { - die = INTUSE(dwarf_offdie) (cudie->cu->dbg, offset, &die_mem); - res = INTUSE(dwarf_siblingof) (die, &die_mem); - } - die = res != 0 ? NULL : &die_mem; + struct visitor_info v = { callback, arg, (void *) offset, NULL, c_cu }; + struct Dwarf_Die_Chain chain = { .die = CUDIE (cudie->cu), + .parent = NULL }; + int res = __libdw_visit_scopes (0, &chain, &tree_visitor, NULL, &v); - while (die != NULL) - { - if (INTUSE(dwarf_tag) (die) == DW_TAG_subprogram) - { - if (callback (die, arg) != DWARF_CB_OK) - return INTUSE(dwarf_dieoffset) (die); - } - - if (INTUSE(dwarf_siblingof) (die, &die_mem) != 0) - break; - } - - /* That's all. */ - return 0; + if (res == DWARF_CB_ABORT) + return (ptrdiff_t) v.last_addr; + else + return res; } diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c index dfaa742..8dffb83 100644 --- a/libdw/dwarf_getlocation.c +++ b/libdw/dwarf_getlocation.c @@ -1,5 +1,5 @@ /* Return location expression list. - Copyright (C) 2000-2010 Red Hat, Inc. + Copyright (C) 2000-2010, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -56,6 +56,7 @@ attr_ok (Dwarf_Attribute *attr) case DW_AT_frame_base: case DW_AT_return_addr: case DW_AT_static_link: + case DW_AT_segment: break; default: @@ -94,13 +95,14 @@ loc_compare (const void *p1, const void *p2) /* For each DW_OP_implicit_value, we store a special entry in the cache. This points us directly to the block data for later fetching. */ static void -store_implicit_value (Dwarf *dbg, void **cache, Dwarf_Op *op, - unsigned char *data) +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. block->addr = op; - block->data = data + op->number2; + block->data = (unsigned char *) data; block->length = op->number; (void) tsearch (block, cache, loc_compare); } @@ -199,6 +201,13 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, bool cfap, bool valuep, Dwarf_Op **llbuf, size_t *listlen, int sec_index) { + /* Empty location expressions don't have any ops to intern. */ + if (block->length == 0) + { + *listlen = 0; + return 0; + } + /* Check whether we already looked at this list. */ struct loc_s fake = { .addr = block->data }; struct loc_s **found = tfind (&fake, cache, loc_compare); @@ -224,6 +233,21 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, struct loclist *loclist = NULL; unsigned int n = 0; + + if (cfap) + { + /* Synthesize the operation to push the CFA before the expression. */ + struct loclist *newloc; + newloc = (struct loclist *) alloca (sizeof (struct loclist)); + newloc->atom = DW_OP_call_frame_cfa; + newloc->number = 0; + newloc->number2 = 0; + newloc->offset = -1; + newloc->next = loclist; + loclist = newloc; + ++n; + } + /* Decode the opcodes. It is possible in some situations to have a block of size zero. */ while (data < end_data) @@ -339,6 +363,7 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, case DW_OP_const4s: case DW_OP_call4: + case DW_OP_GNU_parameter_ref: if (unlikely (data + 4 > end_data)) goto invalid; @@ -363,6 +388,8 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, case DW_OP_plus_uconst: case DW_OP_regx: case DW_OP_piece: + case DW_OP_GNU_convert: + case DW_OP_GNU_reinterpret: /* XXX Check size. */ get_uleb128 (newloc->number, data); break; @@ -381,21 +408,24 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, 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); break; case DW_OP_implicit_value: + case DW_OP_GNU_entry_value: /* This cannot be used in a CFI expression. */ if (unlikely (dbg == NULL)) goto invalid; + /* start of block inc. len. */ + newloc->number2 = (Dwarf_Word) (uintptr_t) data; /* XXX Check size. */ get_uleb128 (newloc->number, data); /* Block length. */ if (unlikely ((Dwarf_Word) (end_data - data) < newloc->number)) goto invalid; - newloc->number2 = data - block->data; /* Relative block offset. */ data += newloc->number; /* Skip the block. */ break; @@ -408,6 +438,31 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, get_uleb128 (newloc->number2, data); /* Byte offset. */ break; + case DW_OP_GNU_deref_type: + if (unlikely (data >= end_data)) + goto invalid; + newloc->number = *data++; + get_uleb128 (newloc->number2, data); + break; + + case DW_OP_GNU_const_type: + { + size_t size; + + /* XXX Check size. */ + get_uleb128 (newloc->number, data); + if (unlikely (data >= end_data)) + goto invalid; + + /* start of block inc. len. */ + newloc->number2 = (Dwarf_Word) (uintptr_t) data; + size = *data++; + if (unlikely ((Dwarf_Word) (end_data - data) < size)) + goto invalid; + data += size; /* Skip the block. */ + } + break; + default: goto invalid; } @@ -416,8 +471,8 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, if (unlikely (n == 0)) { /* This is not allowed. - - XXX Is it? */ + It would mean an empty location expression, which we handled + already as a special case above. */ goto invalid; } @@ -434,9 +489,6 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, ++n; } - if (cfap) - ++n; - /* Allocate the array. */ Dwarf_Op *result; if (dbg != NULL) @@ -456,16 +508,6 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, *llbuf = result; *listlen = n; - if (cfap) - { - /* Synthesize the operation to push the CFA before the expression. */ - --n; - result[0].atom = DW_OP_call_frame_cfa; - result[0].number = 0; - result[0].number2 = 0; - result[0].offset = -1; - } - do { /* We populate the array from the back since the list is backwards. */ @@ -476,7 +518,7 @@ __libdw_intern_expression (Dwarf *dbg, bool other_byte_order, result[n].offset = loclist->offset; if (result[n].atom == DW_OP_implicit_value) - store_implicit_value (dbg, cache, &result[n], block->data); + store_implicit_value (dbg, cache, &result[n]); loclist = loclist->next; } @@ -539,6 +581,121 @@ dwarf_getlocation (attr, llbuf, listlen) return getlocation (attr->cu, &block, llbuf, listlen, cu_sec_idx (attr->cu)); } +static int +attr_base_address (attr, basep) + Dwarf_Attribute *attr; + Dwarf_Addr *basep; +{ + /* Fetch the CU's base address. */ + Dwarf_Die cudie = CUDIE (attr->cu); + + /* Find the base address of the compilation unit. It will + normally be specified by DW_AT_low_pc. In DWARF-3 draft 4, + the base address could be overridden by DW_AT_entry_pc. It's + been removed, but GCC emits DW_AT_entry_pc and not DW_AT_lowpc + for compilation units with discontinuous ranges. */ + Dwarf_Attribute attr_mem; + if (unlikely (INTUSE(dwarf_lowpc) (&cudie, basep) != 0) + && INTUSE(dwarf_formaddr) (INTUSE(dwarf_attr) (&cudie, + DW_AT_entry_pc, + &attr_mem), + basep) != 0) + { + if (INTUSE(dwarf_errno) () != 0) + return -1; + + /* The compiler provided no base address when it should + have. Buggy GCC does this when it used absolute + addresses in the location list and no DW_AT_ranges. */ + *basep = 0; + } + return 0; +} + +static int +initial_offset_base (attr, offset, basep) + Dwarf_Attribute *attr; + ptrdiff_t *offset; + Dwarf_Addr *basep; +{ + if (attr_base_address (attr, basep) != 0) + return -1; + + Dwarf_Word start_offset; + if (__libdw_formptr (attr, IDX_debug_loc, + DWARF_E_NO_LOCLIST, + NULL, &start_offset) == NULL) + return -1; + + *offset = start_offset; + return 0; +} + +static ptrdiff_t +getlocations_addr (attr, offset, basep, startp, endp, address, + locs, expr, exprlen) + Dwarf_Attribute *attr; + ptrdiff_t offset; + Dwarf_Addr *basep; + Dwarf_Addr *startp; + Dwarf_Addr *endp; + Dwarf_Addr address; + Elf_Data *locs; + Dwarf_Op **expr; + size_t *exprlen; +{ + unsigned char *readp = locs->d_buf + offset; + unsigned char *readendp = locs->d_buf + locs->d_size; + + next: + if (readendp - readp < attr->cu->address_size * 2) + { + invalid: + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return -1; + } + + Dwarf_Addr begin; + Dwarf_Addr end; + + switch (__libdw_read_begin_end_pair_inc (attr->cu->dbg, IDX_debug_loc, + &readp, attr->cu->address_size, + &begin, &end, basep)) + { + case 0: /* got location range. */ + break; + case 1: /* base address setup. */ + goto next; + case 2: /* end of loclist */ + return 0; + default: /* error */ + return -1; + } + + if (readendp - readp < 2) + goto invalid; + + /* We have a location expression. */ + Dwarf_Block block; + block.length = read_2ubyte_unaligned_inc (attr->cu->dbg, readp); + block.data = readp; + if (readendp - readp < (ptrdiff_t) block.length) + goto invalid; + readp += block.length; + + *startp = *basep + begin; + *endp = *basep + end; + + /* If address is minus one we want them all, otherwise only matching. */ + if (address != (Dwarf_Word) -1 && (address < *startp || address >= *endp)) + goto next; + + if (getlocation (attr->cu, &block, expr, exprlen, IDX_debug_loc) != 0) + return -1; + + return readp - (unsigned char *) locs->d_buf; +} + int dwarf_getlocation_addr (attr, address, llbufs, listlens, maxlocs) Dwarf_Attribute *attr; @@ -577,85 +734,109 @@ dwarf_getlocation_addr (attr, address, llbufs, listlens, maxlocs) if (result != 1) return result ?: 1; - unsigned char *endp; - unsigned char *readp = __libdw_formptr (attr, IDX_debug_loc, - DWARF_E_NO_LOCLIST, &endp, NULL); - if (readp == NULL) + Dwarf_Addr base, start, end; + Dwarf_Op *expr; + size_t expr_len; + ptrdiff_t off = 0; + size_t got = 0; + + /* This is a true loclistptr, fetch the initial base address and offset. */ + if (initial_offset_base (attr, &off, &base) != 0) return -1; - Dwarf_Addr base = (Dwarf_Addr) -1; - size_t got = 0; - while (got < maxlocs) + const Elf_Data *d = attr->cu->dbg->sectiondata[IDX_debug_loc]; + if (d == NULL) { - if (endp - readp < attr->cu->address_size * 2) + __libdw_seterrno (DWARF_E_NO_LOCLIST); + return -1; + } + + while (got < maxlocs + && (off = getlocations_addr (attr, off, &base, &start, &end, + address, d, &expr, &expr_len)) > 0) + { + /* This one matches the address. */ + if (llbufs != NULL) { - invalid: - __libdw_seterrno (DWARF_E_INVALID_DWARF); - return -1; + llbufs[got] = expr; + listlens[got] = expr_len; } + ++got; + } - Dwarf_Addr begin; - Dwarf_Addr end; + /* We might stop early, so off can be zero or positive on success. */ + if (off < 0) + return -1; - int status - = __libdw_read_begin_end_pair_inc (attr->cu->dbg, IDX_debug_loc, - &readp, attr->cu->address_size, - &begin, &end, &base); - if (status == 2) /* End of list entry. */ - break; - else if (status == 1) /* Base address selected. */ - continue; - else if (status < 0) - return status; - - if (endp - readp < 2) - goto invalid; - - /* We have a location expression. */ - block.length = read_2ubyte_unaligned_inc (attr->cu->dbg, readp); - block.data = readp; - if (endp - readp < (ptrdiff_t) block.length) - goto invalid; - readp += block.length; - - if (base == (Dwarf_Addr) -1) + return got; +} + +ptrdiff_t +dwarf_getlocations (attr, offset, basep, startp, endp, expr, exprlen) + Dwarf_Attribute *attr; + ptrdiff_t offset; + Dwarf_Addr *basep; + Dwarf_Addr *startp; + Dwarf_Addr *endp; + Dwarf_Op **expr; + size_t *exprlen; +{ + if (! attr_ok (attr)) + return -1; + + /* 1 is an invalid offset, meaning no more locations. */ + if (offset == 1) + return 0; + + if (offset == 0) + { + /* If it has a block form, it's a single location expression. */ + Dwarf_Block block; + if (INTUSE(dwarf_formblock) (attr, &block) == 0) { - /* Fetch the CU's base address. */ - Dwarf_Die cudie = CUDIE (attr->cu); - - /* Find the base address of the compilation unit. It will - normally be specified by DW_AT_low_pc. In DWARF-3 draft 4, - the base address could be overridden by DW_AT_entry_pc. It's - been removed, but GCC emits DW_AT_entry_pc and not DW_AT_lowpc - for compilation units with discontinuous ranges. */ - Dwarf_Attribute attr_mem; - if (unlikely (INTUSE(dwarf_lowpc) (&cudie, &base) != 0) - && INTUSE(dwarf_formaddr) (INTUSE(dwarf_attr) (&cudie, - DW_AT_entry_pc, - &attr_mem), - &base) != 0) - { - if (INTUSE(dwarf_errno) () != 0) - return -1; + if (getlocation (attr->cu, &block, expr, exprlen, + cu_sec_idx (attr->cu)) != 0) + return -1; - /* The compiler provided no base address when it should - have. Buggy GCC does this when it used absolute - addresses in the location list and no DW_AT_ranges. */ - base = 0; - } + /* This is the one and only location covering everything. */ + *startp = 0; + *endp = -1; + return 1; } - if (address >= base + begin && address < base + end) + int error = INTUSE(dwarf_errno) (); + if (unlikely (error != DWARF_E_NO_BLOCK)) { - /* This one matches the address. */ - if (llbufs != NULL - && unlikely (getlocation (attr->cu, &block, - &llbufs[got], &listlens[got], - IDX_debug_loc) != 0)) - return -1; - ++got; + __libdw_seterrno (error); + return -1; } + + int result = check_constant_offset (attr, expr, exprlen); + if (result != 1) + { + if (result == 0) + { + /* This is the one and only location covering everything. */ + *startp = 0; + *endp = -1; + return 1; + } + return result; + } + + /* We must be looking at a true loclistptr, fetch the initial + base address and offset. */ + if (initial_offset_base (attr, &offset, basep) != 0) + return -1; } - return got; + const Elf_Data *d = attr->cu->dbg->sectiondata[IDX_debug_loc]; + if (d == NULL) + { + __libdw_seterrno (DWARF_E_NO_LOCLIST); + return -1; + } + + return getlocations_addr (attr, offset, basep, startp, endp, + (Dwarf_Word) -1, d, expr, exprlen); } diff --git a/libdw/dwarf_getlocation_attr.c b/libdw/dwarf_getlocation_attr.c new file mode 100644 index 0000000..cb29045 --- /dev/null +++ b/libdw/dwarf_getlocation_attr.c @@ -0,0 +1,103 @@ +/* Return DWARF attribute associated with a location expression op. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + + +int +dwarf_getlocation_attr (attr, op, result) + Dwarf_Attribute *attr; + const Dwarf_Op *op; + Dwarf_Attribute *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; + 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; + 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; + break; + + case DW_OP_call2: + case DW_OP_call4: + case DW_OP_call_ref: + { + Dwarf_Die die; + if (INTUSE(dwarf_getlocation_die) (attr, op, &die) != 0) + return -1; + if (INTUSE(dwarf_attr) (&die, DW_AT_location, result) == NULL) + { + __libdw_empty_loc_attr (result, attr->cu); + return 0; + } + } + break; + + case DW_OP_GNU_implicit_pointer: + { + Dwarf_Die die; + if (INTUSE(dwarf_getlocation_die) (attr, op, &die) != 0) + return -1; + 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); + return 0; + } + } + break; + + default: + __libdw_seterrno (DWARF_E_INVALID_ACCESS); + return -1; + } + + return 0; +} diff --git a/libdw/dwarf_getlocation_die.c b/libdw/dwarf_getlocation_die.c new file mode 100644 index 0000000..fa03aac --- /dev/null +++ b/libdw/dwarf_getlocation_die.c @@ -0,0 +1,78 @@ +/* Return DIE associated with a location expression op. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + +int +dwarf_getlocation_die (attr, op, result) + Dwarf_Attribute *attr; + const Dwarf_Op *op; + Dwarf_Die *result; +{ + if (attr == NULL) + return -1; + + Dwarf_Off dieoff; + switch (op->atom) + { + case DW_OP_GNU_implicit_pointer: + case DW_OP_call_ref: + dieoff = op->number; + break; + + case DW_OP_GNU_parameter_ref: + case DW_OP_GNU_convert: + case DW_OP_GNU_reinterpret: + case DW_OP_GNU_const_type: + case DW_OP_call2: + case DW_OP_call4: + dieoff = attr->cu->start + op->number; + break; + + case DW_OP_GNU_regval_type: + case DW_OP_GNU_deref_type: + dieoff = attr->cu->start + op->number2; + break; + + default: + __libdw_seterrno (DWARF_E_INVALID_ACCESS); + return -1; + } + + if (__libdw_offdie (attr->cu->dbg, dieoff, result, + attr->cu->type_offset != 0) == NULL) + return -1; + + return 0; +} +INTDEF(dwarf_getlocation_die); diff --git a/libdw/dwarf_getlocation_implicit_pointer.c b/libdw/dwarf_getlocation_implicit_pointer.c index 322fdb8..f93d17e 100644 --- a/libdw/dwarf_getlocation_implicit_pointer.c +++ b/libdw/dwarf_getlocation_implicit_pointer.c @@ -34,6 +34,18 @@ #include +static unsigned char empty_exprloc = 0; + +void +internal_function +__libdw_empty_loc_attr (Dwarf_Attribute *attr, struct Dwarf_CU *cu ) +{ + attr->code = DW_AT_location; + attr->form = DW_FORM_exprloc; + attr->valp = &empty_exprloc; + attr->cu = cu; +} + int dwarf_getlocation_implicit_pointer (attr, op, result) Dwarf_Attribute *attr; @@ -57,8 +69,8 @@ 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_seterrno (DWARF_E_INVALID_DWARF); - return -1; + __libdw_empty_loc_attr (result, attr->cu); + return 0; } return 0; diff --git a/libdw/dwarf_getsrcfiles.c b/libdw/dwarf_getsrcfiles.c index d026820..4bfc34b 100644 --- a/libdw/dwarf_getsrcfiles.c +++ b/libdw/dwarf_getsrcfiles.c @@ -1,5 +1,5 @@ /* Return source file information of CU. - Copyright (C) 2004, 2005 Red Hat, Inc. + Copyright (C) 2004, 2005, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2004. @@ -40,7 +40,8 @@ int dwarf_getsrcfiles (Dwarf_Die *cudie, Dwarf_Files **files, size_t *nfiles) { if (unlikely (cudie == NULL - || INTUSE(dwarf_tag) (cudie) != DW_TAG_compile_unit)) + || (INTUSE(dwarf_tag) (cudie) != DW_TAG_compile_unit + && INTUSE(dwarf_tag) (cudie) != DW_TAG_partial_unit))) return -1; int res = -1; diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c index 0758023..7b174cf 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 Red Hat, Inc. + Copyright (C) 2004-2010, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2004. @@ -69,11 +69,21 @@ 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_compile_unit + && INTUSE(dwarf_tag) (cudie) != DW_TAG_partial_unit))) return -1; int res = -1; + struct linelist *linelist = NULL; + unsigned int 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 + through the next pointer at the end. */ +#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) @@ -324,20 +334,26 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) } /* Process the instructions. */ - struct linelist *linelist = NULL; - unsigned int nlinelist = 0; /* 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 { \ - if (unlikely (add_new_line (alloca (sizeof (struct linelist)), \ - end_seq))) \ + 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 @@ -364,10 +380,6 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) #undef SET - new_line->next = linelist; - linelist = new_line; - ++nlinelist; - return false; } @@ -711,6 +723,12 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) cu->lines->info[i].files = files; } + /* 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; + /* Success. */ res = 0; } @@ -725,6 +743,14 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) } out: + /* Free malloced line records, if any. */ + for (unsigned int i = MAX_STACK_ALLOC; i < nlinelist; i++) + { + struct linelist *ll = malloc_linelist->next; + free (malloc_linelist); + malloc_linelist = ll; + } + // XXX Eventually: unlocking here. return res; diff --git a/libdw/dwarf_setalt.c b/libdw/dwarf_setalt.c new file mode 100644 index 0000000..9bd566f --- /dev/null +++ b/libdw/dwarf_setalt.c @@ -0,0 +1,40 @@ +/* Provides the data referenced by the .gnu_debugaltlink section. + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "libdwP.h" + +void +dwarf_setalt (Dwarf *main, Dwarf *alt) +{ + main->alt_dwarf = alt; +} +INTDEF (dwarf_setalt) diff --git a/libdw/fde.c b/libdw/fde.c index d366768..91ce732 100644 --- a/libdw/fde.c +++ b/libdw/fde.c @@ -83,7 +83,11 @@ intern_fde (Dwarf_CFI *cache, const Dwarf_FDE *entry) &fde->instructions, &fde->start)) || unlikely (read_encoded_value (cache, cie->fde_encoding & 0x0f, &fde->instructions, &fde->end))) - return NULL; + { + free (fde); + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return NULL; + } fde->end += fde->start; fde->cie = cie; @@ -181,32 +185,30 @@ binary_search_fde (Dwarf_CFI *cache, Dwarf_Addr address) u = idx; else { + l = idx + 1; + Dwarf_Addr fde; if (unlikely (read_encoded_value (&dummy_cfi, cache->search_table_encoding, &p, &fde))) break; - if (address >= start) + + /* If this is the last entry, its upper bound is assumed to be + the end of the module. + XXX really should be end of containing PT_LOAD segment */ + if (l < cache->search_table_entries) { - l = idx + 1; - - /* If this is the last entry, its upper bound is assumed to be - the end of the module. - XXX really should be end of containing PT_LOAD segment */ - if (l < cache->search_table_entries) - { - /* Look at the start address in the following entry. */ - Dwarf_Addr end; - if (unlikely (read_encoded_value - (&dummy_cfi, cache->search_table_encoding, &p, - &end))) - break; - if (address >= end) - continue; - } - - return fde - cache->frame_vaddr; + /* Look at the start address in the following entry. */ + Dwarf_Addr end; + if (unlikely (read_encoded_value + (&dummy_cfi, cache->search_table_encoding, &p, + &end))) + break; + if (address >= end) + continue; } + + return fde - cache->frame_vaddr; } } @@ -231,12 +233,17 @@ __libdw_find_fde (Dwarf_CFI *cache, Dwarf_Addr address) if (offset == (Dwarf_Off) -1l) goto no_match; struct dwarf_fde *fde = __libdw_fde_by_offset (cache, offset); - if (unlikely (fde != NULL) - /* Sanity check the address range. */ - && unlikely (address < fde->start || address >= fde->end)) + if (likely (fde != NULL)) { - __libdw_seterrno (DWARF_E_INVALID_DWARF); - return NULL; + /* Sanity check the address range. */ + if (unlikely (address < fde->start)) + { + __libdw_seterrno (DWARF_E_INVALID_DWARF); + return NULL; + } + /* .eh_frame_hdr does not indicate length covered by FDE. */ + if (unlikely (address >= fde->end)) + goto no_match; } return fde; } diff --git a/libdw/known-dwarf.h b/libdw/known-dwarf.h index 8109b59..6228de6 100644 --- a/libdw/known-dwarf.h +++ b/libdw/known-dwarf.h @@ -577,7 +577,6 @@ ONE_KNOWN_DW_TAG (lexical_block, DW_TAG_lexical_block) \ ONE_KNOWN_DW_TAG (member, DW_TAG_member) \ ONE_KNOWN_DW_TAG (module, DW_TAG_module) \ - ONE_KNOWN_DW_TAG (mutable_type, DW_TAG_mutable_type) \ ONE_KNOWN_DW_TAG (namelist, DW_TAG_namelist) \ ONE_KNOWN_DW_TAG (namelist_item, DW_TAG_namelist_item) \ ONE_KNOWN_DW_TAG (namespace, DW_TAG_namespace) \ diff --git a/libdw/libdw.h b/libdw/libdw.h index f5fc4e2..196d54a 100644 --- a/libdw/libdw.h +++ b/libdw/libdw.h @@ -1,5 +1,5 @@ /* Interfaces for libdw. - Copyright (C) 2002-2010 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 @@ -112,6 +112,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 +261,24 @@ 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); + +/* Provides the data referenced by the .gnu_debugaltlink section. The + caller should check that MAIN and ALT match (i.e., they have the + same build ID). It is the responsibility of the caller to ensure + that the data referenced by ALT stays valid while it is used by + MAIN, until dwarf_setalt is called on MAIN with a different + descriptor, or dwarf_end. */ +extern void dwarf_setalt (Dwarf *main, Dwarf *alt); + /* Release debugging handling context. */ extern int dwarf_end (Dwarf *dwarf); @@ -345,6 +364,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); @@ -630,6 +666,22 @@ extern int dwarf_getlocation_addr (Dwarf_Attribute *attr, Dwarf_Addr address, Dwarf_Op **exprs, size_t *exprlens, size_t nlocs); +/* Enumerate the locations ranges and descriptions covered by the + given attribute. In the first call OFFSET should be zero and + *BASEP need not be initialized. Returns -1 for errors, zero when + there are no more locations to report, or a nonzero OFFSET + value to pass to the next call. Each subsequent call must preserve + *BASEP from the prior call. Successful calls fill in *STARTP and + *ENDP with a contiguous address range and *EXPR with a pointer to + an array of operations with length *EXPRLEN. If the attribute + describes a single location description and not a location list the + first call (with OFFSET zero) will return the location description + in *EXPR with *STARTP set to zero and *ENDP set to minus one. */ +extern ptrdiff_t dwarf_getlocations (Dwarf_Attribute *attr, + ptrdiff_t offset, Dwarf_Addr *basep, + Dwarf_Addr *startp, Dwarf_Addr *endp, + Dwarf_Op **expr, size_t *exprlen); + /* Return the block associated with a DW_OP_implicit_value operation. The OP pointer must point into an expression that dwarf_getlocation or dwarf_getlocation_addr has returned given the same ATTR. */ @@ -648,6 +700,29 @@ extern int dwarf_getlocation_implicit_pointer (Dwarf_Attribute *attr, Dwarf_Attribute *result) __nonnull_attribute__ (2, 3); +/* Return the DIE associated with an operation such as + DW_OP_GNU_implicit_pointer, DW_OP_GNU_parameter_ref, DW_OP_GNU_convert, + DW_OP_GNU_reinterpret, DW_OP_GNU_const_type, DW_OP_GNU_regval_type or + DW_OP_GNU_deref_type. The OP pointer must point into an expression that + dwarf_getlocation or dwarf_getlocation_addr has returned given the same + ATTR. The RESULT is a DIE that expresses a type or value needed by the + given OP. */ +extern int dwarf_getlocation_die (Dwarf_Attribute *attr, + const Dwarf_Op *op, + Dwarf_Die *result) + __nonnull_attribute__ (2, 3); + +/* Return the attribute expressing a value associated with an operation such + as DW_OP_implicit_value, DW_OP_GNU_entry_value or DW_OP_GNU_const_type. + The OP pointer must point into an expression that dwarf_getlocation + or dwarf_getlocation_addr has returned given the same ATTR. + The RESULT is a value expressed by an attribute such as DW_AT_location + or DW_AT_const_value. */ +extern int dwarf_getlocation_attr (Dwarf_Attribute *attr, + const Dwarf_Op *op, + Dwarf_Attribute *result) + __nonnull_attribute__ (2, 3); + /* Compute the byte-size of a type DIE according to DWARF rules. For most types, this is just DW_AT_byte_size. @@ -708,7 +783,16 @@ extern Dwarf_Arange *dwarf_getarange_addr (Dwarf_Aranges *aranges, -/* Get functions in CUDIE. */ +/* Get functions in CUDIE. The given callback will be called for all + defining DW_TAG_subprograms in the CU DIE tree. If the callback + returns DWARF_CB_ABORT the return value can be used as offset argument + to resume the function to find all remaining functions (this is not + really recommended, since it needs to rewalk the CU DIE tree first till + that offset is found again). If the callback returns DWARF_CB_OK + dwarf_getfuncs will not return but keep calling the callback for each + function DIE it finds. Pass zero for offset on the first call to walk + the full CU DIE tree. If no more functions can be found and the callback + returned DWARF_CB_OK then the function returns zero. */ extern ptrdiff_t dwarf_getfuncs (Dwarf_Die *cudie, int (*callback) (Dwarf_Die *, void *), void *arg, ptrdiff_t offset); diff --git a/libdw/libdw.map b/libdw/libdw.map index 1f71d03..55bc537 100644 --- a/libdw/libdw.map +++ b/libdw/libdw.map @@ -254,3 +254,56 @@ ELFUTILS_0.149 { dwfl_dwarf_line; } ELFUTILS_0.148; + +ELFUTILS_0.156 { + global: + # Replaced ELFUTILS_0.122 version, which has a wrapper without add_p_vaddr. + dwfl_report_elf; +} ELFUTILS_0.149; + +ELFUTILS_0.157 { + global: + dwarf_getlocations; + dwarf_getlocation_die; + dwarf_getlocation_attr; +} ELFUTILS_0.156; + +ELFUTILS_0.158 { + global: + # Replaced ELFUTILS_0.146 version, which has a wrapper without executable. + dwfl_core_file_report; + + dwfl_attach_state; + dwfl_pid; + dwfl_thread_dwfl; + dwfl_thread_tid; + dwfl_frame_thread; + dwfl_thread_state_registers; + dwfl_thread_state_register_pc; + dwfl_getthread_frames; + dwfl_getthreads; + dwfl_thread_getframes; + dwfl_frame_pc; + + dwfl_module_getsymtab_first_global; + dwfl_module_addrinfo; + dwfl_module_getsym_info; + + dwfl_core_file_attach; + dwfl_linux_proc_attach; +} ELFUTILS_0.157; + +ELFUTILS_0.159 { + global: + dwarf_getalt; + dwarf_setalt; + dwelf_dwarf_gnu_debugaltlink; + 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; \ No newline at end of file diff --git a/libdw/libdwP.h b/libdw/libdwP.h index 76bddff..ce8a83d 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -1,5 +1,5 @@ /* Internal definitions for libdwarf. - Copyright (C) 2002-2011 Red Hat, Inc. + Copyright (C) 2002-2011, 2013, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2002. @@ -34,6 +34,7 @@ #include #include +#include /* gettext helper macros. */ @@ -73,6 +74,7 @@ enum IDX_debug_macinfo, IDX_debug_macro, IDX_debug_ranges, + IDX_gnu_debugaltlink, IDX_last }; @@ -145,9 +147,6 @@ struct Dwarf /* If true, we allocated the ELF descriptor ourselves. */ bool free_elf; - /* If true, we allocated the Dwarf descriptor for alt_dwarf ourselves. */ - bool free_alt; - /* Information for traversing the .debug_pubnames section. This is an array and separately allocated with malloc. */ struct pubnames_s @@ -403,11 +402,40 @@ extern Dwarf_Abbrev *__libdw_getabbrev (Dwarf *dbg, struct Dwarf_CU *cu, __nonnull_attribute__ (1) internal_function; /* Helper functions for form handling. */ -extern size_t __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, - unsigned int form, - const unsigned char *valp) +extern size_t __libdw_form_val_compute_len (Dwarf *dbg, struct Dwarf_CU *cu, + unsigned int form, + const unsigned char *valp) __nonnull_attribute__ (1, 2, 4) 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) +{ + /* Small lookup table of forms with fixed lengths. Absent indexes are + initialized 0, so any truly desired 0 is set to 0x80 and masked. */ + static const uint8_t form_lengths[] = + { + [DW_FORM_flag_present] = 0x80, + [DW_FORM_data1] = 1, [DW_FORM_ref1] = 1, [DW_FORM_flag] = 1, + [DW_FORM_data2] = 2, [DW_FORM_ref2] = 2, + [DW_FORM_data4] = 4, [DW_FORM_ref4] = 4, + [DW_FORM_data8] = 8, [DW_FORM_ref8] = 8, [DW_FORM_ref_sig8] = 8, + }; + + /* Return immediately for forms with fixed lengths. */ + if (form < sizeof form_lengths / sizeof form_lengths[0]) + { + uint8_t len = form_lengths[form]; + if (len != 0) + return len & 0x7f; /* Mask to allow 0x80 -> 0. */ + } + + /* Other forms require some computation. */ + return __libdw_form_val_compute_len (dbg, cu, form, valp); +} + /* Helper function for DW_FORM_ref* handling. */ extern int __libdw_formref (Dwarf_Attribute *attr, Dwarf_Off *return_offset) __nonnull_attribute__ (1, 2) internal_function; @@ -624,13 +652,9 @@ unsigned char * __libdw_formptr (Dwarf_Attribute *attr, int sec_index, Dwarf_Off *offsetp) internal_function; -#ifdef ENABLE_DWZ -/* Checks that the build_id of the underlying Elf matches the expected. - Returns zero on match, -1 on error or no build_id found or 1 when - build_id doesn't match. */ -int __check_build_id (Dwarf *dw, const uint8_t *build_id, const size_t id_len) +/* Fills in the given attribute to point at an empty location expression. */ +void __libdw_empty_loc_attr (Dwarf_Attribute *attr, struct Dwarf_CU *cu) internal_function; -#endif /* ENABLE_DWZ */ /* Aliases to avoid PLTs. */ @@ -651,9 +675,11 @@ INTDECL (dwarf_formref_die) INTDECL (dwarf_formsdata) INTDECL (dwarf_formstring) INTDECL (dwarf_formudata) +INTDECL (dwarf_getalt) INTDECL (dwarf_getarange_addr) INTDECL (dwarf_getarangeinfo) INTDECL (dwarf_getaranges) +INTDECL (dwarf_getlocation_die) INTDECL (dwarf_getsrcfiles) INTDECL (dwarf_getsrclines) INTDECL (dwarf_hasattr) @@ -665,6 +691,7 @@ INTDECL (dwarf_nextcu) INTDECL (dwarf_next_unit) INTDECL (dwarf_offdie) INTDECL (dwarf_ranges) +INTDECL (dwarf_setalt) INTDECL (dwarf_siblingof) INTDECL (dwarf_srclang) INTDECL (dwarf_tag) diff --git a/libdw/libdw_findcu.c b/libdw/libdw_findcu.c index 70e24a0..c0bff2a 100644 --- a/libdw/libdw_findcu.c +++ b/libdw/libdw_findcu.c @@ -110,6 +110,9 @@ __libdw_intern_next_unit (dbg, debug_types) newp->lines = NULL; newp->locs = NULL; + if (debug_types) + Dwarf_Sig8_Hash_insert (&dbg->sig8_hash, type_sig8, newp); + /* 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 c476a6e..5350556 100644 --- a/libdw/libdw_form.c +++ b/libdw/libdw_form.c @@ -39,13 +39,15 @@ size_t internal_function -__libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, unsigned int form, - const unsigned char *valp) +__libdw_form_val_compute_len (Dwarf *dbg, struct Dwarf_CU *cu, + unsigned int form, const unsigned char *valp) { const unsigned char *saved; Dwarf_Word u128; size_t result; + /* NB: This doesn't cover constant form lengths, which are + already handled by the inlined __libdw_form_val_len. */ switch (form) { case DW_FORM_addr: @@ -82,32 +84,6 @@ __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, unsigned int form, result = u128 + (valp - saved); break; - case DW_FORM_flag_present: - result = 0; - break; - - case DW_FORM_ref1: - case DW_FORM_data1: - case DW_FORM_flag: - result = 1; - break; - - case DW_FORM_data2: - case DW_FORM_ref2: - result = 2; - break; - - case DW_FORM_data4: - case DW_FORM_ref4: - result = 4; - break; - - case DW_FORM_data8: - case DW_FORM_ref8: - case DW_FORM_ref_sig8: - result = 8; - break; - case DW_FORM_string: result = strlen ((char *) valp) + 1; break; diff --git a/libdw/libdw_visit_scopes.c b/libdw/libdw_visit_scopes.c index ea0c6b4..487375d 100644 --- a/libdw/libdw_visit_scopes.c +++ b/libdw/libdw_visit_scopes.c @@ -33,10 +33,9 @@ #include "libdwP.h" #include -enum die_class { ignore, match, match_inline, walk, imported }; -static enum die_class -classify_die (Dwarf_Die *die) +static bool +may_have_scopes (Dwarf_Die *die) { switch (INTUSE(dwarf_tag) (die)) { @@ -48,31 +47,21 @@ classify_die (Dwarf_Die *die) case DW_TAG_catch_block: case DW_TAG_try_block: case DW_TAG_entry_point: - return match; case DW_TAG_inlined_subroutine: - return match_inline; case DW_TAG_subprogram: - /* This might be a concrete out-of-line instance of an inline, in - which case it is not guaranteed to be owned by the right scope and - we will search for its origin as for DW_TAG_inlined_subroutine. */ - return (INTUSE(dwarf_hasattr) (die, DW_AT_abstract_origin) - ? match_inline : match); + return true; /* DIEs without addresses that can own DIEs with addresses. */ case DW_TAG_namespace: case DW_TAG_class_type: case DW_TAG_structure_type: - return walk; - - /* Special indirection required. */ - case DW_TAG_imported_unit: - return imported; + return true; /* Other DIEs we have no reason to descend. */ default: break; } - return ignore; + return false; } int @@ -84,10 +73,11 @@ __libdw_visit_scopes (depth, root, previsit, postvisit, arg) void *arg; { struct Dwarf_Die_Chain child; + int ret; child.parent = root; - if (INTUSE(dwarf_child) (&root->die, &child.die) != 0) - return -1; + if ((ret = INTUSE(dwarf_child) (&root->die, &child.die)) != 0) + return ret < 0 ? -1 : 0; // Having zero children is legal. inline int recurse (void) { @@ -95,63 +85,63 @@ __libdw_visit_scopes (depth, root, previsit, postvisit, arg) previsit, postvisit, arg); } - do - { - child.prune = false; - - if (previsit != NULL) - { - int result = (*previsit) (depth + 1, &child, arg); - if (result != DWARF_CB_OK) - return result; - } - - if (!child.prune) - switch (classify_die (&child.die)) + inline int walk_children () + { + do + { + /* For an imported unit, it is logically as if the children of + that unit are siblings of the other children. So don't do + a full recursion into the imported unit, but just walk the + children in place before moving to the next real child. */ + while (INTUSE(dwarf_tag) (&child.die) == DW_TAG_imported_unit) { - case match: - case match_inline: - case walk: - if (INTUSE(dwarf_haschildren) (&child.die)) + Dwarf_Die orig_child_die = child.die; + Dwarf_Attribute attr_mem; + Dwarf_Attribute *attr = INTUSE(dwarf_attr) (&child.die, + DW_AT_import, + &attr_mem); + if (INTUSE(dwarf_formref_die) (attr, &child.die) != NULL + && INTUSE(dwarf_child) (&child.die, &child.die) == 0) { - int result = recurse (); + int result = walk_children (); if (result != DWARF_CB_OK) return result; } - break; - - case imported: - { - /* This imports another compilation unit to appear - as part of this one, inside the current scope. - Recurse to search the referenced unit, but without - recording it as an inner scoping level. */ - - Dwarf_Attribute attr_mem; - Dwarf_Attribute *attr = INTUSE(dwarf_attr) (&child.die, - DW_AT_import, - &attr_mem); - if (INTUSE(dwarf_formref_die) (attr, &child.die) != NULL) - { - int result = recurse (); - if (result != DWARF_CB_OK) - return result; - } - } - break; - - default: - break; + + /* Any "real" children left? */ + if ((ret = INTUSE(dwarf_siblingof) (&orig_child_die, + &child.die)) != 0) + return ret < 0 ? -1 : 0; + }; + + child.prune = false; + + if (previsit != NULL) + { + int result = (*previsit) (depth + 1, &child, arg); + if (result != DWARF_CB_OK) + return result; } - if (postvisit != NULL) - { - int result = (*postvisit) (depth + 1, &child, arg); - if (result != DWARF_CB_OK) - return result; - } - } - while (INTUSE(dwarf_siblingof) (&child.die, &child.die) == 0); + if (!child.prune && may_have_scopes (&child.die) + && INTUSE(dwarf_haschildren) (&child.die)) + { + int result = recurse (); + if (result != DWARF_CB_OK) + return result; + } + + if (postvisit != NULL) + { + int result = (*postvisit) (depth + 1, &child, arg); + if (result != DWARF_CB_OK) + return result; + } + } + while ((ret = INTUSE(dwarf_siblingof) (&child.die, &child.die)) == 0); + + return ret < 0 ? -1 : 0; + } - return 0; + return walk_children (); } diff --git a/libdw/memory-access.h b/libdw/memory-access.h index 5773e5c..f41f783 100644 --- a/libdw/memory-access.h +++ b/libdw/memory-access.h @@ -1,5 +1,5 @@ /* Unaligned memory access functionality. - Copyright (C) 2000-2010 Red Hat, Inc. + Copyright (C) 2000-2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2001. @@ -37,90 +37,59 @@ /* Number decoding macros. See 7.6 Variable Length Data. */ -#define get_uleb128_step(var, addr, nth, break) \ - __b = *(addr)++; \ - var |= (uintmax_t) (__b & 0x7f) << (nth * 7); \ - if (likely ((__b & 0x80) == 0)) \ - break - -#define get_uleb128(var, addr) \ - do { \ - unsigned char __b; \ - var = 0; \ - get_uleb128_step (var, addr, 0, break); \ - var = __libdw_get_uleb128 (var, 1, &(addr)); \ - } while (0) +#define len_leb128(var) ((8 * sizeof (var) + 6) / 7) -#define get_uleb128_rest_return(var, i, addrp) \ +#define get_uleb128_step(var, addr, nth) \ do { \ - for (; i < 10; ++i) \ - { \ - get_uleb128_step (var, *addrp, i, return var); \ - } \ - /* Other implementations set VALUE to UINT_MAX in this \ - case. So we better do this as well. */ \ - return UINT64_MAX; \ + unsigned char __b = *(addr)++; \ + (var) |= (typeof (var)) (__b & 0x7f) << ((nth) * 7); \ + if (likely ((__b & 0x80) == 0)) \ + return (var); \ } while (0) -/* The signed case is similar, but we sign-extend the result. */ +static inline uint64_t +__libdw_get_uleb128 (const unsigned char **addrp) +{ + 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) + 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_sleb128_step(var, addr, nth, break) \ - __b = *(addr)++; \ - _v |= (uint64_t) (__b & 0x7f) << (nth * 7); \ - if (likely ((__b & 0x80) == 0)) \ - { \ - var = (_v << (64 - (nth * 7) - 7)) >> (64 - (nth * 7) - 7); \ - break; \ - } \ - else do {} while (0) +#define get_uleb128(var, addr) ((var) = __libdw_get_uleb128 (&(addr))) -#define get_sleb128(var, addr) \ - do { \ - unsigned char __b; \ - int64_t _v = 0; \ - get_sleb128_step (var, addr, 0, break); \ - var = __libdw_get_sleb128 (_v, 1, &(addr)); \ - } while (0) +/* The signed case is similar, but we sign-extend the result. */ -#define get_sleb128_rest_return(var, i, addrp) \ +#define get_sleb128_step(var, addr, nth) \ do { \ - for (; i < 9; ++i) \ + unsigned char __b = *(addr)++; \ + if (likely ((__b & 0x80) == 0)) \ { \ - get_sleb128_step (var, *addrp, i, return var); \ + struct { signed int i:7; } __s = { .i = __b }; \ + (var) |= (typeof (var)) __s.i * ((typeof (var)) 1 << ((nth) * 7)); \ + return (var); \ } \ - __b = *(*addrp)++; \ - if (likely ((__b & 0x80) == 0)) \ - return var | ((uint64_t) __b << 63); \ - else \ - /* Other implementations set VALUE to INT_MAX in this \ - case. So we better do this as well. */ \ - return INT64_MAX; \ + (var) |= (typeof (var)) (__b & 0x7f) << ((nth) * 7); \ } while (0) -#ifdef IS_LIBDW -extern uint64_t __libdw_get_uleb128 (uint64_t acc, unsigned int i, - const unsigned char **addrp) - internal_function attribute_hidden; -extern int64_t __libdw_get_sleb128 (int64_t acc, unsigned int i, - const unsigned char **addrp) - internal_function attribute_hidden; -#else -static inline uint64_t -__attribute__ ((unused)) -__libdw_get_uleb128 (uint64_t acc, unsigned int i, const unsigned char **addrp) -{ - unsigned char __b; - get_uleb128_rest_return (acc, i, addrp); -} static inline int64_t -__attribute__ ((unused)) -__libdw_get_sleb128 (int64_t acc, unsigned int i, const unsigned char **addrp) +__libdw_get_sleb128 (const unsigned char **addrp) { - unsigned char __b; - int64_t _v = acc; - get_sleb128_rest_return (acc, i, addrp); + int64_t acc = 0; + /* Unrolling 0 like uleb128 didn't prove to benefit optimization. */ + for (unsigned int i = 0; i < len_leb128 (acc); ++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; } -#endif + +#define get_sleb128(var, addr) ((var) = __libdw_get_sleb128 (&(addr))) /* We use simple memory access functions in case the hardware allows it. @@ -147,6 +116,8 @@ __libdw_get_sleb128 (int64_t acc, unsigned int i, const unsigned char **addrp) ? (int32_t) bswap_32 (*((const int32_t *) (Addr))) \ : *((const int32_t *) (Addr))) +# define read_8ubyte_unaligned_noncvt(Addr) \ + *((const uint64_t *) (Addr)) # define read_8ubyte_unaligned(Dbg, Addr) \ (unlikely ((Dbg)->other_byte_order) \ ? bswap_64 (*((const uint64_t *) (Addr))) \ @@ -223,6 +194,12 @@ read_4sbyte_unaligned_1 (bool other_byte_order, const void *p) } static inline uint64_t +read_8ubyte_unaligned_noncvt (const void *p) +{ + const union unaligned *up = p; + return up->u8; +} +static inline uint64_t read_8ubyte_unaligned_1 (bool other_byte_order, const void *p) { const union unaligned *up = p; diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog new file mode 100644 index 0000000..9f95ea8 --- /dev/null +++ b/libdwelf/ChangeLog @@ -0,0 +1,23 @@ +2014-04-30 Mark Wielaard + + * Makefile.am (AM_CPPFLAGS): Add libdwfl and libebl include dirs. + (libdwelf_a_SOURCES): Add dwelf_elf_gnu_build_id.c + * dwelf_elf_gnu_build_id.c: New file. Moved libdwfl function + __libdwfl_find_elf_build_id here. + * libdwelf.h (dwelf_elf_gnu_build_id): Declare new function. + * libdwelfP.h (dwelf_elf_gnu_build_id): Add internal declaration. + +2014-04-24 Florian Weimer + + * dwelf_dwarf_gnu_debugaltlink.c: New file. + * Makefile.am (libdwelf_a_SOURCES): Add it. + * libdwelf.h (dwelf_dwarf_gnu_debugaltlink): Declare new function. + * libdwelfP.h (dwelf_dwarf_gnu_debugaltlink): Add internal + declaration. + +2014-04-11 Mark Wielaard + + * Makefile.am: New file. + * libdwelf.h: Likewise. + * libdwelfP.h: Likewise. + * dwelf_elf_gnu_debuglink.c: Likewise. diff --git a/libdwelf/Makefile.am b/libdwelf/Makefile.am new file mode 100644 index 0000000..cd4b7dd --- /dev/null +++ b/libdwelf/Makefile.am @@ -0,0 +1,55 @@ +## Makefile.am for libdwelf library subdirectory in elfutils. +## +## Process this file with automake to create Makefile.in +## +## 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 . +## +include $(top_srcdir)/config/eu.am +AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libdw \ + -I$(srcdir)/../libdwfl -I$(srcdir)/../libebl +VERSION = 1 + +noinst_LIBRARIES = libdwelf.a libdwelf_pic.a + +pkginclude_HEADERS = libdwelf.h +noinst_HEADERS = libdwelfP.h + +libdwelf_a_SOURCES = dwelf_elf_gnu_debuglink.c dwelf_dwarf_gnu_debugaltlink.c \ + dwelf_elf_gnu_build_id.c + +libdwelf = $(libdw) + +libdw = ../libdw/libdw.so +libelf = ../libelf/libelf.so +libebl = ../libebl/libebl.a +libeu = ../lib/libeu.a + +libdwelf_pic_a_SOURCES = +am_libdwelf_pic_a_OBJECTS = $(libdwelf_a_SOURCES:.c=.os) + +CLEANFILES += $(am_libdwelf_pic_a_OBJECTS) diff --git a/libdwelf/Makefile.in b/libdwelf/Makefile.in new file mode 100644 index 0000000..45ff600 --- /dev/null +++ b/libdwelf/Makefile.in @@ -0,0 +1,655 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(noinst_HEADERS) $(pkginclude_HEADERS) ChangeLog +subdir = libdwelf +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +libdwelf_a_AR = $(AR) $(ARFLAGS) +libdwelf_a_LIBADD = +am_libdwelf_a_OBJECTS = dwelf_elf_gnu_debuglink.$(OBJEXT) \ + dwelf_dwarf_gnu_debugaltlink.$(OBJEXT) \ + dwelf_elf_gnu_build_id.$(OBJEXT) +libdwelf_a_OBJECTS = $(am_libdwelf_a_OBJECTS) +libdwelf_pic_a_AR = $(AR) $(ARFLAGS) +libdwelf_pic_a_LIBADD = +libdwelf_pic_a_OBJECTS = $(am_libdwelf_pic_a_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libdwelf_a_SOURCES) $(libdwelf_pic_a_SOURCES) +DIST_SOURCES = $(libdwelf_a_SOURCES) $(libdwelf_pic_a_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgincludedir)" +HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUGPRED = @DEBUGPRED@ +DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBEBL_SUBDIR = @LIBEBL_SUBDIR@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODVERSION = @MODVERSION@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +READELF = @READELF@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = 1 +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +base_cpu = @base_cpu@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +eu_version = @eu_version@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +zip_LIBS = @zip_LIBS@ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ + -I$(srcdir)/../libelf -I$(srcdir)/../libdw \ + -I$(srcdir)/../libdwfl -I$(srcdir)/../libebl +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ + $(if $($(*F)_no_Werror),,-Werror) \ + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ + $($(*F)_CFLAGS) + +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) +CLEANFILES = *.gcno *.gcda $(am_libdwelf_pic_a_OBJECTS) +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi +noinst_LIBRARIES = libdwelf.a libdwelf_pic.a +pkginclude_HEADERS = libdwelf.h +noinst_HEADERS = libdwelfP.h +libdwelf_a_SOURCES = dwelf_elf_gnu_debuglink.c dwelf_dwarf_gnu_debugaltlink.c \ + dwelf_elf_gnu_build_id.c + +libdwelf = $(libdw) +libdw = ../libdw/libdw.so +libelf = ../libelf/libelf.so +libebl = ../libebl/libebl.a +libeu = ../lib/libeu.a +libdwelf_pic_a_SOURCES = +am_libdwelf_pic_a_OBJECTS = $(libdwelf_a_SOURCES:.c=.os) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/eu.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits libdwelf/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits libdwelf/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(top_srcdir)/config/eu.am: + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +libdwelf.a: $(libdwelf_a_OBJECTS) $(libdwelf_a_DEPENDENCIES) $(EXTRA_libdwelf_a_DEPENDENCIES) + $(AM_V_at)-rm -f libdwelf.a + $(AM_V_AR)$(libdwelf_a_AR) libdwelf.a $(libdwelf_a_OBJECTS) $(libdwelf_a_LIBADD) + $(AM_V_at)$(RANLIB) libdwelf.a + +libdwelf_pic.a: $(libdwelf_pic_a_OBJECTS) $(libdwelf_pic_a_DEPENDENCIES) $(EXTRA_libdwelf_pic_a_DEPENDENCIES) + $(AM_V_at)-rm -f libdwelf_pic.a + $(AM_V_AR)$(libdwelf_pic_a_AR) libdwelf_pic.a $(libdwelf_pic_a_OBJECTS) $(libdwelf_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libdwelf_pic.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwelf_dwarf_gnu_debugaltlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwelf_elf_gnu_build_id.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwelf_elf_gnu_debuglink.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-pkgincludeHEADERS install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-pkgincludeHEADERS + + +%.os: %.c %.o +@AMDEP_TRUE@ if $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \ +@AMDEP_TRUE@ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \ +@AMDEP_TRUE@ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \ +@AMDEP_TRUE@ rm -f "$(DEPDIR)/$*.Tpo"; \ +@AMDEP_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@AMDEP_TRUE@ fi +@AMDEP_FALSE@ $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libdwelf/dwelf_dwarf_gnu_debugaltlink.c b/libdwelf/dwelf_dwarf_gnu_debugaltlink.c new file mode 100644 index 0000000..b8285d0 --- /dev/null +++ b/libdwelf/dwelf_dwarf_gnu_debugaltlink.c @@ -0,0 +1,62 @@ +/* Returns the file name and build ID stored in the .gnu_altdebuglink if found. + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "libdwelfP.h" + +ssize_t +dwelf_dwarf_gnu_debugaltlink (Dwarf *dwarf, + const char **name_p, + const void **build_idp) +{ + Elf_Data *data = dwarf->sectiondata[IDX_gnu_debugaltlink]; + if (data == NULL) + { + return 0; + } + + const void *ptr = memchr (data->d_buf, '\0', data->d_size); + if (ptr == NULL) + { + __libdw_seterrno (DWARF_E_INVALID_ELF); + return -1; + } + size_t build_id_len = data->d_size - (ptr - data->d_buf + 1); + if (build_id_len == 0 || (size_t) (ssize_t) build_id_len != build_id_len) + { + __libdw_seterrno (DWARF_E_INVALID_ELF); + return -1; + } + *name_p = data->d_buf; + *build_idp = ptr + 1; + return build_id_len; +} +INTDEF(dwelf_dwarf_gnu_debugaltlink) diff --git a/libdwelf/dwelf_elf_gnu_build_id.c b/libdwelf/dwelf_elf_gnu_build_id.c new file mode 100644 index 0000000..1ed501d --- /dev/null +++ b/libdwelf/dwelf_elf_gnu_build_id.c @@ -0,0 +1,147 @@ +/* Returns the build id if found in a NT_GNU_BUILD_ID note. + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "libdwelfP.h" +#include "libdwflP.h" + +#define NO_VADDR ((GElf_Addr) -1l) + +/* Defined here for reuse. The dwelf interface doesn't care about the + address of the note, but libdwfl does. */ +static int +find_elf_build_id (Dwfl_Module *mod, int e_type, Elf *elf, + const void **build_id_bits, GElf_Addr *build_id_elfaddr, + int *build_id_len) +{ + int check_notes (Elf_Data *data, GElf_Addr data_elfaddr) + { + size_t pos = 0; + GElf_Nhdr nhdr; + size_t name_pos; + size_t desc_pos; + while ((pos = gelf_getnote (data, pos, &nhdr, &name_pos, &desc_pos)) > 0) + if (nhdr.n_type == NT_GNU_BUILD_ID + && nhdr.n_namesz == sizeof "GNU" && !memcmp (data->d_buf + name_pos, + "GNU", sizeof "GNU")) + { + *build_id_bits = data->d_buf + desc_pos; + *build_id_elfaddr = (data_elfaddr == NO_VADDR + ? 0 : data_elfaddr + desc_pos); + *build_id_len = nhdr.n_descsz; + return 1; + } + return 0; + } + + size_t shstrndx = SHN_UNDEF; + int result = 0; + + Elf_Scn *scn = elf_nextscn (elf, NULL); + + if (scn == NULL) + { + /* No sections, have to look for phdrs. */ + size_t phnum; + if (unlikely (elf_getphdrnum (elf, &phnum) != 0)) + { + if (mod != NULL) + __libdwfl_seterrno (DWFL_E_LIBELF); + return -1; + } + for (size_t i = 0; result == 0 && i < phnum; ++i) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); + if (likely (phdr != NULL) && phdr->p_type == PT_NOTE) + result = check_notes (elf_getdata_rawchunk (elf, + phdr->p_offset, + phdr->p_filesz, + ELF_T_NHDR), + phdr->p_vaddr); + } + } + else + do + { + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + if (likely (shdr != NULL) && shdr->sh_type == SHT_NOTE) + { + /* Determine the right sh_addr in this module. */ + GElf_Addr vaddr = 0; + if (!(shdr->sh_flags & SHF_ALLOC)) + vaddr = NO_VADDR; + else if (mod == NULL || e_type != ET_REL) + vaddr = shdr->sh_addr; + else if (__libdwfl_relocate_value (mod, elf, &shstrndx, + elf_ndxscn (scn), &vaddr)) + vaddr = NO_VADDR; + result = check_notes (elf_getdata (scn, NULL), vaddr); + } + } + while (result == 0 && (scn = elf_nextscn (elf, scn)) != NULL); + + return result; +} + +int +internal_function +__libdwfl_find_elf_build_id (Dwfl_Module *mod, Elf *elf, + const void **build_id_bits, + GElf_Addr *build_id_elfaddr, int *build_id_len) +{ + GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (elf, &ehdr_mem); + if (unlikely (ehdr == NULL)) + { + __libdwfl_seterrno (DWFL_E_LIBELF); + return -1; + } + // MOD->E_TYPE is zero here. + assert (ehdr->e_type != ET_REL || mod != NULL); + + return find_elf_build_id (mod, ehdr->e_type, elf, + build_id_bits, build_id_elfaddr, build_id_len); +} + +ssize_t +dwelf_elf_gnu_build_id (Elf *elf, const void **build_idp) +{ + GElf_Addr build_id_elfaddr; + int build_id_len; + int result = find_elf_build_id (NULL, ET_NONE, elf, build_idp, + &build_id_elfaddr, &build_id_len); + if (result > 0) + return build_id_len; + + return result; +} +INTDEF(dwelf_elf_gnu_build_id) diff --git a/libdwelf/dwelf_elf_gnu_debuglink.c b/libdwelf/dwelf_elf_gnu_debuglink.c new file mode 100644 index 0000000..7b5fc93 --- /dev/null +++ b/libdwelf/dwelf_elf_gnu_debuglink.c @@ -0,0 +1,99 @@ +/* Returns the file name and crc stored in the .gnu_debuglink if found. + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "libdwelfP.h" + +const char * +dwelf_elf_gnu_debuglink (Elf *elf, GElf_Word *crc) +{ + size_t shstrndx; + if (elf_getshdrstrndx (elf, &shstrndx) < 0) + return NULL; + + Elf_Scn *scn = NULL; + while ((scn = elf_nextscn (elf, scn)) != NULL) + { + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + return NULL; + + const char *name = elf_strptr (elf, shstrndx, shdr->sh_name); + if (name == NULL) + return NULL; + + if (!strcmp (name, ".gnu_debuglink")) + break; + } + + if (scn == NULL) + return NULL; + + /* Found the .gnu_debuglink section. Extract its contents. */ + Elf_Data *rawdata = elf_rawdata (scn, NULL); + if (rawdata == NULL) + return NULL; + + /* The CRC comes after the zero-terminated file name, + (aligned up to 4 bytes) at the end of the section data. */ + if (rawdata->d_size <= sizeof *crc + || memchr (rawdata->d_buf, '\0', rawdata->d_size - sizeof *crc) == NULL) + return NULL; + + Elf_Data crcdata = + { + .d_type = ELF_T_WORD, + .d_buf = crc, + .d_size = sizeof *crc, + .d_version = EV_CURRENT, + }; + Elf_Data conv = + { + .d_type = ELF_T_WORD, + .d_buf = rawdata->d_buf + rawdata->d_size - sizeof *crc, + .d_size = sizeof *crc, + .d_version = EV_CURRENT, + }; + + GElf_Ehdr ehdr_mem; + GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); + if (ehdr == NULL) + return NULL; + + Elf_Data *d = gelf_xlatetom (elf, &crcdata, &conv, ehdr->e_ident[EI_DATA]); + if (d == NULL) + return NULL; + assert (d == &crcdata); + + return rawdata->d_buf; +} +INTDEF(dwelf_elf_gnu_debuglink) diff --git a/libdwelf/libdwelf.h b/libdwelf/libdwelf.h new file mode 100644 index 0000000..e16dc0f --- /dev/null +++ b/libdwelf/libdwelf.h @@ -0,0 +1,72 @@ +/* Interfaces for libdwelf. DWARF ELF Low-level Functions. + 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 . */ + +#ifndef _LIBDWELF_H +#define _LIBDWELF_H 1 + +#include "libdw.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DWARF ELF Low-level Functions (dwelf). + Functions starting with dwelf_elf will take a (libelf) Elf object as + first argument and might set elf_errno on error. Functions starting + with dwelf_dwarf will take a (libdw) Dwarf object as first argument + and might set dwarf_errno on error. */ + +/* Returns the name and the CRC32 of the separate debug file from the + .gnu_debuglink section if found in the ELF. Return NULL if the ELF + file didn't have a .gnu_debuglink section, had malformed data in the + section or some other error occured. */ +extern const char *dwelf_elf_gnu_debuglink (Elf *elf, GElf_Word *crc); + +/* Returns the name and build ID from the .gnu_debugaltlink section if + found in the ELF. On success, pointers to the name and build ID + are written to *NAMEP and *BUILDID_P, and the positive length of + the build ID is returned. Returns 0 if the ELF lacks a + .gnu_debugaltlink section. Returns -1 in case of malformed data or + other errors. */ +extern ssize_t dwelf_dwarf_gnu_debugaltlink (Dwarf *dwarf, + const char **namep, + const void **build_idp); + +/* Returns the build ID as found in a NT_GNU_BUILD_ID note from either + a SHT_NOTE section or from a PT_NOTE segment if the ELF file + doesn't contain any section headers. On success a pointer to the + build ID is written to *BUILDID_P, and the positive length of the + build ID is returned. Returns 0 if the ELF lacks a NT_GNU_BUILD_ID + note. Returns -1 in case of malformed data or other errors. */ +extern ssize_t dwelf_elf_gnu_build_id (Elf *elf, const void **build_idp); + +#ifdef __cplusplus +} +#endif + +#endif /* libdwelf.h */ diff --git a/libdwelf/libdwelfP.h b/libdwelf/libdwelfP.h new file mode 100644 index 0000000..d83c759 --- /dev/null +++ b/libdwelf/libdwelfP.h @@ -0,0 +1,42 @@ +/* Internal definitions for libdwelf. DWARF ELF Low-level Functions. + 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 . */ + +#ifndef _LIBDWELFP_H +#define _LIBDWELFP_H 1 + +#include +#include "../libdw/libdwP.h" /* We need its INTDECLs. */ +#include +#include + +/* Avoid PLT entries. */ +INTDECL (dwelf_elf_gnu_debuglink) +INTDECL (dwelf_dwarf_gnu_debugaltlink) +INTDECL (dwelf_elf_gnu_build_id) + +#endif /* libdwelfP.h */ diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 36db7a3..c644ffe 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,815 @@ +2014-08-14 Mark Wielaard + + * linux-kernel-modules.c (check-suffix): Also TRY .ko.xz. + +2014-07-24 Jan Kratochvil + + 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 + + * linux-pid-attach.c: Make it build on non linux hosts. + +2014-06-17 Mark Wielaard + + * frame_unwind.c (handle_cfi): Use ebl_func_addr_mask. + * dwfl_module_getsym.c (__libdwfl_getsym): Likewise. + +2014-06-15 Mark Wielaard + + * 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 + + * 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 + + * argp-std.c (parse_opt): Ignore errors from dwfl_core_file_attach + or dwfl_linux_proc_attach. + +2014-05-15 Mark Wielaard + + * linux-proc-maps.c (grovel_auxv): Close fd on error. + +2014-05-02 Mark Wielaard + + * dwfl_module_getdwarf: Remove ENABLE_DWZ ifdefs so find_debug_altlink + is always called. + +2014-05-01 Mark Wielaard + + * libdwflP.h (struct Dwfl_Module): Add alt, alt_fd and alt_elf fields. + (__libdwfl_open_mod_by_build_id): Renamed __libdwfl_open_by_build_id. + (__libdwfl_open_by_build_id): New declaration that takes an explicit + build-id. + * dwfl_build_id_find_debuginfo.c (dwfl_build_id_find_debuginfo): If + we already have the Dwarf then look for the alt dwz multi file by + build-id. + * dwfl_build_id_find_elf.c (__libdwfl_open_by_build_id): Add the + build-id we are looking for as argument. + (__libdwfl_open_mod_by_build_id): New function, calls + __libdwfl_open_by_build_id. + (dwfl_build_id_find_elf): Call __libdwfl_open_mod_by_build_id. + * dwfl_module.c (__libdwfl_module_free): Release alt, alt_elf and + close alt_fd if necessary. + * dwfl_module_getdwarf.c (__check_build_id): Removed. + (try_debugaltlink): Removed. + (open_debugaltlink): Removed. + (open_elf_file): First half of open_elf that just opens the elf + file but doesn't setup the load address. + (open_elf): Call open_elf_file. + (find_debug_altlink): New function. + (load_dw): Remove loading of dwz multifile. + (find_dw): Call find_debug_altlink. + * find-debuginfo.c (validate): Handle alt debug case using + dwelf_dwarf_gnu_debugaltlink and mod->alt_elf. + (find_debuginfo_in_path): Handle alt debug files possibly in .dwz + subdirs. + * linux-kernel-modules.c (try_kernel_name): Use fakemod.debug.name + to store name to find by dwfl_standard_find_debuginfo instead of + allocating an extra variable on stack. + +2014-04-30 Mark Wielaard + + * dwfl_module_build_id.c (__libdwfl_find_elf_build_id): Moved to + dwelf_elf_gnu_build_id.c. + (__libdwfl_find_build_id): Add assert to make sure mod is never NULL. + * dwfl_segment_report_module.c (dwfl_segment_report_module): Call + dwelf_elf_gnu_build_id directly instead of __libdwfl_find_build_id. + * dwfl_module_getdwarf.c (__check_build_id): Implement using + dwelf_elf_gnu_build_id. + +2014-04-15 Florian Weimer + + * dwfl_module_getdwarf.c (__check_build_id): Moved from libdw. + (try_debugaltlink): Likewise. + (open_debugaltlink): Likewise. + (load_dw): Locate alternate debug information using + dwelf_dwarf_gnu_debugaltlink and call open_debugaltlink. + +2014-04-11 Mark Wielaard + + * Makefile.am (AM_CPPFLAGS): Add libdwelf. + * libdwflP.h: Include libdwelfP.h. + * dwfl_module_getdwarf.c (find_debuglink): Moved to libdwelf. + (find_debuginfo): Use dwelf_elf_gnu_debuglink. + +2014-04-22 Mark Wielaard + + * frame_unwind.c (__libdwfl_frame_reg_get): Use uint64_t when + checking bits. + (__libdwfl_frame_reg_set): Likewise. + +2014-04-22 Kurt Roeckx + + * linux-pid-attach.c: Make linux only. + +2014-03-14 Mark Wielaard + + * Makefile.am: Remove !MUDFLAP and MUDFLAP conditions. + Remove libelf and libdw definitions when MUDFLAP is defined. + * argp-std.c (__libdwfl_argp_mudflap_options): Removed. + +2014-03-03 Mark Wielaard + + * elf-from-memory.c (elf_from_remote_memory): Keep track of + segments_end_mem. Pass memsz to first handle_segment pass. Only + extend contents_size and use shdrs if only file bits are in + segment. + +2014-03-11 Josh Stone + + * dwfl_module_getdwarf.c (open_elf): Only explicitly set + mod->e_type when processing the main ELF file. + +2014-03-04 Mark Wielaard + + * libdwflP.h (struct __libdwfl_pid_arg): Moved here and renamed from + linux-pid-attach.c (struct pid_arg). + (__libdwfl_get_pid_arg): New internal function declaration. + (__libdwfl_ptrace_attach): Likewise. + (__libdwfl_ptrace_detach): Likewise. + * dwfl_frame.c (dwfl_attach_state): Add "(deleted)" files to the + special exception modules that cannot be checked at this point. + * linux-pid-attach.c (struct pid_arg): Moved to libdwflP.h + (ptrace_attach): Renamed to... + (__libdwfl_ptrace_attach): New internal function. + (__libdwfl_ptrace_detach): Likewise. Extracted from ... + (pid_thread_detach): Call __libdwfl_ptrace_detach now. + (__libdwfl_get_pid_arg): New internal function. + * linux-proc-maps.c (dwfl_linux_proc_find_elf): Check if special + module name contains "(deleted)" and dwfl_pid gives an attached + pid. If pid is set and try to (re)use ptrace attach state of + process before reading memory. + +2014-03-03 Mark Wielaard + + * elf-from-memory.c (elf_from_remote_memory): Take pagesize as + argument. Free buffer when detecting bad elf. Check PT_LOAD + alignment requirements on first handle_segment pass. Calculate + loadbase, start and end of segment using pagesize, not p_align. + * linux-proc-maps.c (dwfl_linux_proc_find_elf): Provide pagesize + to elf_from_remote_memory. + +2014-02-26 Mark Wielaard + + * linux-proc-maps.c (proc_maps_report): Don't assert on bad input. + +2014-02-26 Mark Wielaard + + * elf-from-memory.c (elf_from_remote_memory): Check against p64 + p_type in case ELFCLASS64, not against p32 p_type. + +2014-01-17 Petr Machata + + * relocate.c (relocate_section): Use gelf_fsize instead of relying + on shdr->sh_entsize. + +2014-01-05 Mark Wielaard + + * frame_unwind.c (handle_cfi): Only skip resetting return register + if the regno is not the actual CIE return address register. + +2014-01-02 Mark Wielaard + + * linux-pid-attach.c (dwfl_linux_proc_attach): Use strtol, not atoi. + +2013-12-30 Mark Wielaard + + * argp-std.c (parse_opt): Call dwfl_linux_proc_attach and + dwfl_core_file_attach explicitly. + * core-file.c (dwfl_core_file_report): Don't call + __libdwfl_attach_state_for_core implicitly. + * dwfl_begin.c (dwfl_begin): Remove setting of process_attach_error. + * dwfl_frame.c (dwfl_pid): Set errno to DWFL_E_NO_ATTACH_STATE, not + process_attach_error. + (dwfl_getthreads): Likewise. + (getthread): Likewise. + * libdwfl.h (dwfl_core_file_report): Update documentation. + (dwfl_linux_proc_report): Likewise. + (dwfl_core_file_attach): New function declaration. + (dwfl_linux_proc_attach): Likewise. + * libdwflP.h (struct Dwfl): Remove process_attach_error. + (__libdwfl_attach_state_for_pid): Removed declaration. + (__libdwfl_attach_state_for_core): Likewise. + (dwfl_core_file_attach): New internal declaration. + (dwfl_linux_proc_attach): Likewise. + (attach_state_for_core): Renamed to... + (dwfl_core_file_attach): ...this. Change return type. + (__libdwfl_attach_state_for_core): Removed. + * linux-pid-attach.c (struct pid_arg): Add assume_ptrace_stopped. + (pid_set_initial_registers): Check assume_ptrace_stopped before + calling ptrace. + (pid_thread_detach): Likewise. + (__libdwfl_attach_state_for_pid): Renamed to... + (dwfl_linux_proc_attach): ...this. Adjust return type. + * linux-proc-maps.c (dwfl_linux_proc_report): Don't call + __libdwfl_attach_state_for_pid implicitly. + +2013-12-28 Mark Wielaard + + * linux-proc-maps.c (dwfl_linux_proc_find_elf): Don't return special + character device files, only regular files. + +2013-12-24 Mark Wielaard + + * linux-core-attach.c (core_next_thread): Check whether thread_argp + is NULL. Reset core_arg->thread_note_offset and malloc a thread_arg + in that case. Free thread_arg if there are no more threads. + +2013-12-23 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Free + build_id before returning early. + +2013-12-23 Mark Wielaard + + * linux-pid-attach.c (__libdwfl_attach_state_for_pid): Report actual + pid (thread group leader) to dwfl_attach_state. + +2013-12-21 Mark Wielaard + + * frame_unwind.c (handle_cfi): Track whether the return register + has been set and only allow it to be set once. + +2013-12-20 Mark Wielaard + + * dwfl_frame.c (one_arg): New struct. + (get_one_thread_cb): New function. + (dwfl_getthread): Likewise. + (one_thread): New struct. + (get_one_thread_frames_cb): New function. + (dwfl_getthread_frames): Likewise. + * libdwfl.h (Dwfl_Thread_Callbacks): Add get_thread function. + (dwfl_getthread_frames): Likewise. + * libdwflP.h (dwfl_getthread_frames): New internal function declaration. + * linux-core-attach.c (core_thread_callbacks): Initialize get_thread + to NULL. + * linux-pid-attach.c (pid_getthread): New function. + (pid_thread_callbacks): Initialize get_thread to pid_getthread. + +2013-12-20 Mark Wielaard + + * linux-kernel-modules.c (report_kernel_archive): Correct nested + asprintf result check for debug.a. + +2013-12-18 Mark Wielaard + + * derelocate.c (__libdwfl_find_section_ndx): New internal function. + * dwfl_module_addrname.c (dwfl_module_addrname): Use + dwfl_module_addrinfo. + * dwfl_module_addrsym.c (dwfl_module_addrsym_elf): Replace with... + (__libdwfl_addrsym): ...this. Use __libdwfl_getsym, use value + for comparisons, not st_value. Fill in off. Search for both value + and the (adjusted) sym.st_value when different. + (dwfl_module_addrsym): Implement using __libdwfl_addrsym. + (dwfl_module_addrinfo): New function. + * dwfl_module_getsym.c (dwfl_module_getsym_elf): Replace with... + (__libdwfl_getsym): ...this. Use ebl_resolve_sym_value if requested + and possible. Adjust sym->st_value only when requested. Fill in addr + if available. + (dwfl_module_getsym_info): New function. + (dwfl_module_getsym): Use __libdwfl_getsym. + * libdwfl.h (dwfl_module_getsym_elf): Removed. + (dwfl_module_getsym_info): New function declaration. + (dwfl_module_addrinfo): Likewise. + (dwfl_module_addrsym): Add documentation describing differences + with addrinfo variants. + (dwfl_module_addrsym_elf): Removed. + * libdwflP.h (__libdwfl_getsym): New internal function declaration. + (__libdwfl_addrsym): Likewise. + (__libdwfl_find_section_ndx): Likewise. + (dwfl_module_addrinfo): New internal declaration. + (dwfl_module_getsym_info): Likewise. + (dwfl_module_addrsym_elf): Removed. + (dwfl_module_getsym_elf): Likewise. + +2013-12-18 Jan Kratochvil + + * argp-std.c (offline_find_elf): Remove. + (offline_callbacks): Use dwfl_build_id_find_elf instead. + * dwfl_build_id_find_elf.c (dwfl_build_id_find_elf): Move here the code + removed above. + +2013-12-18 Jan Kratochvil + + unwinder: s390 and s390x + * dwfl_frame_pc.c (dwfl_frame_pc): Call ebl_normalize_pc. + * frame_unwind.c (new_unwound): New function from ... + (handle_cfi): ... here. Call it. + (setfunc, getfunc, readfunc): New functions. + (__libdwfl_frame_unwind): Call ebl_unwind with those functions. + * linux-core-attach.c (core_set_initial_registers): Always iterate + through the Ebl_Register_Location loop. Call + dwfl_thread_state_register_pc there. + +2013-12-17 Jan Kratochvil + + * frame_unwind.c (handle_cfi): Call ebl_dwarf_to_regno for RA. + +2013-12-17 Mark Wielaard + + * linux-pid-attach.c (pid_next_thread): Call rewinddir on first + traversal. + +2013-12-16 Mark Wielaard + + * libdwfl.h (dwfl_module_getsymtab_first_global): New function + definition. + * dwfl_module_getdwarf.c (dwfl_module_getsymtab_first_global): New + function. + * libdwflP.h (dwfl_module_getsymtab_first_global): New internal + function definition. + * dwfl_module_addrsym.c (dwfl_module_addrsym_elf): Use new function. + +2013-12-14 Mark Wielaard + + * dwfl_module.c (__libdwfl_module_free): Free mod->reloc_info if + allocated. Call dwarf_cfi_end on mod->eh_cfi if necessary. + * frame_unwind.c (handle_cfi): Free frame result from + dwarf_cfi_addrframe when done. + +2013-12-15 Jan Kratochvil + + unwinder: ppc and ppc64 + * frame_unwind.c (__libdwfl_frame_reg_get, __libdwfl_frame_reg_set): + Call ebl_dwarf_to_regno. + * linux-core-attach.c (core_set_initial_registers): Implement + pc_register support. + * linux-pid-attach.c (pid_thread_state_registers_cb): Implement + FIRSTREG -1. + +2013-11-30 Jan Kratochvil + + Introduce process_attach_error. + * dwfl_begin.c (dwfl_begin): Initialize process_attach_error. + * dwfl_frame.c (dwfl_pid, dwfl_getthreads): Use PROCESS_ATTACH_ERROR if + PROCESS is NULL. + * libdwflP.h (struct Dwfl): New field process_attach_error. + * linux-core-attach.c (__libdwfl_attach_state_for_core): Rename to ... + (attach_state_for_core): ... here, make it static, change return type, + no longer use __libdwfl_seterrno. + (__libdwfl_attach_state_for_core): New wrapper for it. + +2013-11-27 Mark Wielaard + + * dwfl_module_addrsym.c (dwfl_module_addrsym): Rename to and call... + (dwfl_module_addrsym_elf): this. Add elfp and biasp arguments, + keep track of symelf, addr_symelf, closest_elf and sizeless_elf + instead of tracking dwfl_files. + * dwfl_module_getsym.c (__libdwfl_module_getsym): Renamed to... + (dwfl_module_getsym_elf): ...this. Remove dwfl_file argument, add + new elfp and biasp arguments. Track elf instead of file. + (dwfl_module_getsym): Call dwfl_module_getsym_elf. + dwfl_module_info.c (dwfl_module_info): Pass elf to + dwfl_adjusted_st_value. + * libdwfl.h (dwfl_module_getsym): Document limitations of shndx. + (dwfl_module_getsym_elf): New function declaration. + (dwfl_module_addrsym_elf): Likewise. + * libdwflP.h (dwfl_module_addrsym_elf): INTDECL. + (dwfl_module_getsym_elf): Likewise. + (dwfl_adjusted_st_value): Take and check elf not dwfl_file. + (dwfl_deadjust_st_value): Likewise. + (__libdwfl_module_getsym): Removed. + * relocate.c (resolve_symbol): Pass elf to dwfl_adjusted_st_value. + +2013-11-21 Jan Kratochvil + + Fix non-build-id core files on build-id system. + * link_map.c (report_r_debug): Remove valid clearing if build-id cannot + be read from memory. + +2013-11-21 Jan Kratochvil + + * dwfl_segment_report_module.c (dwfl_segment_report_module): New + variable close_elf. Call __libdwfl_find_elf_build_id and compare the + content, if possible. + +2013-11-21 Jan Kratochvil + + link_map: Use proper bias, not l_addr. + * core-file.c (dynamic_vaddr_get): Rename to ... + (__libdwfl_dynamic_vaddr_get): ... here, make it global, + internal_function. + (dwfl_core_file_report): Update name in the caller. + * libdwflP.h (__libdwfl_dynamic_vaddr_get): New declaration. + * link_map.c (report_r_debug): New variable elf_dynamic_vaddr. Call + __libdwfl_dynamic_vaddr_get for it. Remove L_ADDR FIXME comment. + Use ELF_DYNAMIC_VADDR instead of L_ADDR. + +2013-11-19 Jan Kratochvil + + Compatibility with older kernels such as RHEL-6. + * linux-pid-attach.c (struct pid_arg): New field tid_was_stopped. + (ptrace_attach): New parameter tid_was_stoppedp. Set it. + (pid_set_initial_registers): Pass tid_was_stopped. + (pid_thread_detach): Use tid_was_stopped. + +2013-11-18 Josh Stone + + * dwfl_module_getdwarf.c (find_aux_address_sync): New function. + (find_aux_sym): Use it. + +2013-11-14 Jan Kratochvil + + Code cleanup: Remove const in prototype + * dwfl_frame_regs.c (dwfl_thread_state_registers): Remove const from + firstreg. + * libdwfl.h (dwfl_thread_state_registers): Likewise. + * linux-pid-attach.c (pid_thread_state_registers_cb): Likewise. + +2013-11-14 Jan Kratochvil + + Fix dwfl_attach_state machine->elf. + * dwfl_frame.c (dwfl_attach_state): Change parameter machine to elf. + Call ebl_openbackend instead of ebl_openbackend_machine. + * libdwfl.h (dwfl_attach_state): Change parameter machine to elf. + Update the function description. + * linux-core-attach.c (__libdwfl_attach_state_for_core): Pass CORE to + dwfl_attach_state. + * linux-pid-attach.c (__libdwfl_attach_state_for_pid): Pass NULL to + dwfl_attach_state. + +2013-11-06 Jan Kratochvil + + Provide __libdwfl_module_getsym to get dwfl_file *. + * dwfl_module_addrsym.c (dwfl_module_addrsym) (i_to_symfile): Remove. + (dwfl_module_addrsym) (search_table): New variable file. Use + __libdwfl_module_getsym. Use file. + * dwfl_module_getsym.c (dwfl_module_getsym): Rename to ... + (__libdwfl_module_getsym): ... here. Add parameter filep. Set it. + (dwfl_module_getsym): New wrapper. + * libdwflP.h (__libdwfl_module_getsym): New declaration. + +2013-11-13 Jan Kratochvil + + Fix dwfl_module_addrsym for minidebuginfo. + * dwfl_module_addrsym.c (dwfl_module_addrsym): New variable + addr_symfile. + (dwfl_module_addrsym) (same_section): Use it. + (dwfl_module_addrsym) (i_to_symfile): New function. + (dwfl_module_addrsym) (search_table): Use it. + +2013-11-07 Jan Kratochvil + Mark Wielaard + + * Makefile.am (libdwfl_a_SOURCES): Add dwfl_frame.c, frame_unwind.c, + dwfl_frame_pc.c, linux-pid-attach.c, linux-core-attach.c and + dwfl_frame_regs.c. + * core-file.c (dwfl_core_file_report): Call + __libdwfl_attach_state_for_core. + * dwfl_end.c (dwfl_end): Call __libdwfl_process_free. + * dwfl_frame.c: New file. + * frame_unwind.c: New file. + * dwfl_frame_pc.c: New file. + * linux-pid-attach.c: New file. + * linux-core-attach.c: New file. + * dwfl_frame_regs.c: New file. + * libdwfl.h (Dwfl_Thread, Dwfl_Frame): New typedefs. + (dwfl_core_file_report, dwfl_linux_proc_report): Extend comments. + (Dwfl_Thread_Callbacks): New definition. + (struct ebl, dwfl_attach_state, dwfl_pid, dwfl_thread_dwfl) + (dwfl_thread_tid, dwfl_frame_thread, dwfl_thread_state_registers) + (dwfl_thread_state_register_pc, dwfl_getthreads, dwfl_thread_getframes) + (dwfl_frame_pc): New declarations. + * libdwflP.h (Dwfl_Process): New typedef. + (LIBEBL_BAD, CORE_MISSING, INVALID_REGISTER, PROCESS_MEMORY_READ) + (PROCESS_NO_ARCH, PARSE_PROC, INVALID_DWARF, UNSUPPORTED_DWARF) + (NEXT_THREAD_FAIL, ATTACH_STATE_CONFLICT, NO_ATTACH_STATE, NO_UNWIND) + (INVALID_ARGUMENT): New DWFL_ERROR entries. + (struct Dwfl): New entry process. + (struct Dwfl_Process, struct Dwfl_Thread, struct Dwfl_Frame) + (__libdwfl_frame_reg_get, __libdwfl_frame_reg_set) + (__libdwfl_process_free, __libdwfl_frame_unwind) + (__libdwfl_attach_state_for_pid, __libdwfl_attach_state_for_core) + (__libdwfl_segment_start, __libdwfl_segment_end): New declarations. + (dwfl_attach_state, dwfl_pid, dwfl_thread_dwfl, dwfl_thread_tid) + (dwfl_frame_thread, dwfl_thread_state_registers) + (dwfl_thread_state_register_pc, dwfl_getthreads, dwfl_thread_getframes) + (dwfl_frame_pc): New INTDECL entries. + * linux-proc-maps.c (dwfl_linux_proc_report): Call + __libdwfl_attach_state_for_pid. + * segment.c (segment_start): Rename to ... + (__libdwfl_segment_start): ... here and make it internal_function. + (segment_end): Rename to ... + (__libdwfl_segment_end): ... here and make it internal_function. + (reify_segments, dwfl_report_segment): Rename them at the callers. + +2013-11-07 Jan Kratochvil + + * core-file.c (dwfl_core_file_report): Remove the use of MAX. + +2013-11-07 Jan Kratochvil + + * core-file.c (dwfl_core_file_report): Replaced variable sniffed by + retval. Fix one forgotten LISTED increase. + +2013-11-07 Jan Kratochvil + + Fix core files for re-prelink-ed files. + * core-file.c (dynamic_vaddr_get): New function. + (dwfl_core_file_report): New variable file_dynamic_vaddr. Call + dynamic_vaddr_get instead of using L_ADDR. + * libdwflP.h (struct r_debug_info_module): Remove field l_addr. + * link_map.c (report_r_debug): Do not initialize l_addr. + +2013-11-07 Jan Kratochvil + + Code cleanup. + * core-file.c (dwfl_core_file_report): Reindent block of code by + continue keyword. + +2013-10-30 Jan Kratochvil + + * argp-std.c (parse_opt): Use executable parameter of + dwfl_core_file_report. + * core-file.c (dwfl_core_file_report): Add parameter executable. Set + it to DWFL. Add NEW_VERSION for it. + (_compat_without_executable_dwfl_core_file_report): New. Twice. + * libdwfl.h (dwfl_core_file_report): Add parameter executable, update + the function comment. + +2013-10-15 Mark Wielaard + + * linux-proc-maps.c (proc_maps_report): Ignore non-absolute file + mappings. + (dwfl_linux_proc_find_elf): Don't abort, just return failure. + +2013-09-12 Mark Wielaard + + * cu.c (intern_cu): If dwarf_offdie fails free cu. + +2013-09-12 Mark Wielaard + + * linux-proc-maps.c (proc_maps_report): Don't fclose FILE in + bad_report. + +2013-09-12 Mark Wielaard + + * dwfl_module_getdwarf.c (find_symtab): Call elf_getdata with + aux_xndxscn, not xndxscn, for aux_symxndxdata. + +2013-08-25 Mark Wielaard + + * linux-kernel-modules.c (report_kernel): Pass add_p_vaddr as true + to dwfl_report_elf. + +2013-07-25 Jan Kratochvil + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check for + conflicts all the modules, not just the first one. Compare L_LD if it + is equal, not if it is in a module address range. + +2013-07-23 Jan Kratochvil + + * libdwflP.h (__libdwfl_elf_address_range): Add internal_function. + +2013-07-23 Jan Kratochvil + + * core-file.c (clear_r_debug_info): Close also ELF and FD. + (dwfl_core_file_report): Call __libdwfl_report_elf for + R_DEBUG_INFO.MODULE. + * dwfl_report_elf.c (__libdwfl_elf_address_range): New function from + code of ... + (__libdwfl_report_elf): ... this function. Call it. + * dwfl_segment_report_module.c: Include unistd.h. + (dwfl_segment_report_module): Use basename for MODULE->NAME. + Clear MODULE if it has no build-id and we have segment with build-id. + Ignore this segment only if MODULE still contains valid ELF. + * libdwflP.h (__libdwfl_elf_address_range): New declaration. + (struct r_debug_info_module): New fields fd, elf, l_addr, start, end + and disk_file_has_build_id. + (dwfl_link_map_report): Extend the comment. + * link_map.c (report_r_debug): Extend the comment. Always fill in new + r_debug_info_module. Initialize also the new r_debug_info_module + fields. Remove one FIXME comment. Call __libdwfl_elf_address_range + instead of __libdwfl_report_elf when R_DEBUG_INFO is not NULL. + +2013-07-19 Jan Kratochvil + + * libdwflP.h (__libdwfl_find_elf_build_id): Add internal_function. + +2013-07-02 Mark Wielaard + + * relocate.c (__libdwfl_relocate_value): Remove mod->e_type assert. + +2013-06-05 Mark Wielaard + + * link_map.c (report_r_debug): Always call release_buffer after + memory_callback succeeded reading build_id. + +2013-05-30 Jan Kratochvil + + * argp-std.c (parse_opt) core> e>: Set + executable_for_core before calling dwfl_core_file_report. + * core-file.c (clear_r_debug_info): New function. + (dwfl_core_file_report): Move raw segments reporting lower. New + variable r_debug_info, pass it to dwfl_segment_report_module. Call + clear_r_debug_info in the end. Return sum of LISTED and SNIFFED. + * dwfl_module_build_id.c (check_notes): Move into + __libdwfl_find_elf_build_id. + (__libdwfl_find_build_id): Rename to ... + (__libdwfl_find_elf_build_id): ... here. Add parameters build_id_bits, + build_id_elfaddr and build_id_len. Verify MOD vs. ELF. + (__libdwfl_find_elf_build_id) (check_notes): Remove parameters mod and + set, rename data_vaddr to data_elfaddr. Do not call found_build_id. + (__libdwfl_find_elf_build_id): Update the check_notes caller, do not + adjust its data_elfaddr parameter. + (__libdwfl_find_build_id): New wrapper of __libdwfl_find_elf_build_id. + * dwfl_segment_report_module.c (dwfl_segment_report_module): New + parameter r_debug_info. New variable name_is_final. Adjust addresses + according to R_DEBUG_INFO->MODULE. Check conflicts against DWFL. + Do not overwrite NAME by SONAME if NAME_IS_FINAL. + * libdwflP.h (__libdwfl_find_elf_build_id): New declaration. + (struct r_debug_info_module, struct r_debug_info): New definitions. + (dwfl_segment_report_module, dwfl_link_map_report): Add parameter + r_debug_info. + * link_map.c: Include fcntl.h. + (report_r_debug): Add parameter r_debug_info, describe it in the + function comment. Delete dwfl_addrmodule call and its dependent code. + Verify build-id before calling dwfl_report_elf, also supply + executable_for_core to it. Store r_debug_info->module info when + appropriate. + (dwfl_link_map_report): Add parameter r_debug_info. New variable + in_ok. Try to read IN from EXECUTABLE_FOR_CORE. Update report_r_debug + caller parameters. + +2013-04-30 Jan Kratochvil + + * dwfl_report_elf.c (__libdwfl_report_elf): Add parameter add_p_vaddr. + Set it to true for ET_EXEC and ET_CORE. Provide alternative + setup of START and BIAS if !ADD_P_VADDR. Set END from BIAS, not BASE. + (dwfl_report_elf): Add parameter add_p_vaddr. Pass it down. Add + NEW_VERSION. + (_compat_without_add_p_vaddr_dwfl_report_elf) : New, with + COMPAT_VERSION. + * libdwfl.h (dwfl_report_elf): Add parameter add_p_vaddr. Describe it. + * libdwflP.h (__libdwfl_report_elf): Add parameter add_p_vaddr. + * link_map.c (report_r_debug): Use true add_p_vaddr for dwfl_report_elf. + * linux-kernel-modules.c (report_kernel): Use false add_p_vaddr for + dwfl_report_elf. + * offline.c (process_elf): Use true add_p_vaddr for dwfl_report_elf. + +2013-04-27 Mark Wielaard + + * link_map.c: #include system.h. + +2013-04-26 Jan Kratochvil + + * link_map.c (BE32, BE64, LE32, LE64): Delete the definitions, move + them to lib/system.h. + +2013-04-24 Mark Wielaard + + * Makefile.am: Use AM_CPPFLAGS instead of INCLUDES. + +2013-03-20 Jan Kratochvil + + * dwfl_report_elf.c (__libdwfl_report_elf): Remove BASE aligning. + +2013-03-12 Mark Wielaard + + * dwfl_getsrclines.c (dwfl_getsrclines): Return 0 on success. + +2013-02-22 Mark Wielaard + + * open.c (__libdw_gunzip,__libdw_bunzip2,__libdw_unlzma): Define + as DWFL_E_BADELF when not used. + +2013-02-10 Mark Wielaard + + * argp-std.c (parse_opt): Use opt->core and opt->e explicitly in + failure messages When handling ARGP_KEY_SUCCESS because arg will + not have been set. + +2013-01-30 Jan Kratochvil + + * linux-proc-maps.c: Include system.h. + (PROCEXEFMT, get_pid_class): New. + (grovel_auxv): Detect 32-bit vs. 64-bit auxv, possibly call + get_pid_class. + +2013-01-23 Mark Wielaard + + * dwfl_module_getdwarf.c (find_aux_sym): Don't substract one + from aux_syments by default. + (find_symtab): Also succeed when only aux_symdata is found. + When no symtab is found always try to load auxiliary table. + (dwfl_module_getsymtab): Substract one from result when both + tables have symbols. + * dwfl_module_getsym.c (dwfl_module_getsym): Only skip auxiliary + zero entry when both tables have symbols. + * dwfl_module_addrsym.c (dwfl_module_addrsym): Only substract + one from first_global when both tables have symbols. + +2013-01-16 Mark Wielaard + + * libdwflP.h (struct Dwfl_Module): Add aux_sym, aux_symdata, + aux_syments, aux_symstrdata, aux_symxndxdata and aux_first_global. + (dwfl_adjusted_aux_sym_addr): New function. + (dwfl_deadjust_aux_sym_addr): Likewise. + (dwfl_adjusted_st_value): Take and check symfile argument. + (dwfl_deadjust_st_value): Likewise. + * dwfl_module_getdwarf.c (find_prelink_address_sync): Take and + use dwfl_file as argument to set address_sync. + (find_debuginfo): Call find_prelink_address_sync with debug file. + (find_aux_sym): New function. + (find_symtab): Use find_aux_sym if all we have is the dynsym table + and fill in aux DwflModule fields. + (dwfl_module_getsymtab): Return syments plus aux_syments. + (load_symtab): Always set first_global. + * dwfl_module_addrsym.c (dwfl_module_addrsym): Check symfile + when using same_section. Calculate first_global based on both + mod->first_global and mod->aux_first_global. + * dwfl_module.c (__libdwfl_module_free): Free aux_sym. + * dwfl_module_getsym.c (dwfl_module_getsym): Use auxsym table + to retrieve symbol and name if necessary, making sure all locals + from any table come before any globals. + * dwfl_module_info.c (dwfl_module_info): Call dwfl_adjusted_st_value + with symfile. + * relocate.c (resolve_symbol): Likewise. + +2013-01-07 Roland McGrath + + * link_map.c (auxv_format_probe): Handle unaligned 64-bit data, but + still assume the data is at least 32-bit aligned anyway. + (dwfl_link_map_report): Handle unaligned auxv data. + +2012-12-11 Mark Wielaard + + * linux-kernel-modules.c (report_kernel): Only free fname if + find_kernel_elf succeeds and allocates it. + (report_kernel_archive): Fix brackets around unlikely expression. + +2012-11-29 Jan Kratochvil + + * argp-std.c: Update Copyright year. + (offline_find_elf): New function. + (offline_callbacks): Use it for find_elf. + (struct parse_opt): New. + (parse_opt): New key ARGP_KEY_INIT. In other make hook struct + parse_opt pointer from former Dwfl pointer. Delay 'e and OPT_COREFILE + processing till ARGP_KEY_SUCCESS. Initialize state->input already from + ARGP_KEY_SUCCESS. Modify the cleanup in ARGP_KEY_ERROR. Make the + final state->input initialization optional. + * dwfl_end.c: Update Copyright year. + (dwfl_end): Free executable_for_core. + * libdwflP.h: Update Copyright year. + (struct Dwfl): New field executable_for_core. + +2012-11-20 Jan Kratochvil + + * dwfl_report_elf.c (__libdwfl_report_elf): Simplify START and BIAS + calculation. + +2012-10-17 Jan Kratochvil + + * dwfl_module_getdwarf.c (mod_verify_build_id): New function with code + from ... + (__libdwfl_getelf): ... here. Call it. + +2012-10-17 Jan Kratochvil + + * libdwfl.h (dwfl_module_getelf): Add __nonnull_attribute__. + +2012-10-10 Jan Kratochvil + + * dwfl_segment_report_module.c (dwfl_segment_report_module): + Initialize mod->MAIN_BIAS. + +2012-10-10 Jan Kratochvil + + * dwfl_module_addrsym.c (dwfl_module_addrsym): New function + binding_value. Use it for both zero and non-zero size symbols + comparisons. + +2012-10-01 Mark Wielaard + + * cu.c (cudie_offset): Don't use type_sig8, it might not be + initialized and these are always real CUs, never TUs. + +2012-10-01 Mark Wielaard + + * derelocate.c (find_section): Check next section exists before + accessing it. + 2012-08-01 Petr Machata * offline.c (process_archive_member): Ignore entry "/SYM64/". diff --git a/libdwfl/Makefile.am b/libdwfl/Makefile.am index 0ef4928..72c980b 100644 --- a/libdwfl/Makefile.am +++ b/libdwfl/Makefile.am @@ -2,7 +2,7 @@ ## ## Process this file with automake to create Makefile.in ## -## Copyright (C) 2005-2010 Red Hat, Inc. +## Copyright (C) 2005-2010, 2013 Red Hat, Inc. ## This file is part of elfutils. ## ## This file is free software; you can redistribute it and/or modify @@ -30,14 +30,12 @@ ## not, see . ## include $(top_srcdir)/config/eu.am -INCLUDES += -I$(srcdir) -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ - -I$(srcdir)/../libdw +AM_CPPFLAGS += -I$(srcdir) -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ + -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf VERSION = 1 noinst_LIBRARIES = libdwfl.a -if !MUDFLAP noinst_LIBRARIES += libdwfl_pic.a -endif pkginclude_HEADERS = libdwfl.h @@ -68,7 +66,9 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c dwfl_version.c \ dwfl_module_return_value_location.c \ dwfl_module_register_names.c \ dwfl_segment_report_module.c \ - link_map.c core-file.c open.c image-header.c + link_map.c core-file.c open.c image-header.c \ + dwfl_frame.c frame_unwind.c dwfl_frame_pc.c \ + linux-pid-attach.c linux-core-attach.c dwfl_frame_regs.c if ZLIB libdwfl_a_SOURCES += gzip.c @@ -80,22 +80,14 @@ if LZMA libdwfl_a_SOURCES += lzma.c endif -if MUDFLAP -libdwfl = libdwfl.a $(libdw) $(libebl) $(libelf) $(libeu) -libdw = ../libdw/libdw.a -libelf = ../libelf/libelf.a -else libdwfl = $(libdw) libdw = ../libdw/libdw.so libelf = ../libelf/libelf.so -endif libebl = ../libebl/libebl.a libeu = ../lib/libeu.a -if !MUDFLAP libdwfl_pic_a_SOURCES = am_libdwfl_pic_a_OBJECTS = $(libdwfl_a_SOURCES:.c=.os) -endif noinst_HEADERS = libdwflP.h diff --git a/libdwfl/Makefile.in b/libdwfl/Makefile.in index 99f4090..37ea652 100644 --- a/libdwfl/Makefile.in +++ b/libdwfl/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,6 +16,51 @@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -35,18 +79,16 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(noinst_HEADERS) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/config/eu.am ChangeLog -@MUDFLAP_TRUE@am__append_1 = -fmudflap -@MUDFLAP_FALSE@am__append_2 = libdwfl_pic.a -@ZLIB_TRUE@am__append_3 = gzip.c -@BZLIB_TRUE@am__append_4 = bzip2.c -@LZMA_TRUE@am__append_5 = lzma.c -@MUDFLAP_TRUE@am_libdwfl_pic_a_OBJECTS = +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(noinst_HEADERS) $(pkginclude_HEADERS) ChangeLog +@ZLIB_TRUE@am__append_1 = gzip.c +@BZLIB_TRUE@am__append_2 = bzip2.c +@LZMA_TRUE@am__append_3 = lzma.c subdir = libdwfl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -56,8 +98,11 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = libdwfl_a_AR = $(AR) $(ARFLAGS) libdwfl_a_LIBADD = am__libdwfl_a_SOURCES_DIST = dwfl_begin.c dwfl_end.c dwfl_error.c \ @@ -79,8 +124,9 @@ am__libdwfl_a_SOURCES_DIST = dwfl_begin.c dwfl_end.c dwfl_error.c \ dwfl_module_getsym.c dwfl_module_addrname.c \ dwfl_module_addrsym.c dwfl_module_return_value_location.c \ dwfl_module_register_names.c dwfl_segment_report_module.c \ - link_map.c core-file.c open.c image-header.c gzip.c bzip2.c \ - lzma.c + link_map.c core-file.c open.c image-header.c dwfl_frame.c \ + frame_unwind.c dwfl_frame_pc.c linux-pid-attach.c \ + linux-core-attach.c dwfl_frame_regs.c gzip.c bzip2.c lzma.c @ZLIB_TRUE@am__objects_1 = gzip.$(OBJEXT) @BZLIB_TRUE@am__objects_2 = bzip2.$(OBJEXT) @LZMA_TRUE@am__objects_3 = lzma.$(OBJEXT) @@ -114,21 +160,49 @@ am_libdwfl_a_OBJECTS = dwfl_begin.$(OBJEXT) dwfl_end.$(OBJEXT) \ dwfl_module_register_names.$(OBJEXT) \ dwfl_segment_report_module.$(OBJEXT) link_map.$(OBJEXT) \ core-file.$(OBJEXT) open.$(OBJEXT) image-header.$(OBJEXT) \ + dwfl_frame.$(OBJEXT) frame_unwind.$(OBJEXT) \ + dwfl_frame_pc.$(OBJEXT) linux-pid-attach.$(OBJEXT) \ + linux-core-attach.$(OBJEXT) dwfl_frame_regs.$(OBJEXT) \ $(am__objects_1) $(am__objects_2) $(am__objects_3) libdwfl_a_OBJECTS = $(am_libdwfl_a_OBJECTS) libdwfl_pic_a_AR = $(AR) $(ARFLAGS) libdwfl_pic_a_LIBADD = libdwfl_pic_a_OBJECTS = $(am_libdwfl_pic_a_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = SOURCES = $(libdwfl_a_SOURCES) $(libdwfl_pic_a_SOURCES) DIST_SOURCES = $(am__libdwfl_a_SOURCES_DIST) $(libdwfl_pic_a_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -158,18 +232,39 @@ am__uninstall_files_from_dir = { \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -178,10 +273,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -202,6 +300,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -212,6 +311,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -226,6 +326,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -275,22 +376,18 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. -I$(srcdir) \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. -I$(srcdir) \ -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ - -I$(srcdir)/../libdw -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ - $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) + -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ + $(if $($(*F)_no_Werror),,-Werror) \ + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ + $($(*F)_CFLAGS) +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda $(am_libdwfl_pic_a_OBJECTS) -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi -noinst_LIBRARIES = libdwfl.a $(am__append_2) +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi +noinst_LIBRARIES = libdwfl.a libdwfl_pic.a pkginclude_HEADERS = libdwfl.h libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c \ dwfl_version.c dwfl_module.c dwfl_report_elf.c relocate.c \ @@ -311,18 +408,17 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c \ dwfl_module_getsym.c dwfl_module_addrname.c \ dwfl_module_addrsym.c dwfl_module_return_value_location.c \ dwfl_module_register_names.c dwfl_segment_report_module.c \ - link_map.c core-file.c open.c image-header.c $(am__append_3) \ - $(am__append_4) $(am__append_5) -@MUDFLAP_FALSE@libdwfl = $(libdw) -@MUDFLAP_TRUE@libdwfl = libdwfl.a $(libdw) $(libebl) $(libelf) $(libeu) -@MUDFLAP_FALSE@libdw = ../libdw/libdw.so -@MUDFLAP_TRUE@libdw = ../libdw/libdw.a -@MUDFLAP_FALSE@libelf = ../libelf/libelf.so -@MUDFLAP_TRUE@libelf = ../libelf/libelf.a + link_map.c core-file.c open.c image-header.c dwfl_frame.c \ + frame_unwind.c dwfl_frame_pc.c linux-pid-attach.c \ + linux-core-attach.c dwfl_frame_regs.c $(am__append_1) \ + $(am__append_2) $(am__append_3) +libdwfl = $(libdw) +libdw = ../libdw/libdw.so +libelf = ../libelf/libelf.so libebl = ../libebl/libebl.a libeu = ../lib/libeu.a -@MUDFLAP_FALSE@libdwfl_pic_a_SOURCES = -@MUDFLAP_FALSE@am_libdwfl_pic_a_OBJECTS = $(libdwfl_a_SOURCES:.c=.os) +libdwfl_pic_a_SOURCES = +am_libdwfl_pic_a_OBJECTS = $(libdwfl_a_SOURCES:.c=.os) noinst_HEADERS = libdwflP.h all: all-am @@ -362,14 +458,16 @@ $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + libdwfl.a: $(libdwfl_a_OBJECTS) $(libdwfl_a_DEPENDENCIES) $(EXTRA_libdwfl_a_DEPENDENCIES) - -rm -f libdwfl.a - $(libdwfl_a_AR) libdwfl.a $(libdwfl_a_OBJECTS) $(libdwfl_a_LIBADD) - $(RANLIB) libdwfl.a + $(AM_V_at)-rm -f libdwfl.a + $(AM_V_AR)$(libdwfl_a_AR) libdwfl.a $(libdwfl_a_OBJECTS) $(libdwfl_a_LIBADD) + $(AM_V_at)$(RANLIB) libdwfl.a + libdwfl_pic.a: $(libdwfl_pic_a_OBJECTS) $(libdwfl_pic_a_DEPENDENCIES) $(EXTRA_libdwfl_pic_a_DEPENDENCIES) - -rm -f libdwfl_pic.a - $(libdwfl_pic_a_AR) libdwfl_pic.a $(libdwfl_pic_a_OBJECTS) $(libdwfl_pic_a_LIBADD) - $(RANLIB) libdwfl_pic.a + $(AM_V_at)-rm -f libdwfl_pic.a + $(AM_V_AR)$(libdwfl_pic_a_AR) libdwfl_pic.a $(libdwfl_pic_a_OBJECTS) $(libdwfl_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libdwfl_pic.a mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -392,6 +490,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_dwarf_line.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_end.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_frame.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_frame_pc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_frame_regs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_getdwarf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_getmodules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_getsrc.Po@am__quote@ @@ -425,13 +526,16 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl_version.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-from-memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find-debuginfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frame_unwind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/image-header.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdwfl_crc32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdwfl_crc32_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lines.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link_map.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux-core-attach.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux-kernel-modules.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux-pid-attach.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux-proc-maps.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lzma.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/offline.Po@am__quote@ @@ -440,22 +544,25 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/segment.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -471,26 +578,15 @@ uninstall-pkgincludeHEADERS: files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -502,15 +598,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -519,6 +611,21 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -662,18 +769,19 @@ uninstall-am: uninstall-pkgincludeHEADERS .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-pkgincludeHEADERS install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-pkgincludeHEADERS +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-pkgincludeHEADERS install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-pkgincludeHEADERS %.os: %.c %.o diff --git a/libdwfl/argp-std.c b/libdwfl/argp-std.c index 2ef4555..42b7e78 100644 --- a/libdwfl/argp-std.c +++ b/libdwfl/argp-std.c @@ -1,5 +1,5 @@ /* Standard argp argument parsers for tools using libdwfl. - Copyright (C) 2005-2010 Red Hat, Inc. + Copyright (C) 2005-2010, 2012 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -90,6 +90,16 @@ static const Dwfl_Callbacks kernel_callbacks = .section_address = INTUSE(dwfl_linux_kernel_module_section_address), }; +/* Structure held at state->HOOK. */ +struct parse_opt +{ + Dwfl *dwfl; + /* The -e|--executable parameter. */ + const char *e; + /* The --core parameter. */ + const char *core; +}; + static error_t parse_opt (int key, char *arg, struct argp_state *state) { @@ -111,152 +121,145 @@ parse_opt (int key, char *arg, struct argp_state *state) switch (key) { + case ARGP_KEY_INIT: + { + assert (state->hook == NULL); + struct parse_opt *opt = calloc (1, sizeof (*opt)); + if (opt == NULL) + failure (NULL, DWFL_E_ERRNO, "calloc"); + state->hook = opt; + } + break; + case OPT_DEBUGINFO: debuginfo_path = arg; break; case 'e': { - Dwfl *dwfl = state->hook; + struct parse_opt *opt = state->hook; + Dwfl *dwfl = opt->dwfl; if (dwfl == NULL) { dwfl = INTUSE(dwfl_begin) (&offline_callbacks); if (dwfl == NULL) return fail (dwfl, -1, arg); - state->hook = dwfl; + opt->dwfl = dwfl; /* Start at zero so if there is just one -e foo.so, the DSO is shown without address bias. */ dwfl->offline_next_address = 0; } - if (dwfl->callbacks == &offline_callbacks) - { - if (INTUSE(dwfl_report_offline) (dwfl, "", arg, -1) == NULL) - return fail (dwfl, -1, arg); - state->hook = dwfl; - } - else + if (dwfl->callbacks != &offline_callbacks) { toomany: argp_error (state, "%s", _("only one of -e, -p, -k, -K, or --core allowed")); return EINVAL; } + opt->e = arg; } break; case 'p': - if (state->hook == NULL) - { - Dwfl *dwfl = INTUSE(dwfl_begin) (&proc_callbacks); - int result = INTUSE(dwfl_linux_proc_report) (dwfl, atoi (arg)); - if (result != 0) - return fail (dwfl, result, arg); - state->hook = dwfl; - } - else - goto toomany; + { + struct parse_opt *opt = state->hook; + if (opt->dwfl == NULL) + { + Dwfl *dwfl = INTUSE(dwfl_begin) (&proc_callbacks); + int result = INTUSE(dwfl_linux_proc_report) (dwfl, atoi (arg)); + if (result != 0) + return fail (dwfl, result, arg); + + /* 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 + goto toomany; + } break; case 'M': - if (state->hook == NULL) - { - FILE *f = fopen (arg, "r"); - if (f == NULL) - nofile: - { - int code = errno; - argp_failure (state, EXIT_FAILURE, code, - "cannot open '%s'", arg); - return code; - } - Dwfl *dwfl = INTUSE(dwfl_begin) (&proc_callbacks); - int result = INTUSE(dwfl_linux_proc_maps_report) (dwfl, f); - fclose (f); - if (result != 0) - return fail (dwfl, result, arg); - state->hook = dwfl; - } - else - goto toomany; + { + struct parse_opt *opt = state->hook; + if (opt->dwfl == NULL) + { + FILE *f = fopen (arg, "r"); + if (f == NULL) + { + int code = errno; + argp_failure (state, EXIT_FAILURE, code, + "cannot open '%s'", arg); + return code; + } + Dwfl *dwfl = INTUSE(dwfl_begin) (&proc_callbacks); + int result = INTUSE(dwfl_linux_proc_maps_report) (dwfl, f); + fclose (f); + if (result != 0) + return fail (dwfl, result, arg); + opt->dwfl = dwfl; + } + else + goto toomany; + } break; case OPT_COREFILE: { - Dwfl *dwfl = state->hook; + struct parse_opt *opt = state->hook; + Dwfl *dwfl = opt->dwfl; if (dwfl == NULL) - state->hook = dwfl = INTUSE(dwfl_begin) (&offline_callbacks); + opt->dwfl = dwfl = INTUSE(dwfl_begin) (&offline_callbacks); /* Permit -e and --core together. */ else if (dwfl->callbacks != &offline_callbacks) goto toomany; - - int fd = open64 (arg, O_RDONLY); - if (fd < 0) - goto nofile; - - Elf *core; - Dwfl_Error error = __libdw_open_file (&fd, &core, true, false); - if (error != DWFL_E_NOERROR) - { - argp_failure (state, EXIT_FAILURE, 0, - _("cannot read ELF core file: %s"), - INTUSE(dwfl_errmsg) (error)); - return error == DWFL_E_ERRNO ? errno : EIO; - } - - int result = INTUSE(dwfl_core_file_report) (dwfl, core); - if (result < 0) - { - elf_end (core); - close (fd); - return fail (dwfl, result, arg); - } - - /* From now we leak FD and CORE. */ - - if (result == 0) - { - argp_failure (state, EXIT_FAILURE, 0, - _("No modules recognized in core file")); - return ENOENT; - } + opt->core = arg; } break; case 'k': - if (state->hook == NULL) - { - Dwfl *dwfl = INTUSE(dwfl_begin) (&kernel_callbacks); - int result = INTUSE(dwfl_linux_kernel_report_kernel) (dwfl); - if (result != 0) - return fail (dwfl, result, _("cannot load kernel symbols")); - result = INTUSE(dwfl_linux_kernel_report_modules) (dwfl); - if (result != 0) - /* Non-fatal to have no modules since we do have the kernel. */ - failure (dwfl, result, _("cannot find kernel modules")); - state->hook = dwfl; - } - else - goto toomany; + { + struct parse_opt *opt = state->hook; + if (opt->dwfl == NULL) + { + Dwfl *dwfl = INTUSE(dwfl_begin) (&kernel_callbacks); + int result = INTUSE(dwfl_linux_kernel_report_kernel) (dwfl); + if (result != 0) + return fail (dwfl, result, _("cannot load kernel symbols")); + result = INTUSE(dwfl_linux_kernel_report_modules) (dwfl); + if (result != 0) + /* Non-fatal to have no modules since we do have the kernel. */ + failure (dwfl, result, _("cannot find kernel modules")); + opt->dwfl = dwfl; + } + else + goto toomany; + } break; case 'K': - if (state->hook == NULL) - { - Dwfl *dwfl = INTUSE(dwfl_begin) (&offline_callbacks); - int result = INTUSE(dwfl_linux_kernel_report_offline) (dwfl, arg, - NULL); - if (result != 0) - return fail (dwfl, result, _("cannot find kernel or modules")); - state->hook = dwfl; - } - else - goto toomany; + { + struct parse_opt *opt = state->hook; + if (opt->dwfl == NULL) + { + Dwfl *dwfl = INTUSE(dwfl_begin) (&offline_callbacks); + int result = INTUSE(dwfl_linux_kernel_report_offline) (dwfl, arg, + NULL); + if (result != 0) + return fail (dwfl, result, _("cannot find kernel or modules")); + opt->dwfl = dwfl; + } + else + goto toomany; + } break; case ARGP_KEY_SUCCESS: { - Dwfl *dwfl = state->hook; + struct parse_opt *opt = state->hook; + Dwfl *dwfl = opt->dwfl; if (dwfl == NULL) { @@ -265,7 +268,54 @@ parse_opt (int key, char *arg, struct argp_state *state) dwfl = INTUSE(dwfl_begin) (&offline_callbacks); if (INTUSE(dwfl_report_offline) (dwfl, "", arg, -1) == NULL) return fail (dwfl, -1, arg); - state->hook = dwfl; + opt->dwfl = dwfl; + } + + if (opt->core) + { + int fd = open64 (opt->core, O_RDONLY); + if (fd < 0) + { + int code = errno; + argp_failure (state, EXIT_FAILURE, code, + "cannot open '%s'", opt->core); + return code; + } + + Elf *core; + Dwfl_Error error = __libdw_open_file (&fd, &core, true, false); + if (error != DWFL_E_NOERROR) + { + argp_failure (state, EXIT_FAILURE, 0, + _("cannot read ELF core file: %s"), + INTUSE(dwfl_errmsg) (error)); + return error == DWFL_E_ERRNO ? errno : EIO; + } + + int result = INTUSE(dwfl_core_file_report) (dwfl, core, opt->e); + if (result < 0) + { + elf_end (core); + close (fd); + return fail (dwfl, result, opt->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. */ + + if (result == 0) + { + argp_failure (state, EXIT_FAILURE, 0, + _("No modules recognized in core file")); + return ENOENT; + } + } + else if (opt->e) + { + if (INTUSE(dwfl_report_offline) (dwfl, "", opt->e, -1) == NULL) + return fail (dwfl, -1, opt->e); } /* One of the three flavors has done dwfl_begin and some reporting @@ -274,12 +324,22 @@ parse_opt (int key, char *arg, struct argp_state *state) int result = INTUSE(dwfl_report_end) (dwfl, NULL, NULL); assert (result == 0); + + /* Update the input all along, so a parent parser can see it. + As we free OPT the update below will be no longer active. */ + *(Dwfl **) state->input = dwfl; + free (opt); + state->hook = NULL; } break; case ARGP_KEY_ERROR: - dwfl_end (state->hook); - state->hook = NULL; + { + struct parse_opt *opt = state->hook; + dwfl_end (opt->dwfl); + free (opt); + state->hook = NULL; + } break; default: @@ -287,7 +347,10 @@ parse_opt (int key, char *arg, struct argp_state *state) } /* Update the input all along, so a parent parser can see it. */ - *(Dwfl **) state->input = state->hook; + struct parse_opt *opt = state->hook; + if (opt) + *(Dwfl **) state->input = opt->dwfl; + return 0; } @@ -299,15 +362,3 @@ dwfl_standard_argp (void) { return &libdwfl_argp; } - -#ifdef _MUDFLAP -/* In the absence of a mudflap wrapper for argp_parse, or a libc compiled - with -fmudflap, we'll see spurious errors for using the struct argp_state - on argp_parse's stack. */ - -void __attribute__ ((constructor)) -__libdwfl_argp_mudflap_options (void) -{ - __mf_set_options ("-heur-stack-bound"); -} -#endif diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index 1545ca8..4ce63c4 100644 --- a/libdwfl/core-file.c +++ b/libdwfl/core-file.c @@ -1,5 +1,5 @@ /* Core file handling. - Copyright (C) 2008-2010 Red Hat, Inc. + Copyright (C) 2008-2010, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -381,8 +381,46 @@ dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx, return true; } +/* Free the contents of R_DEBUG_INFO without the R_DEBUG_INFO memory itself. */ + +static void +clear_r_debug_info (struct r_debug_info *r_debug_info) +{ + while (r_debug_info->module != NULL) + { + struct r_debug_info_module *module = r_debug_info->module; + r_debug_info->module = module->next; + elf_end (module->elf); + if (module->fd != -1) + close (module->fd); + free (module); + } +} + +bool +internal_function +__libdwfl_dynamic_vaddr_get (Elf *elf, GElf_Addr *vaddrp) +{ + size_t phnum; + if (unlikely (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); + if (unlikely (phdr == NULL)) + return false; + if (phdr->p_type == PT_DYNAMIC) + { + *vaddrp = phdr->p_vaddr; + return true; + } + } + return false; +} + int -dwfl_core_file_report (Dwfl *dwfl, Elf *elf) +dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) { size_t phnum; if (unlikely (elf_getphdrnum (elf, &phnum) != 0)) @@ -391,32 +429,25 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf) return -1; } + free (dwfl->executable_for_core); + if (executable == NULL) + dwfl->executable_for_core = NULL; + else + { + dwfl->executable_for_core = strdup (executable); + if (dwfl->executable_for_core == NULL) + { + __libdwfl_seterrno (DWFL_E_NOMEM); + return -1; + } + } + /* First report each PT_LOAD segment. */ GElf_Phdr notes_phdr; int ndx = dwfl_report_core_segments (dwfl, elf, phnum, ¬es_phdr); if (unlikely (ndx <= 0)) return ndx; - /* Now sniff segment contents for modules. */ - int sniffed = 0; - ndx = 0; - do - { - int seg = dwfl_segment_report_module (dwfl, ndx, NULL, - &dwfl_elf_phdr_memory_callback, elf, - core_file_read_eagerly, elf); - if (unlikely (seg < 0)) - return seg; - if (seg > ndx) - { - ndx = seg; - ++sniffed; - } - else - ++ndx; - } - while (ndx < (int) phnum); - /* Next, we should follow the chain from DT_DEBUG. */ const void *auxv = NULL; @@ -451,13 +482,99 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf) /* Now we have NT_AUXV contents. From here on this processing could be used for a live process with auxv read from /proc. */ - int listed = dwfl_link_map_report (dwfl, auxv, auxv_size, - dwfl_elf_phdr_memory_callback, elf); + struct r_debug_info r_debug_info; + memset (&r_debug_info, 0, sizeof r_debug_info); + int retval = dwfl_link_map_report (dwfl, auxv, auxv_size, + dwfl_elf_phdr_memory_callback, elf, + &r_debug_info); + int listed = retval > 0 ? retval : 0; + + /* Now sniff segment contents for modules hinted by information gathered + from DT_DEBUG. */ + + ndx = 0; + do + { + int seg = dwfl_segment_report_module (dwfl, ndx, NULL, + &dwfl_elf_phdr_memory_callback, elf, + core_file_read_eagerly, elf, + &r_debug_info); + if (unlikely (seg < 0)) + { + clear_r_debug_info (&r_debug_info); + return seg; + } + if (seg > ndx) + { + ndx = seg; + ++listed; + } + else + ++ndx; + } + while (ndx < (int) phnum); + + /* Now report the modules from dwfl_link_map_report which were not filtered + out by dwfl_segment_report_module. */ + + Dwfl_Module **lastmodp = &dwfl->modulelist; + while (*lastmodp != NULL) + lastmodp = &(*lastmodp)->next; + for (struct r_debug_info_module *module = r_debug_info.module; + module != NULL; module = module->next) + { + if (module->elf == NULL) + continue; + GElf_Addr file_dynamic_vaddr; + if (! __libdwfl_dynamic_vaddr_get (module->elf, &file_dynamic_vaddr)) + continue; + Dwfl_Module *mod; + mod = __libdwfl_report_elf (dwfl, basename (module->name), module->name, + module->fd, module->elf, + module->l_ld - file_dynamic_vaddr, + true, true); + if (mod == NULL) + continue; + ++listed; + module->elf = NULL; + module->fd = -1; + /* Move this module to the end of the list, so that we end + up with a list in the same order as the link_map chain. */ + if (mod->next != NULL) + { + if (*lastmodp != mod) + { + lastmodp = &dwfl->modulelist; + while (*lastmodp != mod) + lastmodp = &(*lastmodp)->next; + } + *lastmodp = mod->next; + mod->next = NULL; + while (*lastmodp != NULL) + lastmodp = &(*lastmodp)->next; + *lastmodp = mod; + } + lastmodp = &mod->next; + } + + clear_r_debug_info (&r_debug_info); /* We return the number of modules we found if we found any. If we found none, we return -1 instead of 0 if there was an - error rather than just nothing found. If link_map handling - failed, we still have the sniffed modules. */ - return sniffed == 0 || listed > sniffed ? listed : sniffed; + error rather than just nothing found. */ + return listed > 0 ? listed : retval; } INTDEF (dwfl_core_file_report) +NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158) + +#ifdef SHARED +int _compat_without_executable_dwfl_core_file_report (Dwfl *dwfl, Elf *elf); +COMPAT_VERSION_NEWPROTO (dwfl_core_file_report, ELFUTILS_0.146, + without_executable) + +int +_compat_without_executable_dwfl_core_file_report (Dwfl *dwfl, Elf *elf) +{ + return dwfl_core_file_report (dwfl, elf, NULL); +} +#endif diff --git a/libdwfl/cu.c b/libdwfl/cu.c index 2e98568..40b0201 100644 --- a/libdwfl/cu.c +++ b/libdwfl/cu.c @@ -151,8 +151,12 @@ less_lazy (Dwfl_Module *mod) static inline Dwarf_Off cudie_offset (const struct dwfl_cu *cu) { + /* These are real CUs, so there never is a type_sig8. Note + initialization of dwkey.start and offset_size in intern_cu () + to see why this calculates the same value for both key and + die.cu search items. */ return DIE_OFFSET_FROM_CU_OFFSET (cu->die.cu->start, cu->die.cu->offset_size, - cu->die.cu->type_sig8 != 0); + 0); } static int @@ -200,7 +204,10 @@ intern_cu (Dwfl_Module *mod, Dwarf_Off cuoff, struct dwfl_cu **result) /* XXX use non-searching lookup */ Dwarf_Die *die = INTUSE(dwarf_offdie) (mod->dw, cuoff, &cu->die); if (die == NULL) - return DWFL_E_LIBDW; + { + free (cu); + return DWFL_E_LIBDW; + } assert (die == &cu->die); struct dwfl_cu **newvec = realloc (mod->cu, ((mod->ncu + 1) diff --git a/libdwfl/derelocate.c b/libdwfl/derelocate.c index e3fcba8..da67908 100644 --- a/libdwfl/derelocate.c +++ b/libdwfl/derelocate.c @@ -1,5 +1,5 @@ /* Recover relocatibility for addresses computed from debug information. - Copyright (C) 2005-2010 Red Hat, Inc. + Copyright (C) 2005-2010, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -317,7 +317,7 @@ find_section (Dwfl_Module *mod, Dwarf_Addr *addr) inside the next one. A section limit address can appear in line records. */ if (*addr == sections->refs[idx].end - && idx < sections->count + && idx + 1 < sections->count && *addr == sections->refs[idx + 1].start) ++idx; @@ -330,6 +330,17 @@ find_section (Dwfl_Module *mod, Dwarf_Addr *addr) return -1; } +size_t +internal_function +__libdwfl_find_section_ndx (Dwfl_Module *mod, Dwarf_Addr *addr) +{ + int idx = find_section (mod, addr); + if (unlikely (idx == -1)) + return SHN_UNDEF; + + return elf_ndxscn (mod->reloc_info->refs[idx].scn); +} + int dwfl_module_relocate_address (Dwfl_Module *mod, Dwarf_Addr *addr) { diff --git a/libdwfl/dwfl_build_id_find_debuginfo.c b/libdwfl/dwfl_build_id_find_debuginfo.c index a955735..f1c64bc 100644 --- a/libdwfl/dwfl_build_id_find_debuginfo.c +++ b/libdwfl/dwfl_build_id_find_debuginfo.c @@ -1,5 +1,5 @@ /* Find the debuginfo file for a module from its build ID. - 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 @@ -41,10 +41,61 @@ dwfl_build_id_find_debuginfo (Dwfl_Module *mod, char **debuginfo_file_name) { int fd = -1; + + /* Are we looking for a separate debug file for the main file or for + an alternate (dwz multi) debug file? Alternatively we could check + whether the dwbias == -1. */ + if (mod->dw != NULL) + { + const void *build_id; + const char *altname; + ssize_t build_id_len = INTUSE(dwelf_dwarf_gnu_debugaltlink) (mod->dw, + &altname, + &build_id); + if (build_id_len > 0) + fd = __libdwfl_open_by_build_id (mod, true, debuginfo_file_name, + build_id_len, build_id); + + if (fd >= 0) + { + /* We need to open an Elf handle on the file so we can check its + build ID note for validation. Backdoor the handle into the + module data structure since we had to open it early anyway. */ + Dwfl_Error error = __libdw_open_file (&fd, &mod->alt_elf, + true, false); + if (error != DWFL_E_NOERROR) + __libdwfl_seterrno (error); + else + { + const void *alt_build_id; + ssize_t alt_len = INTUSE(dwelf_elf_gnu_build_id) (mod->alt_elf, + &alt_build_id); + if (alt_len > 0 && alt_len == build_id_len + && memcmp (build_id, alt_build_id, alt_len) == 0) + return fd; + else + { + /* A mismatch! */ + elf_end (mod->alt_elf); + mod->alt_elf = NULL; + close (fd); + fd = -1; + } + free (*debuginfo_file_name); + *debuginfo_file_name = NULL; + errno = 0; + } + } + return fd; + } + + /* We don't even have the Dwarf yet and it isn't in the main file. + Try to find separate debug file now using the module build id. */ const unsigned char *bits; GElf_Addr vaddr; + if (INTUSE(dwfl_module_build_id) (mod, &bits, &vaddr) > 0) - fd = __libdwfl_open_by_build_id (mod, true, debuginfo_file_name); + fd = __libdwfl_open_mod_by_build_id (mod, true, debuginfo_file_name); if (fd >= 0) { /* We need to open an Elf handle on the file so we can check its diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c index 9272c1f..1555008 100644 --- a/libdwfl/dwfl_build_id_find_elf.c +++ b/libdwfl/dwfl_build_id_find_elf.c @@ -1,5 +1,5 @@ /* Find an ELF file for a module from its build ID. - Copyright (C) 2007-2010 Red Hat, Inc. + Copyright (C) 2007-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -34,17 +34,9 @@ int internal_function -__libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name) +__libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name, + const size_t id_len, const uint8_t *id) { - /* If *FILE_NAME was primed into the module, leave it there - as the fallback when we have nothing to offer. */ - errno = 0; - if (mod->build_id_len <= 0) - return -1; - - const size_t id_len = mod->build_id_len; - const uint8_t *id = mod->build_id_bits; - /* Search debuginfo_path directories' .build-id/ subdirectories. */ char id_name[sizeof "/.build-id/" + 1 + id_len * 2 + sizeof ".debug" - 1]; @@ -109,6 +101,22 @@ __libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name) } int +internal_function +__libdwfl_open_mod_by_build_id (Dwfl_Module *mod, bool debug, char **file_name) +{ + /* If *FILE_NAME was primed into the module, leave it there + as the fallback when we have nothing to offer. */ + errno = 0; + if (mod->build_id_len <= 0) + return -1; + + const size_t id_len = mod->build_id_len; + const uint8_t *id = mod->build_id_bits; + + return __libdwfl_open_by_build_id (mod, debug, file_name, id_len, id); +} + +int dwfl_build_id_find_elf (Dwfl_Module *mod, void **userdata __attribute__ ((unused)), const char *modname __attribute__ ((unused)), @@ -116,7 +124,24 @@ dwfl_build_id_find_elf (Dwfl_Module *mod, char **file_name, Elf **elfp) { *elfp = NULL; - int fd = __libdwfl_open_by_build_id (mod, false, file_name); + if (modname != NULL && mod->dwfl->executable_for_core != NULL + && (strcmp (modname, "[exe]") == 0 || strcmp (modname, "[pie]") == 0)) + { + /* 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). */ + int fd = open64 (mod->dwfl->executable_for_core, O_RDONLY); + if (fd >= 0) + { + *file_name = strdup (mod->dwfl->executable_for_core); + if (*file_name != NULL) + return fd; + else + close (fd); + } + } + int fd = __libdwfl_open_mod_by_build_id (mod, false, file_name); if (fd >= 0) { Dwfl_Error error = __libdw_open_file (&fd, elfp, true, false); diff --git a/libdwfl/dwfl_end.c b/libdwfl/dwfl_end.c index fd38e0f..33cae48 100644 --- a/libdwfl/dwfl_end.c +++ b/libdwfl/dwfl_end.c @@ -1,5 +1,5 @@ /* Finish a session using libdwfl. - Copyright (C) 2005, 2008 Red Hat, Inc. + Copyright (C) 2005, 2008, 2012-2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -34,6 +34,9 @@ dwfl_end (Dwfl *dwfl) if (dwfl == NULL) return; + if (dwfl->process) + __libdwfl_process_free (dwfl->process); + free (dwfl->lookup_addr); free (dwfl->lookup_module); free (dwfl->lookup_segndx); @@ -46,5 +49,6 @@ dwfl_end (Dwfl *dwfl) __libdwfl_module_free (dead); } + free (dwfl->executable_for_core); free (dwfl); } diff --git a/libdwfl/dwfl_frame.c b/libdwfl/dwfl_frame.c new file mode 100644 index 0000000..f6f86c0 --- /dev/null +++ b/libdwfl/dwfl_frame.c @@ -0,0 +1,474 @@ +/* Get Dwarf Frame state for target PID or core file. + 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 + 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 . */ + +#include "libdwflP.h" +#include +#include + +/* Set STATE->pc_set from STATE->regs according to the backend. Return true on + success, false on error. */ +static bool +state_fetch_pc (Dwfl_Frame *state) +{ + switch (state->pc_state) + { + case DWFL_FRAME_STATE_PC_SET: + return true; + case DWFL_FRAME_STATE_PC_UNDEFINED: + abort (); + case DWFL_FRAME_STATE_ERROR: + { + Ebl *ebl = state->thread->process->ebl; + Dwarf_CIE abi_info; + if (ebl_abi_cfi (ebl, &abi_info) != 0) + { + __libdwfl_seterrno (DWFL_E_LIBEBL); + return false; + } + unsigned ra = abi_info.return_address_register; + /* dwarf_frame_state_reg_is_set is not applied here. */ + if (ra >= ebl_frame_nregs (ebl)) + { + __libdwfl_seterrno (DWFL_E_LIBEBL_BAD); + return false; + } + state->pc = state->regs[ra]; + state->pc_state = DWFL_FRAME_STATE_PC_SET; + } + return true; + } + abort (); +} + +/* Do not call it on your own, to be used by thread_* functions only. */ + +static void +state_free (Dwfl_Frame *state) +{ + Dwfl_Thread *thread = state->thread; + assert (thread->unwound == state); + thread->unwound = state->unwound; + free (state); +} + +static void +thread_free_all_states (Dwfl_Thread *thread) +{ + while (thread->unwound) + state_free (thread->unwound); +} + +static Dwfl_Frame * +state_alloc (Dwfl_Thread *thread) +{ + assert (thread->unwound == NULL); + Ebl *ebl = thread->process->ebl; + size_t nregs = ebl_frame_nregs (ebl); + if (nregs == 0) + return NULL; + assert (nregs < sizeof (((Dwfl_Frame *) NULL)->regs_set) * 8); + Dwfl_Frame *state = malloc (sizeof (*state) + sizeof (*state->regs) * nregs); + if (state == NULL) + return NULL; + state->thread = thread; + state->signal_frame = false; + state->initial_frame = true; + state->pc_state = DWFL_FRAME_STATE_ERROR; + memset (state->regs_set, 0, sizeof (state->regs_set)); + thread->unwound = state; + state->unwound = NULL; + return state; +} + +void +internal_function +__libdwfl_process_free (Dwfl_Process *process) +{ + Dwfl *dwfl = process->dwfl; + if (process->callbacks->detach != NULL) + process->callbacks->detach (dwfl, process->callbacks_arg); + assert (dwfl->process == process); + dwfl->process = NULL; + if (process->ebl_close) + ebl_closebackend (process->ebl); + free (process); + dwfl->attacherr = DWFL_E_NOERROR; +} + +/* Allocate new Dwfl_Process for DWFL. */ +static void +process_alloc (Dwfl *dwfl) +{ + Dwfl_Process *process = malloc (sizeof (*process)); + if (process == NULL) + return; + process->dwfl = dwfl; + dwfl->process = process; +} + +bool +dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, + const Dwfl_Thread_Callbacks *thread_callbacks, void *arg) +{ + if (dwfl->process != NULL) + { + __libdwfl_seterrno (DWFL_E_ATTACH_STATE_CONFLICT); + return false; + } + + /* 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) + { + 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) + { + ebl = ebl_openbackend (elf); + ebl_close = true; + } + else + { + ebl = NULL; + for (Dwfl_Module *mod = dwfl->modulelist; mod != NULL; mod = mod->next) + { + /* Reading of the vDSO or (deleted) modules may fail as + /proc/PID/mem is unreadable without PTRACE_ATTACH and + we may not be PTRACE_ATTACH-ed now. MOD would not be + re-read later to unwind it when we are already + PTRACE_ATTACH-ed to PID. This happens when this function + is called from dwfl_linux_proc_attach with elf == NULL. + __libdwfl_module_getebl will call __libdwfl_getelf which + will call the find_elf callback. */ + if (strncmp (mod->name, "[vdso: ", 7) == 0 + || strcmp (strrchr (mod->name, ' ') ?: "", + " (deleted)") == 0) + continue; + Dwfl_Error error = __libdwfl_module_getebl (mod); + if (error != DWFL_E_NOERROR) + continue; + ebl = mod->ebl; + break; + } + ebl_close = false; + } + if (ebl == NULL) + { + /* Not identified EBL from any of the modules. */ + dwfl->attacherr = DWFL_E_PROCESS_NO_ARCH; + goto fail; + } + process_alloc (dwfl); + Dwfl_Process *process = dwfl->process; + if (process == NULL) + { + if (ebl_close) + ebl_closebackend (ebl); + dwfl->attacherr = DWFL_E_NOMEM; + goto fail; + } + process->ebl = ebl; + process->ebl_close = ebl_close; + process->pid = pid; + process->callbacks = thread_callbacks; + process->callbacks_arg = arg; + return true; +} +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); + return -1; + } + return dwfl->process->pid; +} +INTDEF(dwfl_pid) + +Dwfl * +dwfl_thread_dwfl (Dwfl_Thread *thread) +{ + return thread->process->dwfl; +} +INTDEF(dwfl_thread_dwfl) + +pid_t +dwfl_thread_tid (Dwfl_Thread *thread) +{ + return thread->tid; +} +INTDEF(dwfl_thread_tid) + +Dwfl_Thread * +dwfl_frame_thread (Dwfl_Frame *state) +{ + return state->thread; +} +INTDEF(dwfl_frame_thread) + +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) + { + __libdwfl_seterrno (DWFL_E_NO_ATTACH_STATE); + return -1; + } + + Dwfl_Thread thread; + thread.process = process; + thread.unwound = NULL; + thread.callbacks_arg = NULL; + for (;;) + { + thread.tid = process->callbacks->next_thread (dwfl, + process->callbacks_arg, + &thread.callbacks_arg); + if (thread.tid < 0) + { + Dwfl_Error saved_errno = dwfl_errno (); + thread_free_all_states (&thread); + __libdwfl_seterrno (saved_errno); + return -1; + } + if (thread.tid == 0) + { + thread_free_all_states (&thread); + __libdwfl_seterrno (DWFL_E_NOERROR); + return 0; + } + int err = callback (&thread, arg); + if (err != DWARF_CB_OK) + { + thread_free_all_states (&thread); + return err; + } + assert (thread.unwound == NULL); + } + /* NOTREACHED */ +} +INTDEF(dwfl_getthreads) + +struct one_arg +{ + pid_t tid; + bool seen; + int (*callback) (Dwfl_Thread *thread, void *arg); + void *arg; + int ret; +}; + +static int +get_one_thread_cb (Dwfl_Thread *thread, void *arg) +{ + struct one_arg *oa = (struct one_arg *) arg; + if (! oa->seen && INTUSE(dwfl_thread_tid) (thread) == oa->tid) + { + oa->seen = true; + oa->ret = oa->callback (thread, oa->arg); + return DWARF_CB_ABORT; + } + + return DWARF_CB_OK; +} + +/* Note not currently exported, will be when there are more Dwfl_Thread + properties to query. Use dwfl_getthread_frames for now directly. */ +static int +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) + { + __libdwfl_seterrno (DWFL_E_NO_ATTACH_STATE); + return -1; + } + + if (process->callbacks->get_thread != NULL) + { + Dwfl_Thread thread; + thread.process = process; + thread.unwound = NULL; + thread.callbacks_arg = NULL; + + if (process->callbacks->get_thread (dwfl, tid, process->callbacks_arg, + &thread.callbacks_arg)) + { + int err; + thread.tid = tid; + err = callback (&thread, arg); + thread_free_all_states (&thread); + return err; + } + + return -1; + } + + struct one_arg oa = { .tid = tid, .callback = callback, + .arg = arg, .seen = false }; + int err = INTUSE(dwfl_getthreads) (dwfl, get_one_thread_cb, &oa); + + if (err == DWARF_CB_ABORT && oa.seen) + return oa.ret; + + if (err == DWARF_CB_OK && ! oa.seen) + { + errno = ESRCH; + __libdwfl_seterrno (DWFL_E_ERRNO); + return -1; + } + + return err; +} + +struct one_thread +{ + int (*callback) (Dwfl_Frame *frame, void *arg); + void *arg; +}; + +static int +get_one_thread_frames_cb (Dwfl_Thread *thread, void *arg) +{ + struct one_thread *ot = (struct one_thread *) arg; + return INTUSE(dwfl_thread_getframes) (thread, ot->callback, ot->arg); +} + +int +dwfl_getthread_frames (Dwfl *dwfl, pid_t tid, + int (*callback) (Dwfl_Frame *frame, void *arg), + void *arg) +{ + struct one_thread ot = { .callback = callback, .arg = arg }; + return getthread (dwfl, tid, get_one_thread_frames_cb, &ot); +} +INTDEF(dwfl_getthread_frames) + +int +dwfl_thread_getframes (Dwfl_Thread *thread, + int (*callback) (Dwfl_Frame *state, void *arg), + void *arg) +{ + if (thread->unwound != NULL) + { + /* We had to be called from inside CALLBACK. */ + __libdwfl_seterrno (DWFL_E_ATTACH_STATE_CONFLICT); + return -1; + } + Ebl *ebl = thread->process->ebl; + if (ebl_frame_nregs (ebl) == 0) + { + __libdwfl_seterrno (DWFL_E_NO_UNWIND); + return -1; + } + if (state_alloc (thread) == NULL) + { + __libdwfl_seterrno (DWFL_E_NOMEM); + return -1; + } + Dwfl_Process *process = thread->process; + if (! process->callbacks->set_initial_registers (thread, + thread->callbacks_arg)) + { + thread_free_all_states (thread); + return -1; + } + if (! state_fetch_pc (thread->unwound)) + { + if (process->callbacks->thread_detach) + process->callbacks->thread_detach (thread, thread->callbacks_arg); + thread_free_all_states (thread); + return -1; + } + + Dwfl_Frame *state; + do + { + state = thread->unwound; + int err = callback (state, arg); + if (err != DWARF_CB_OK) + { + if (process->callbacks->thread_detach) + process->callbacks->thread_detach (thread, thread->callbacks_arg); + thread_free_all_states (thread); + return err; + } + __libdwfl_frame_unwind (state); + /* The old frame is no longer needed. */ + state_free (thread->unwound); + state = thread->unwound; + } + while (state && state->pc_state == DWFL_FRAME_STATE_PC_SET); + + Dwfl_Error err = dwfl_errno (); + if (process->callbacks->thread_detach) + process->callbacks->thread_detach (thread, thread->callbacks_arg); + if (state == NULL || state->pc_state == DWFL_FRAME_STATE_ERROR) + { + thread_free_all_states (thread); + __libdwfl_seterrno (err); + return -1; + } + assert (state->pc_state == DWFL_FRAME_STATE_PC_UNDEFINED); + thread_free_all_states (thread); + return 0; +} +INTDEF(dwfl_thread_getframes) diff --git a/libdwfl/dwfl_frame_pc.c b/libdwfl/dwfl_frame_pc.c new file mode 100644 index 0000000..296c815 --- /dev/null +++ b/libdwfl/dwfl_frame_pc.c @@ -0,0 +1,64 @@ +/* Get return address register value for frame. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "libdwflP.h" + +bool +dwfl_frame_pc (Dwfl_Frame *state, Dwarf_Addr *pc, bool *isactivation) +{ + assert (state->pc_state == DWFL_FRAME_STATE_PC_SET); + *pc = state->pc; + ebl_normalize_pc (state->thread->process->ebl, pc); + if (isactivation) + { + /* Bottom frame? */ + if (state->initial_frame) + *isactivation = true; + /* *ISACTIVATION is logical union of whether current or previous frame + state is SIGNAL_FRAME. */ + else if (state->signal_frame) + *isactivation = true; + else + { + /* If the previous frame has unwound unsuccessfully just silently do + not consider it could be a SIGNAL_FRAME. */ + __libdwfl_frame_unwind (state); + if (state->unwound == NULL + || state->unwound->pc_state != DWFL_FRAME_STATE_PC_SET) + *isactivation = false; + else + *isactivation = state->unwound->signal_frame; + } + } + return true; +} +INTDEF (dwfl_frame_pc) diff --git a/libdwfl/dwfl_frame_regs.c b/libdwfl/dwfl_frame_regs.c new file mode 100644 index 0000000..10803fe --- /dev/null +++ b/libdwfl/dwfl_frame_regs.c @@ -0,0 +1,57 @@ +/* Get Dwarf Frame state from modules present in DWFL. + Copyright (C) 2013 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 . */ + +#include "libdwflP.h" + +bool +dwfl_thread_state_registers (Dwfl_Thread *thread, int firstreg, + unsigned nregs, const Dwarf_Word *regs) +{ + Dwfl_Frame *state = thread->unwound; + assert (state && state->unwound == NULL); + assert (state->initial_frame); + for (unsigned regno = firstreg; regno < firstreg + nregs; regno++) + if (! __libdwfl_frame_reg_set (state, regno, regs[regno - firstreg])) + { + __libdwfl_seterrno (DWFL_E_INVALID_REGISTER); + return false; + } + return true; +} +INTDEF(dwfl_thread_state_registers) + +void +dwfl_thread_state_register_pc (Dwfl_Thread *thread, Dwarf_Word pc) +{ + Dwfl_Frame *state = thread->unwound; + assert (state && state->unwound == NULL); + assert (state->initial_frame); + state->pc = pc; + state->pc_state = DWFL_FRAME_STATE_PC_SET; +} +INTDEF(dwfl_thread_state_register_pc) diff --git a/libdwfl/dwfl_getsrclines.c b/libdwfl/dwfl_getsrclines.c index cc8cb7c..bdfcf5c 100644 --- a/libdwfl/dwfl_getsrclines.c +++ b/libdwfl/dwfl_getsrclines.c @@ -1,5 +1,5 @@ /* Fetch source line information for CU. - Copyright (C) 2005 Red Hat, Inc. + Copyright (C) 2005, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -44,5 +44,5 @@ dwfl_getsrclines (Dwarf_Die *cudie, size_t *nlines) } *nlines = cu->die.cu->lines->nlines; - return -1; + return 0; } diff --git a/libdwfl/dwfl_module.c b/libdwfl/dwfl_module.c index e703d27..8efcfaa 100644 --- a/libdwfl/dwfl_module.c +++ b/libdwfl/dwfl_module.c @@ -1,5 +1,5 @@ /* Maintenance of module list in libdwfl. - Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc. + Copyright (C) 2005, 2006, 2007, 2008, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -71,7 +71,17 @@ __libdwfl_module_free (Dwfl_Module *mod) } if (mod->dw != NULL) - INTUSE(dwarf_end) (mod->dw); + { + INTUSE(dwarf_end) (mod->dw); + if (mod->alt != NULL) + { + INTUSE(dwarf_end) (mod->alt); + if (mod->alt_elf != NULL) + elf_end (mod->alt_elf); + if (mod->alt_fd != -1) + close (mod->alt_fd); + } + } if (mod->ebl != NULL) ebl_closebackend (mod->ebl); @@ -79,10 +89,17 @@ __libdwfl_module_free (Dwfl_Module *mod) if (mod->debug.elf != mod->main.elf) free_file (&mod->debug); free_file (&mod->main); + free_file (&mod->aux_sym); if (mod->build_id_bits != NULL) free (mod->build_id_bits); + if (mod->reloc_info != NULL) + free (mod->reloc_info); + + if (mod->eh_cfi != NULL) + dwarf_cfi_end (mod->eh_cfi); + free (mod->name); free (mod); } diff --git a/libdwfl/dwfl_module_addrname.c b/libdwfl/dwfl_module_addrname.c index 6ae0123..88a8139 100644 --- a/libdwfl/dwfl_module_addrname.c +++ b/libdwfl/dwfl_module_addrname.c @@ -1,5 +1,5 @@ /* Find debugging and symbol information for a module in libdwfl. - Copyright (C) 2005, 2006, 2007 Red Hat, Inc. + Copyright (C) 2005, 2006, 2007, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -31,6 +31,8 @@ const char * dwfl_module_addrname (Dwfl_Module *mod, GElf_Addr addr) { + GElf_Off off; GElf_Sym sym; - return INTUSE(dwfl_module_addrsym) (mod, addr, &sym, NULL); + return INTUSE(dwfl_module_addrinfo) (mod, addr, &off, &sym, + NULL, NULL, NULL); } diff --git a/libdwfl/dwfl_module_addrsym.c b/libdwfl/dwfl_module_addrsym.c index 4e0646e..d205832 100644 --- a/libdwfl/dwfl_module_addrsym.c +++ b/libdwfl/dwfl_module_addrsym.c @@ -1,5 +1,5 @@ /* Find debugging and symbol information for a module in libdwfl. - Copyright (C) 2005-2011 Red Hat, Inc. + Copyright (C) 2005-2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -32,8 +32,10 @@ Never returns symbols at addresses above ADDR. */ const char * -dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, - GElf_Sym *closest_sym, GElf_Word *shndxp) +internal_function +__libdwfl_addrsym (Dwfl_Module *mod, GElf_Addr addr, GElf_Off *off, + GElf_Sym *closest_sym, GElf_Word *shndxp, + Elf **elfp, Dwarf_Addr *biasp, bool adjust_st_value) { int syments = INTUSE(dwfl_module_getsymtab) (mod); if (syments < 0) @@ -41,19 +43,36 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, /* Return true iff we consider ADDR to lie in the same section as SYM. */ GElf_Word addr_shndx = SHN_UNDEF; - inline bool same_section (const GElf_Sym *sym, GElf_Word shndx) + Elf *addr_symelf = NULL; + inline bool same_section (GElf_Addr value, Elf *symelf, GElf_Word shndx) { /* For absolute symbols and the like, only match exactly. */ if (shndx >= SHN_LORESERVE) - return sym->st_value == addr; + return value == addr; + + /* If value might not be st_value, the shndx of the symbol might + not match the section of the value. Explicitly look both up. */ + if (! adjust_st_value) + { + Dwarf_Addr v; + if (addr_shndx == SHN_UNDEF) + { + v = addr; + addr_shndx = __libdwfl_find_section_ndx (mod, &v); + } + + v = value; + return addr_shndx == __libdwfl_find_section_ndx (mod, &v); + } /* Figure out what section ADDR lies in. */ - if (addr_shndx == SHN_UNDEF) + if (addr_shndx == SHN_UNDEF || addr_symelf != symelf) { - GElf_Addr mod_addr = dwfl_deadjust_st_value (mod, addr); + GElf_Addr mod_addr = dwfl_deadjust_st_value (mod, symelf, addr); Elf_Scn *scn = NULL; addr_shndx = SHN_ABS; - while ((scn = elf_nextscn (mod->symfile->elf, scn)) != NULL) + addr_symelf = symelf; + while ((scn = elf_nextscn (symelf, scn)) != NULL) { GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); @@ -67,113 +86,204 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, } } - return shndx == addr_shndx; + return shndx == addr_shndx && addr_symelf == symelf; } /* Keep track of the closest symbol we have seen so far. Here we store only symbols with nonzero st_size. */ const char *closest_name = NULL; + GElf_Addr closest_value = 0; GElf_Word closest_shndx = SHN_UNDEF; + Elf *closest_elf = NULL; /* Keep track of an eligible symbol with st_size == 0 as a fallback. */ const char *sizeless_name = NULL; GElf_Sym sizeless_sym = { 0, 0, 0, 0, 0, SHN_UNDEF }; + GElf_Addr sizeless_value = 0; GElf_Word sizeless_shndx = SHN_UNDEF; + Elf *sizeless_elf = NULL; /* Keep track of the lowest address a relevant sizeless symbol could have. */ GElf_Addr min_label = 0; + /* Try one symbol and associated value from the search table. */ + inline void try_sym_value (GElf_Addr value, GElf_Sym *sym, + const char *name, GElf_Word shndx, + Elf *elf, bool resolved) + { + /* Even if we don't choose this symbol, its existence excludes + any sizeless symbol (assembly label) that is below its upper + bound. */ + if (value + sym->st_size > min_label) + min_label = value + sym->st_size; + + if (sym->st_size == 0 || addr - value < sym->st_size) + { + /* Return GELF_ST_BIND as higher-is-better integer. */ + inline int binding_value (const GElf_Sym *symp) + { + switch (GELF_ST_BIND (symp->st_info)) + { + case STB_GLOBAL: + return 3; + case STB_WEAK: + return 2; + case STB_LOCAL: + return 1; + default: + return 0; + } + } + + /* This symbol is a better candidate than the current one + if it's closer to ADDR or is global when it was local. */ + if (closest_name == NULL + || closest_value < value + || binding_value (closest_sym) < binding_value (sym)) + { + if (sym->st_size != 0) + { + *closest_sym = *sym; + closest_value = value; + closest_shndx = shndx; + closest_elf = elf; + closest_name = name; + } + else if (closest_name == NULL + && value >= min_label + && same_section (value, + resolved ? mod->main.elf : elf, shndx)) + { + /* Handwritten assembly symbols sometimes have no + st_size. If no symbol with proper size includes + the address, we'll use the closest one that is in + the same section as ADDR. */ + sizeless_sym = *sym; + sizeless_value = value; + sizeless_shndx = shndx; + sizeless_elf = elf; + sizeless_name = name; + } + } + /* When the beginning of its range is no closer, + the end of its range might be. Otherwise follow + GELF_ST_BIND preference. If all are equal prefer + the first symbol found. */ + else if (sym->st_size != 0 + && closest_value == value + && ((closest_sym->st_size > sym->st_size + && (binding_value (closest_sym) + <= binding_value (sym))) + || (closest_sym->st_size >= sym->st_size + && (binding_value (closest_sym) + < binding_value (sym))))) + { + *closest_sym = *sym; + closest_value = value; + closest_shndx = shndx; + closest_elf = elf; + closest_name = name; + } + } + } + /* Look through the symbol table for a matching symbol. */ inline void search_table (int start, int end) { for (int i = start; i < end; ++i) { GElf_Sym sym; + GElf_Addr value; GElf_Word shndx; - const char *name = INTUSE(dwfl_module_getsym) (mod, i, &sym, &shndx); + Elf *elf; + bool resolved; + const char *name = __libdwfl_getsym (mod, i, &sym, &value, + &shndx, &elf, NULL, + &resolved, adjust_st_value); if (name != NULL && name[0] != '\0' && sym.st_shndx != SHN_UNDEF - && sym.st_value <= addr + && value <= addr && GELF_ST_TYPE (sym.st_info) != STT_SECTION && GELF_ST_TYPE (sym.st_info) != STT_FILE && GELF_ST_TYPE (sym.st_info) != STT_TLS) { - /* Even if we don't choose this symbol, its existence excludes - any sizeless symbol (assembly label) that is below its upper - bound. */ - if (sym.st_value + sym.st_size > min_label) - min_label = sym.st_value + sym.st_size; + try_sym_value (value, &sym, name, shndx, elf, resolved); - if (sym.st_size == 0 || addr - sym.st_value < sym.st_size) + /* If this is an addrinfo variant and the value could be + resolved then also try matching the (adjusted) st_value. */ + if (resolved && mod->e_type != ET_REL) { - /* This symbol is a better candidate than the current one - if it's closer to ADDR or is global when it was local. */ - if (closest_name == NULL - || closest_sym->st_value < sym.st_value - || (GELF_ST_BIND (closest_sym->st_info) - < GELF_ST_BIND (sym.st_info))) - { - if (sym.st_size != 0) - { - *closest_sym = sym; - closest_shndx = shndx; - closest_name = name; - } - else if (closest_name == NULL - && sym.st_value >= min_label - && same_section (&sym, shndx)) - { - /* Handwritten assembly symbols sometimes have no - st_size. If no symbol with proper size includes - the address, we'll use the closest one that is in - the same section as ADDR. */ - sizeless_sym = sym; - sizeless_shndx = shndx; - sizeless_name = name; - } - } - /* When the beginning of its range is no closer, - the end of its range might be. But do not - replace a global symbol with a local! */ - else if (sym.st_size != 0 - && closest_sym->st_value == sym.st_value - && closest_sym->st_size > sym.st_size - && (GELF_ST_BIND (closest_sym->st_info) - <= GELF_ST_BIND (sym.st_info))) - { - *closest_sym = sym; - closest_shndx = shndx; - closest_name = name; - } + GElf_Addr adjusted_st_value; + adjusted_st_value = dwfl_adjusted_st_value (mod, elf, + sym.st_value); + if (value != adjusted_st_value && adjusted_st_value <= addr) + try_sym_value (adjusted_st_value, &sym, name, shndx, + elf, false); } } } } - /* First go through global symbols. mod->first_global is setup by - dwfl_module_getsymtab to the index of the first global symbol in - the module's symbol table, or -1 when unknown. All symbols with - local binding come first in the symbol table, then all globals. */ - search_table (mod->first_global < 0 ? 1 : mod->first_global, syments); + /* First go through global symbols. mod->first_global and + mod->aux_first_global are setup by dwfl_module_getsymtab to the + index of the first global symbol in those symbol tables. Both + are non-zero when the table exist, except when there is only a + dynsym table loaded through phdrs, then first_global is zero and + there will be no auxiliary table. All symbols with local binding + come first in the symbol table, then all globals. The zeroth, + null entry, in the auxiliary table is skipped if there is a main + table. */ + int first_global = INTUSE (dwfl_module_getsymtab_first_global) (mod); + if (first_global < 0) + return NULL; + search_table (first_global == 0 ? 1 : first_global, syments); /* If we found nothing searching the global symbols, then try the locals. Unless we have a global sizeless symbol that matches exactly. */ - if (closest_name == NULL && mod->first_global > 1 - && (sizeless_name == NULL || sizeless_sym.st_value != addr)) - search_table (1, mod->first_global); + if (closest_name == NULL && first_global > 1 + && (sizeless_name == NULL || sizeless_value != addr)) + search_table (1, first_global); /* If we found no proper sized symbol to use, fall back to the best candidate sizeless symbol we found, if any. */ if (closest_name == NULL - && sizeless_name != NULL && sizeless_sym.st_value >= min_label) + && sizeless_name != NULL && sizeless_value >= min_label) { *closest_sym = sizeless_sym; + closest_value = sizeless_value; closest_shndx = sizeless_shndx; + closest_elf = sizeless_elf; closest_name = sizeless_name; } + *off = addr - closest_value; + if (shndxp != NULL) *shndxp = closest_shndx; + if (elfp != NULL) + *elfp = closest_elf; + if (biasp != NULL) + *biasp = dwfl_adjusted_st_value (mod, closest_elf, 0); return closest_name; } + + +const char * +dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + GElf_Sym *closest_sym, GElf_Word *shndxp) +{ + GElf_Off off; + return __libdwfl_addrsym (mod, addr, &off, closest_sym, shndxp, + NULL, NULL, true); +} INTDEF (dwfl_module_addrsym) + +const char +*dwfl_module_addrinfo (Dwfl_Module *mod, GElf_Addr address, + GElf_Off *offset, GElf_Sym *sym, + GElf_Word *shndxp, Elf **elfp, Dwarf_Addr *bias) +{ + return __libdwfl_addrsym (mod, address, offset, sym, shndxp, elfp, bias, + false); +} +INTDEF (dwfl_module_addrinfo) diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c index 660c733..350bbf8 100644 --- a/libdwfl/dwfl_module_build_id.c +++ b/libdwfl/dwfl_module_build_id.c @@ -1,5 +1,5 @@ /* Return build ID information for a module. - Copyright (C) 2007-2010 Red Hat, Inc. + Copyright (C) 2007-2010, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -52,82 +52,25 @@ found_build_id (Dwfl_Module *mod, bool set, return len; } -#define NO_VADDR ((GElf_Addr) -1l) - -static int -check_notes (Dwfl_Module *mod, bool set, Elf_Data *data, GElf_Addr data_vaddr) -{ - size_t pos = 0; - GElf_Nhdr nhdr; - size_t name_pos; - size_t desc_pos; - while ((pos = gelf_getnote (data, pos, &nhdr, &name_pos, &desc_pos)) > 0) - if (nhdr.n_type == NT_GNU_BUILD_ID - && nhdr.n_namesz == sizeof "GNU" && !memcmp (data->d_buf + name_pos, - "GNU", sizeof "GNU")) - return found_build_id (mod, set, - data->d_buf + desc_pos, nhdr.n_descsz, - data_vaddr == NO_VADDR ? 0 - : data_vaddr + desc_pos); - return 0; -} - int internal_function __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf) { - size_t shstrndx = SHN_UNDEF; - int result = 0; + const void *build_id_bits; + GElf_Addr build_id_elfaddr; + int build_id_len; - Elf_Scn *scn = elf_nextscn (elf, NULL); + /* For mod == NULL use dwelf_elf_gnu_build_id directly. */ + assert (mod != NULL); - if (scn == NULL) - { - /* No sections, have to look for phdrs. */ - GElf_Ehdr ehdr_mem; - GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); - size_t phnum; - if (unlikely (ehdr == NULL) - || unlikely (elf_getphdrnum (elf, &phnum) != 0)) - { - __libdwfl_seterrno (DWFL_E_LIBELF); - return -1; - } - for (size_t i = 0; result == 0 && i < phnum; ++i) - { - GElf_Phdr phdr_mem; - GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); - if (likely (phdr != NULL) && phdr->p_type == PT_NOTE) - result = check_notes (mod, set, - elf_getdata_rawchunk (elf, - phdr->p_offset, - phdr->p_filesz, - ELF_T_NHDR), - dwfl_adjusted_address (mod, phdr->p_vaddr)); - } - } - else - do - { - GElf_Shdr shdr_mem; - GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); - if (likely (shdr != NULL) && shdr->sh_type == SHT_NOTE) - { - /* Determine the right sh_addr in this module. */ - GElf_Addr vaddr = 0; - if (!(shdr->sh_flags & SHF_ALLOC)) - vaddr = NO_VADDR; - else if (mod->e_type != ET_REL) - vaddr = dwfl_adjusted_address (mod, shdr->sh_addr); - else if (__libdwfl_relocate_value (mod, elf, &shstrndx, - elf_ndxscn (scn), &vaddr)) - vaddr = NO_VADDR; - result = check_notes (mod, set, elf_getdata (scn, NULL), vaddr); - } - } - while (result == 0 && (scn = elf_nextscn (elf, scn)) != NULL); + int result = __libdwfl_find_elf_build_id (mod, elf, &build_id_bits, + &build_id_elfaddr, &build_id_len); + if (result <= 0) + return result; - return result; + GElf_Addr build_id_vaddr = build_id_elfaddr + (build_id_elfaddr != 0 + ? mod->main_bias : 0); + return found_build_id (mod, set, build_id_bits, build_id_len, build_id_vaddr); } int diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c index bbf9ff3..7259984 100644 --- a/libdwfl/dwfl_module_getdwarf.c +++ b/libdwfl/dwfl_module_getdwarf.c @@ -1,5 +1,5 @@ /* Find debugging and symbol information for a module in libdwfl. - Copyright (C) 2005-2011 Red Hat, Inc. + Copyright (C) 2005-2012, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -27,18 +27,17 @@ not, see . */ #include "libdwflP.h" +#include #include #include #include #include "../libdw/libdwP.h" /* DWARF_E_* values are here. */ +#include "../libelf/libelfP.h" - -/* Open libelf FILE->fd and compute the load base of ELF as loaded in MOD. - When we return success, FILE->elf and FILE->vaddr are set up. */ static inline Dwfl_Error -open_elf (Dwfl_Module *mod, struct dwfl_file *file) +open_elf_file (Elf **elf, int *fd, char **name) { - if (file->elf == NULL) + if (*elf == NULL) { /* CBFAIL uses errno if it's set, so clear it first in case we don't set it with an open failure below. */ @@ -46,25 +45,36 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file) /* If there was a pre-primed file name left that the callback left behind, try to open that file name. */ - if (file->fd < 0 && file->name != NULL) - file->fd = TEMP_FAILURE_RETRY (open64 (file->name, O_RDONLY)); + if (*fd < 0 && *name != NULL) + *fd = TEMP_FAILURE_RETRY (open64 (*name, O_RDONLY)); - if (file->fd < 0) + if (*fd < 0) return CBFAIL; - Dwfl_Error error = __libdw_open_file (&file->fd, &file->elf, true, false); - if (error != DWFL_E_NOERROR) - return error; + return __libdw_open_file (fd, elf, true, false); } - else if (unlikely (elf_kind (file->elf) != ELF_K_ELF)) + else if (unlikely (elf_kind (*elf) != ELF_K_ELF)) { - elf_end (file->elf); - file->elf = NULL; - close (file->fd); - file->fd = -1; + elf_end (*elf); + *elf = NULL; + close (*fd); + *fd = -1; return DWFL_E_BADELF; } + /* Elf file already open and looks fine. */ + return DWFL_E_NOERROR; +} + +/* Open libelf FILE->fd and compute the load base of ELF as loaded in MOD. + When we return success, FILE->elf and FILE->vaddr are set up. */ +static inline Dwfl_Error +open_elf (Dwfl_Module *mod, struct dwfl_file *file) +{ + Dwfl_Error error = open_elf_file (&file->elf, &file->fd, &file->name); + if (error != DWFL_E_NOERROR) + return error; + GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (file->elf, &ehdr_mem); if (ehdr == NULL) { @@ -76,7 +86,7 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file) return DWFL_E (LIBELF, elf_errno ()); } - if (mod->e_type != ET_REL) + if (ehdr->e_type != ET_REL) { /* In any non-ET_REL file, we compute the "synchronization address". @@ -130,15 +140,65 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file) } } - mod->e_type = ehdr->e_type; + /* We only want to set the module e_type explictly once, derived from + the main ELF file. (It might be changed for the kernel, because + that is special - see below.) open_elf is always called first for + the main ELF file, because both find_dw and find_symtab call + __libdwfl_getelf first to open the main file. So don't let debug + or aux files override the module e_type. The kernel heuristic + below could otherwise trigger for non-kernel/non-main files, since + their phdrs might not match the actual load addresses. */ + if (file == &mod->main) + { + mod->e_type = ehdr->e_type; - /* Relocatable Linux kernels are ET_EXEC but act like ET_DYN. */ - if (mod->e_type == ET_EXEC && file->vaddr != mod->low_addr) - mod->e_type = ET_DYN; + /* Relocatable Linux kernels are ET_EXEC but act like ET_DYN. */ + if (mod->e_type == ET_EXEC && file->vaddr != mod->low_addr) + mod->e_type = ET_DYN; + } + else + assert (mod->main.elf != NULL); return DWFL_E_NOERROR; } +/* We have an authoritative build ID for this module MOD, so don't use + a file by name that doesn't match that ID. */ +static void +mod_verify_build_id (Dwfl_Module *mod) +{ + assert (mod->build_id_len > 0); + + switch (__builtin_expect (__libdwfl_find_build_id (mod, false, + mod->main.elf), 2)) + { + case 2: + /* Build ID matches as it should. */ + return; + + case -1: /* ELF error. */ + mod->elferr = INTUSE(dwfl_errno) (); + break; + + case 0: /* File has no build ID note. */ + case 1: /* FIle has a build ID that does not match. */ + mod->elferr = DWFL_E_WRONG_ID_ELF; + break; + + default: + abort (); + } + + /* We get here when it was the right ELF file. Clear it out. */ + elf_end (mod->main.elf); + mod->main.elf = NULL; + if (mod->main.fd >= 0) + { + close (mod->main.fd); + mod->main.fd = -1; + } +} + /* Find the main ELF file for this module and open libelf on it. When we return success, MOD->main.elf and MOD->main.bias are set up. */ void @@ -166,105 +226,11 @@ __libdwfl_getelf (Dwfl_Module *mod) mod->build_id_len = 0; } else if (fallback) - { - /* We have an authoritative build ID for this module, so - don't use a file by name that doesn't match that ID. */ - - assert (mod->build_id_len > 0); - - switch (__builtin_expect (__libdwfl_find_build_id (mod, false, - mod->main.elf), 2)) - { - case 2: - /* Build ID matches as it should. */ - return; - - case -1: /* ELF error. */ - mod->elferr = INTUSE(dwfl_errno) (); - break; - - case 0: /* File has no build ID note. */ - case 1: /* FIle has a build ID that does not match. */ - mod->elferr = DWFL_E_WRONG_ID_ELF; - break; - - default: - abort (); - } - - /* We get here when it was the right ELF file. Clear it out. */ - elf_end (mod->main.elf); - mod->main.elf = NULL; - if (mod->main.fd >= 0) - { - close (mod->main.fd); - mod->main.fd = -1; - } - } + mod_verify_build_id (mod); mod->main_bias = mod->e_type == ET_REL ? 0 : mod->low_addr - mod->main.vaddr; } -/* Search an ELF file for a ".gnu_debuglink" section. */ -static const char * -find_debuglink (Elf *elf, GElf_Word *crc) -{ - size_t shstrndx; - if (elf_getshdrstrndx (elf, &shstrndx) < 0) - return NULL; - - Elf_Scn *scn = NULL; - while ((scn = elf_nextscn (elf, scn)) != NULL) - { - GElf_Shdr shdr_mem; - GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); - if (shdr == NULL) - return NULL; - - const char *name = elf_strptr (elf, shstrndx, shdr->sh_name); - if (name == NULL) - return NULL; - - if (!strcmp (name, ".gnu_debuglink")) - break; - } - - if (scn == NULL) - return NULL; - - /* Found the .gnu_debuglink section. Extract its contents. */ - Elf_Data *rawdata = elf_rawdata (scn, NULL); - if (rawdata == NULL) - return NULL; - - Elf_Data crcdata = - { - .d_type = ELF_T_WORD, - .d_buf = crc, - .d_size = sizeof *crc, - .d_version = EV_CURRENT, - }; - Elf_Data conv = - { - .d_type = ELF_T_WORD, - .d_buf = rawdata->d_buf + rawdata->d_size - sizeof *crc, - .d_size = sizeof *crc, - .d_version = EV_CURRENT, - }; - - GElf_Ehdr ehdr_mem; - GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); - if (ehdr == NULL) - return NULL; - - Elf_Data *d = gelf_xlatetom (elf, &crcdata, &conv, ehdr->e_ident[EI_DATA]); - if (d == NULL) - return NULL; - assert (d == &crcdata); - - return rawdata->d_buf; -} - /* If the main file might have been prelinked, then we need to discover the correct synchronization address between the main and debug files. Because of prelink's section juggling, we cannot rely @@ -282,7 +248,7 @@ find_debuglink (Elf *elf, GElf_Word *crc) looked like before prelink juggled them--when they still had a direct correspondence to the debug file. */ static Dwfl_Error -find_prelink_address_sync (Dwfl_Module *mod) +find_prelink_address_sync (Dwfl_Module *mod, struct dwfl_file *file) { /* The magic section is only identified by name. */ size_t shstrndx; @@ -509,8 +475,8 @@ find_prelink_address_sync (Dwfl_Module *mod) consider_shdr (undo_interp, shdr.s64[i].sh_type, shdr.s64[i].sh_flags, shdr.s64[i].sh_addr, shdr.s64[i].sh_size); - if (highest > mod->debug.vaddr) - mod->debug.address_sync = highest; + if (highest > file->vaddr) + file->address_sync = highest; else return DWFL_E_BAD_PRELINK; } @@ -527,7 +493,9 @@ find_debuginfo (Dwfl_Module *mod) return DWFL_E_NOERROR; GElf_Word debuglink_crc = 0; - const char *debuglink_file = find_debuglink (mod->main.elf, &debuglink_crc); + const char *debuglink_file; + debuglink_file = INTUSE(dwelf_elf_gnu_debuglink) (mod->main.elf, + &debuglink_crc); mod->debug.fd = (*mod->dwfl->callbacks->find_debuginfo) (MODCB_ARGS (mod), mod->main.name, @@ -536,10 +504,59 @@ find_debuginfo (Dwfl_Module *mod) &mod->debug.name); Dwfl_Error result = open_elf (mod, &mod->debug); if (result == DWFL_E_NOERROR && mod->debug.address_sync != 0) - result = find_prelink_address_sync (mod); + result = find_prelink_address_sync (mod, &mod->debug); return result; } +/* Try to find the alternative debug link for the given DWARF and set + it if found. Only called when mod->dw is already setup but still + might need an alternative (dwz multi) debug file. filename is either + the main or debug name from which the Dwarf was created. */ +static void +find_debug_altlink (Dwfl_Module *mod, const char *filename) +{ + assert (mod->dw != NULL); + + const char *altname; + const void *build_id; + ssize_t build_id_len = INTUSE(dwelf_dwarf_gnu_debugaltlink) (mod->dw, + &altname, + &build_id); + + if (build_id_len > 0) + { + /* We could store altfile in the module, but don't really need it. */ + char *altfile = NULL; + mod->alt_fd = (*mod->dwfl->callbacks->find_debuginfo) (MODCB_ARGS (mod), + filename, + altname, + 0, + &altfile); + + /* The (internal) callbacks might just set mod->alt_elf directly + because they open the Elf anyway for sanity checking. + Otherwise open either the given file name or use the fd + returned. */ + Dwfl_Error error = open_elf_file (&mod->alt_elf, &mod->alt_fd, + &altfile); + if (error == DWFL_E_NOERROR) + { + mod->alt = INTUSE(dwarf_begin_elf) (mod->alt_elf, + DWARF_C_READ, NULL); + if (mod->alt == NULL) + { + elf_end (mod->alt_elf); + mod->alt_elf = NULL; + close (mod->alt_fd); + mod->alt_fd = -1; + } + else + dwarf_setalt (mod->dw, mod->alt); + } + + free (altfile); /* See above, we don't really need it. */ + } +} /* Try to find a symbol table in FILE. Returns DWFL_E_NOERROR if a proper one is found. @@ -576,6 +593,7 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, *symfile = file; *strshndx = shdr->sh_link; *syments = shdr->sh_size / shdr->sh_entsize; + *first_global = shdr->sh_info; break; case SHT_SYMTAB_SHNDX: @@ -811,11 +829,157 @@ find_dynsym (Dwfl_Module *mod) } } + +#if USE_LZMA +/* Try to find the offset between the main file and .gnu_debugdata. */ +static bool +find_aux_address_sync (Dwfl_Module *mod) +{ + /* Don't trust the phdrs in the minisymtab elf file to be setup correctly. + The address_sync is equal to the main file it is embedded in at first. */ + mod->aux_sym.address_sync = mod->main.address_sync; + + /* Adjust address_sync for the difference in entry addresses, attempting to + account for ELF relocation changes after aux was split. */ + GElf_Ehdr ehdr_main, ehdr_aux; + if (unlikely (gelf_getehdr (mod->main.elf, &ehdr_main) == NULL) + || unlikely (gelf_getehdr (mod->aux_sym.elf, &ehdr_aux) == NULL)) + return false; + mod->aux_sym.address_sync += ehdr_aux.e_entry - ehdr_main.e_entry; + + /* The shdrs are setup OK to make find_prelink_address_sync () do the right + thing, which is possibly more reliable, but it needs .gnu.prelink_undo. */ + if (mod->aux_sym.address_sync != 0) + return find_prelink_address_sync (mod, &mod->aux_sym) == DWFL_E_NOERROR; + + return true; +} +#endif + +/* Try to find the auxiliary symbol table embedded in the main elf file + section .gnu_debugdata. Only matters if the symbol information comes + from the main file dynsym. No harm done if not found. */ +static void +find_aux_sym (Dwfl_Module *mod __attribute__ ((unused)), + Elf_Scn **aux_symscn __attribute__ ((unused)), + Elf_Scn **aux_xndxscn __attribute__ ((unused)), + GElf_Word *aux_strshndx __attribute__ ((unused))) +{ + /* Since a .gnu_debugdata section is compressed using lzma don't do + anything unless we have support for that. */ +#if USE_LZMA + Elf *elf = mod->main.elf; + + size_t shstrndx; + if (elf_getshdrstrndx (elf, &shstrndx) < 0) + return; + + Elf_Scn *scn = NULL; + while ((scn = elf_nextscn (elf, scn)) != NULL) + { + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + return; + + const char *name = elf_strptr (elf, shstrndx, shdr->sh_name); + if (name == NULL) + return; + + if (!strcmp (name, ".gnu_debugdata")) + break; + } + + if (scn == NULL) + return; + + /* Found the .gnu_debugdata section. Uncompress the lzma image and + turn it into an ELF image. */ + Elf_Data *rawdata = elf_rawdata (scn, NULL); + if (rawdata == NULL) + return; + + Dwfl_Error error; + void *buffer = NULL; + size_t size = 0; + error = __libdw_unlzma (-1, 0, rawdata->d_buf, rawdata->d_size, + &buffer, &size); + if (error == DWFL_E_NOERROR) + { + if (unlikely (size == 0)) + free (buffer); + else + { + mod->aux_sym.elf = elf_memory (buffer, size); + if (mod->aux_sym.elf == NULL) + free (buffer); + else + { + mod->aux_sym.fd = -1; + mod->aux_sym.elf->flags |= ELF_F_MALLOCED; + if (open_elf (mod, &mod->aux_sym) != DWFL_E_NOERROR) + return; + if (! find_aux_address_sync (mod)) + { + elf_end (mod->aux_sym.elf); + mod->aux_sym.elf = NULL; + return; + } + + /* So far, so good. Get minisymtab table data and cache it. */ + bool minisymtab = false; + scn = NULL; + while ((scn = elf_nextscn (mod->aux_sym.elf, scn)) != NULL) + { + GElf_Shdr shdr_mem, *shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr != NULL) + switch (shdr->sh_type) + { + case SHT_SYMTAB: + minisymtab = true; + *aux_symscn = scn; + *aux_strshndx = shdr->sh_link; + mod->aux_syments = shdr->sh_size / shdr->sh_entsize; + mod->aux_first_global = shdr->sh_info; + if (*aux_xndxscn != NULL) + return; + break; + + case SHT_SYMTAB_SHNDX: + *aux_xndxscn = scn; + if (minisymtab) + return; + break; + + default: + break; + } + } + + if (minisymtab) + /* We found one, though no SHT_SYMTAB_SHNDX to go with it. */ + return; + + /* We found no SHT_SYMTAB, so everything else is bogus. */ + *aux_xndxscn = NULL; + *aux_strshndx = 0; + mod->aux_syments = 0; + elf_end (mod->aux_sym.elf); + mod->aux_sym.elf = NULL; + return; + } + } + } + else + free (buffer); +#endif +} + /* Try to find a symbol table in either MOD->main.elf or MOD->debug.elf. */ static void find_symtab (Dwfl_Module *mod) { - if (mod->symdata != NULL /* Already done. */ + if (mod->symdata != NULL || mod->aux_symdata != NULL /* Already done. */ || mod->symerr != DWFL_E_NOERROR) /* Cached previous failure. */ return; @@ -824,11 +988,10 @@ find_symtab (Dwfl_Module *mod) if (mod->symerr != DWFL_E_NOERROR) return; - mod->first_global = -1; /* Unknown, unless explicitly set by load_symtab. */ - /* First see if the main ELF file has the debugging information. */ Elf_Scn *symscn = NULL, *xndxscn = NULL; - GElf_Word strshndx; + Elf_Scn *aux_symscn = NULL, *aux_xndxscn = NULL; + GElf_Word strshndx, aux_strshndx = 0; mod->symerr = load_symtab (&mod->main, &mod->symfile, &symscn, &xndxscn, &mod->syments, &mod->first_global, &strshndx); @@ -868,6 +1031,9 @@ find_symtab (Dwfl_Module *mod) break; case DWFL_E_NO_SYMTAB: + /* There might be an auxiliary table. */ + find_aux_sym (mod, &aux_symscn, &aux_xndxscn, &aux_strshndx); + if (symscn != NULL) { /* We still have the dynamic symbol table. */ @@ -875,6 +1041,13 @@ find_symtab (Dwfl_Module *mod) break; } + if (aux_symscn != NULL) + { + /* We still have the auxiliary symbol table. */ + mod->symerr = DWFL_E_NOERROR; + goto aux_cache; + } + /* Last ditch, look for dynamic symbols without section headers. */ find_dynsym (mod); return; @@ -887,7 +1060,7 @@ find_symtab (Dwfl_Module *mod) { elferr: mod->symerr = DWFL_E (LIBELF, elf_errno ()); - return; + goto aux_cleanup; } /* Cache the data; MOD->syments and MOD->first_global were set above. */ @@ -909,6 +1082,40 @@ find_symtab (Dwfl_Module *mod) mod->symdata = elf_getdata (symscn, NULL); if (mod->symdata == NULL) goto elferr; + + /* Cache any auxiliary symbol info, when it fails, just ignore aux_sym. */ + if (aux_symscn != NULL) + { + aux_cache: + /* This does some sanity checks on the string table section. */ + if (elf_strptr (mod->aux_sym.elf, aux_strshndx, 0) == NULL) + { + aux_cleanup: + mod->aux_syments = 0; + elf_end (mod->aux_sym.elf); + mod->aux_sym.elf = NULL; + return; + } + + mod->aux_symstrdata = elf_getdata (elf_getscn (mod->aux_sym.elf, + aux_strshndx), + NULL); + if (mod->aux_symstrdata == NULL) + goto aux_cleanup; + + if (aux_xndxscn == NULL) + mod->aux_symxndxdata = NULL; + else + { + mod->aux_symxndxdata = elf_getdata (aux_xndxscn, NULL); + if (mod->aux_symxndxdata == NULL) + goto aux_cleanup; + } + + mod->aux_symdata = elf_getdata (aux_symscn, NULL); + if (mod->aux_symdata == NULL) + goto aux_cleanup; + } } @@ -999,6 +1206,11 @@ find_dw (Dwfl_Module *mod) case DWFL_E_NOERROR: mod->debug.elf = mod->main.elf; mod->debug.address_sync = mod->main.address_sync; + + /* The Dwarf might need an alt debug file, find that now after + everything about the debug file has been setup (the + find_debuginfo callback might need it). */ + find_debug_altlink (mod, mod->main.name); return; case DWFL_E_NO_DWARF: @@ -1014,6 +1226,15 @@ find_dw (Dwfl_Module *mod) { case DWFL_E_NOERROR: mod->dwerr = load_dw (mod, &mod->debug); + if (mod->dwerr == DWFL_E_NOERROR) + { + /* The Dwarf might need an alt debug file, find that now after + everything about the debug file has been setup (the + find_debuginfo callback might need it). */ + find_debug_altlink (mod, mod->debug.name); + return; + } + break; case DWFL_E_CB: /* The find_debuginfo hook failed. */ @@ -1064,9 +1285,34 @@ dwfl_module_getsymtab (Dwfl_Module *mod) find_symtab (mod); if (mod->symerr == DWFL_E_NOERROR) - return mod->syments; + /* We will skip the auxiliary zero entry if there is another one. */ + return (mod->syments + mod->aux_syments + - (mod->syments > 0 && mod->aux_syments > 0 ? 1 : 0)); __libdwfl_seterrno (mod->symerr); return -1; } INTDEF (dwfl_module_getsymtab) + +int +dwfl_module_getsymtab_first_global (Dwfl_Module *mod) +{ + if (mod == NULL) + return -1; + + find_symtab (mod); + if (mod->symerr == DWFL_E_NOERROR) + { + /* All local symbols should come before all global symbols. If + we have an auxiliary table make sure all the main locals come + first, then all aux locals, then all main globals and finally all + aux globals. And skip the auxiliary table zero undefined + entry. */ + int skip_aux_zero = (mod->syments > 0 && mod->aux_syments > 0) ? 1 : 0; + return mod->first_global + mod->aux_first_global - skip_aux_zero; + } + + __libdwfl_seterrno (mod->symerr); + return -1; +} +INTDEF (dwfl_module_getsymtab_first_global) diff --git a/libdwfl/dwfl_module_getsym.c b/libdwfl/dwfl_module_getsym.c index 9103380..42d2b67 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-2010 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 @@ -29,8 +29,10 @@ #include "libdwflP.h" const char * -dwfl_module_getsym (Dwfl_Module *mod, int ndx, - GElf_Sym *sym, GElf_Word *shndxp) +internal_function +__libdwfl_getsym (Dwfl_Module *mod, int ndx, GElf_Sym *sym, GElf_Addr *addr, + GElf_Word *shndxp, Elf **elfp, Dwarf_Addr *biasp, + bool *resolved, bool adjust_st_value) { if (unlikely (mod == NULL)) return NULL; @@ -42,8 +44,56 @@ dwfl_module_getsym (Dwfl_Module *mod, int ndx, return NULL; } + /* All local symbols should come before all global symbols. If we + have an auxiliary table make sure all the main locals come first, + then all aux locals, then all main globals and finally all aux globals. + And skip the auxiliary table zero undefined entry. */ GElf_Word shndx; - sym = gelf_getsymshndx (mod->symdata, mod->symxndxdata, ndx, sym, &shndx); + int tndx = ndx; + int skip_aux_zero = (mod->syments > 0 && mod->aux_syments > 0) ? 1 : 0; + Elf *elf; + Elf_Data *symdata; + Elf_Data *symxndxdata; + Elf_Data *symstrdata; + if (mod->aux_symdata == NULL + || ndx < mod->first_global) + { + /* main symbol table (locals). */ + tndx = ndx; + elf = mod->symfile->elf; + symdata = mod->symdata; + symxndxdata = mod->symxndxdata; + symstrdata = mod->symstrdata; + } + else if (ndx < mod->first_global + mod->aux_first_global - skip_aux_zero) + { + /* aux symbol table (locals). */ + tndx = ndx - mod->first_global + skip_aux_zero; + elf = mod->aux_sym.elf; + symdata = mod->aux_symdata; + symxndxdata = mod->aux_symxndxdata; + symstrdata = mod->aux_symstrdata; + } + else if ((size_t) ndx < mod->syments + mod->aux_first_global - skip_aux_zero) + { + /* main symbol table (globals). */ + tndx = ndx - mod->aux_first_global + skip_aux_zero; + elf = mod->symfile->elf; + symdata = mod->symdata; + symxndxdata = mod->symxndxdata; + symstrdata = mod->symstrdata; + } + else + { + /* aux symbol table (globals). */ + tndx = ndx - mod->syments + skip_aux_zero; + elf = mod->aux_sym.elf; + symdata = mod->aux_symdata; + symxndxdata = mod->aux_symxndxdata; + symstrdata = mod->aux_symstrdata; + } + sym = gelf_getsymshndx (symdata, symxndxdata, tndx, sym, &shndx); + if (unlikely (sym == NULL)) { __libdwfl_seterrno (DWFL_E_LIBELF); @@ -60,11 +110,37 @@ dwfl_module_getsym (Dwfl_Module *mod, int ndx, || (sym->st_shndx < SHN_LORESERVE && sym->st_shndx != SHN_UNDEF))) { GElf_Shdr shdr_mem; - GElf_Shdr *shdr = gelf_getshdr (elf_getscn (mod->symfile->elf, shndx), - &shdr_mem); + GElf_Shdr *shdr = gelf_getshdr (elf_getscn (elf, shndx), &shdr_mem); alloc = unlikely (shdr == NULL) || (shdr->sh_flags & SHF_ALLOC); } + /* In case of an value in an allocated section the main Elf Ebl + might know where the real value is (e.g. for function + descriptors). */ + + char *ident; + 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 + || (GELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC + && (ident = elf_getident (elf, NULL)) != NULL + && ident[EI_OSABI] == ELFOSABI_LINUX))) + { + if (likely (__libdwfl_module_getebl (mod) == DWFL_E_NOERROR)) + { + if (elf != mod->main.elf) + { + st_value = dwfl_adjusted_st_value (mod, elf, st_value); + st_value = dwfl_deadjust_st_value (mod, mod->main.elf, st_value); + } + + *resolved = ebl_resolve_sym_value (mod->ebl, &st_value); + if (! *resolved) + st_value = sym->st_value; + } + } + if (shndxp != NULL) /* Yield -1 in case of a non-SHF_ALLOC section. */ *shndxp = alloc ? shndx : (GElf_Word) -1; @@ -82,9 +158,9 @@ dwfl_module_getsym (Dwfl_Module *mod, int ndx, /* In an ET_REL file, the symbol table values are relative to the section, not to the module's load base. */ size_t symshstrndx = SHN_UNDEF; - Dwfl_Error result = __libdwfl_relocate_value (mod, mod->symfile->elf, + Dwfl_Error result = __libdwfl_relocate_value (mod, elf, &symshstrndx, - shndx, &sym->st_value); + shndx, &st_value); if (unlikely (result != DWFL_E_NOERROR)) { __libdwfl_seterrno (result); @@ -93,15 +169,48 @@ dwfl_module_getsym (Dwfl_Module *mod, int ndx, } else if (alloc) /* Apply the bias to the symbol value. */ - sym->st_value = dwfl_adjusted_st_value (mod, sym->st_value); + st_value = dwfl_adjusted_st_value (mod, + *resolved ? mod->main.elf : elf, + st_value); break; } - if (unlikely (sym->st_name >= mod->symstrdata->d_size)) + if (adjust_st_value) + sym->st_value = st_value; + + if (addr != NULL) + *addr = st_value; + + if (unlikely (sym->st_name >= symstrdata->d_size)) { __libdwfl_seterrno (DWFL_E_BADSTROFF); return NULL; } - return (const char *) mod->symstrdata->d_buf + sym->st_name; + if (elfp) + *elfp = elf; + if (biasp) + *biasp = dwfl_adjusted_st_value (mod, elf, 0); + return (const char *) symstrdata->d_buf + sym->st_name; +} + +const char * +dwfl_module_getsym_info (Dwfl_Module *mod, int ndx, + GElf_Sym *sym, GElf_Addr *addr, + GElf_Word *shndxp, + Elf **elfp, Dwarf_Addr *bias) +{ + bool resolved; + return __libdwfl_getsym (mod, ndx, sym, addr, shndxp, elfp, bias, + &resolved, false); +} +INTDEF (dwfl_module_getsym_info) + +const char * +dwfl_module_getsym (Dwfl_Module *mod, int ndx, + GElf_Sym *sym, GElf_Word *shndxp) +{ + bool resolved; + return __libdwfl_getsym (mod, ndx, sym, NULL, shndxp, NULL, NULL, + &resolved, true); } INTDEF (dwfl_module_getsym) diff --git a/libdwfl/dwfl_module_info.c b/libdwfl/dwfl_module_info.c index e14002c..df16be4 100644 --- a/libdwfl/dwfl_module_info.c +++ b/libdwfl/dwfl_module_info.c @@ -49,7 +49,7 @@ dwfl_module_info (Dwfl_Module *mod, void ***userdata, : dwfl_adjusted_dwarf_addr (mod, 0)); if (symbias) *symbias = (mod->symfile == NULL ? (Dwarf_Addr) -1 - : dwfl_adjusted_st_value (mod, 0)); + : dwfl_adjusted_st_value (mod, mod->symfile->elf, 0)); if (mainfile) *mainfile = mod->main.name; diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c index 35d9f48..3a4ae2e 100644 --- a/libdwfl/dwfl_report_elf.c +++ b/libdwfl/dwfl_report_elf.c @@ -38,17 +38,20 @@ rejiggering (see below). */ #define REL_MIN_ALIGN ((GElf_Xword) 0x100) -Dwfl_Module * +bool internal_function -__libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, - int fd, Elf *elf, GElf_Addr base, bool sanity) +__libdwfl_elf_address_range (Elf *elf, GElf_Addr base, bool add_p_vaddr, + bool sanity, GElf_Addr *vaddrp, + GElf_Addr *address_syncp, GElf_Addr *startp, + GElf_Addr *endp, GElf_Addr *biasp, + GElf_Half *e_typep) { GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (elf, &ehdr_mem); if (ehdr == NULL) { elf_error: __libdwfl_seterrno (DWFL_E_LIBELF); - return NULL; + return false; } GElf_Addr vaddr = 0; @@ -166,6 +169,7 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, case ET_CORE: /* An assigned base address is meaningless for these. */ base = 0; + add_p_vaddr = true; case ET_DYN: default:; @@ -181,13 +185,19 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, { vaddr = ph->p_vaddr & -ph->p_align; address_sync = ph->p_vaddr + ph->p_memsz; - if ((base & (ph->p_align - 1)) != 0) - base = (base + ph->p_align - 1) & -ph->p_align; - start = base + (ph->p_vaddr & -ph->p_align); break; } } - bias = start - vaddr; + if (add_p_vaddr) + { + start = base + vaddr; + bias = base; + } + else + { + start = base; + bias = base - vaddr; + } for (size_t i = phnum; i-- > 0;) { @@ -197,7 +207,7 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, if (ph->p_type == PT_LOAD && ph->p_vaddr + ph->p_memsz > 0) { - end = base + (ph->p_vaddr + ph->p_memsz); + end = bias + (ph->p_vaddr + ph->p_memsz); break; } } @@ -205,11 +215,37 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, if (end == 0 && sanity) { __libdwfl_seterrno (DWFL_E_NO_PHDR); - return NULL; + return false; } break; } + if (vaddrp) + *vaddrp = vaddr; + if (address_syncp) + *address_syncp = address_sync; + if (startp) + *startp = start; + if (endp) + *endp = end; + if (biasp) + *biasp = bias; + if (e_typep) + *e_typep = ehdr->e_type; + return true; +} +Dwfl_Module * +internal_function +__libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, + int fd, Elf *elf, GElf_Addr base, bool add_p_vaddr, + bool sanity) +{ + GElf_Addr vaddr, address_sync, start, end, bias; + GElf_Half e_type; + if (! __libdwfl_elf_address_range (elf, base, add_p_vaddr, sanity, &vaddr, + &address_sync, &start, &end, &bias, + &e_type)) + return NULL; Dwfl_Module *m = INTUSE(dwfl_report_module) (dwfl, name, start, end); if (m != NULL) { @@ -234,7 +270,7 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, m->main.vaddr = vaddr; m->main.address_sync = address_sync; m->main_bias = bias; - m->e_type = ehdr->e_type; + m->e_type = e_type; } else { @@ -248,8 +284,8 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, } Dwfl_Module * -dwfl_report_elf (Dwfl *dwfl, const char *name, - const char *file_name, int fd, GElf_Addr base) +dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd, + GElf_Addr base, bool add_p_vaddr) { bool closefd = false; if (fd < 0) @@ -272,7 +308,7 @@ dwfl_report_elf (Dwfl *dwfl, const char *name, } Dwfl_Module *mod = __libdwfl_report_elf (dwfl, name, file_name, - fd, elf, base, true); + fd, elf, base, add_p_vaddr, true); if (mod == NULL) { elf_end (elf); @@ -283,3 +319,20 @@ dwfl_report_elf (Dwfl *dwfl, const char *name, return mod; } INTDEF (dwfl_report_elf) +NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156) + +#ifdef SHARED +Dwfl_Module * + _compat_without_add_p_vaddr_dwfl_report_elf (Dwfl *dwfl, const char *name, + const char *file_name, int fd, + GElf_Addr base); +COMPAT_VERSION_NEWPROTO (dwfl_report_elf, ELFUTILS_0.122, without_add_p_vaddr) + +Dwfl_Module * +_compat_without_add_p_vaddr_dwfl_report_elf (Dwfl *dwfl, const char *name, + const char *file_name, int fd, + GElf_Addr base) +{ + return dwfl_report_elf (dwfl, name, file_name, fd, base, true); +} +#endif diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index afe9da1..dfecb51 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -37,6 +37,7 @@ #include #include #include +#include /* A good size for the initial read from memory, if it's not too costly. @@ -83,7 +84,8 @@ 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) + void *read_eagerly_arg, + const struct r_debug_info *r_debug_info) { size_t segment = ndx; @@ -425,7 +427,10 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, /* We must have seen the segment covering offset 0, or else the ELF header we read at START was not produced by these program headers. */ if (unlikely (!found_bias)) - return finish (); + { + free (build_id); + return finish (); + } /* Now we know enough to report a module for sure: its bounds. */ module_start += bias; @@ -433,6 +438,95 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, dyn_vaddr += bias; + /* NAME found from link map has precedence over DT_SONAME possibly read + below. */ + bool name_is_final = false; + + /* Try to match up DYN_VADDR against L_LD as found in link map. + Segments sniffing may guess invalid address as the first read-only memory + mapping may not be dumped to the core file (if ELF headers are not dumped) + and the ELF header is dumped first with the read/write mapping of the same + file at higher addresses. */ + if (r_debug_info != NULL) + for (const struct r_debug_info_module *module = r_debug_info->module; + module != NULL; module = module->next) + if (module_start <= module->l_ld && module->l_ld < module_end) + { + /* L_LD read from link map must be right while DYN_VADDR is unsafe. + Therefore subtract DYN_VADDR and add L_LD to get a possibly + corrective displacement for all addresses computed so far. */ + GElf_Addr fixup = module->l_ld - dyn_vaddr; + if ((fixup & (dwfl->segment_align - 1)) == 0 + && module_start + fixup <= module->l_ld + && module->l_ld < module_end + fixup) + { + module_start += fixup; + module_end += fixup; + dyn_vaddr += fixup; + bias += fixup; + if (module->name[0] != '\0') + { + name = basename (module->name); + name_is_final = true; + } + break; + } + } + + if (r_debug_info != NULL) + { + bool skip_this_module = false; + for (struct r_debug_info_module *module = r_debug_info->module; + module != NULL; module = module->next) + 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) + { + elf_end (module->elf); + close (module->fd); + module->elf = NULL; + module->fd = -1; + } + if (module->elf != NULL) + { + /* Ignore this found module if it would conflict in address + space with any already existing module of DWFL. */ + skip_this_module = true; + } + } + if (skip_this_module) + { + 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); @@ -518,7 +612,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, void *soname = NULL; size_t soname_size = 0; - if (dynstrsz != 0 && dynstr_vaddr != 0) + if (! name_is_final && dynstrsz != 0 && dynstr_vaddr != 0) { /* We know the bounds of the .dynstr section. @@ -650,6 +744,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, mod->main.elf = elf; mod->main.vaddr = module_start - bias; mod->main.address_sync = module_address_sync; + mod->main_bias = bias; } return finish (); diff --git a/libdwfl/elf-from-memory.c b/libdwfl/elf-from-memory.c index 528c35f..df9fbe6 100644 --- a/libdwfl/elf-from-memory.c +++ b/libdwfl/elf-from-memory.c @@ -1,5 +1,5 @@ /* Reconstruct an ELF file by reading the segments out of remote memory. - Copyright (C) 2005-2011 Red Hat, Inc. + Copyright (C) 2005-2011, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -48,10 +48,14 @@ MAXREAD bytes from the remote memory at target address ADDRESS into the local buffer at DATA; it should return -1 for errors (with code in `errno'), 0 if it failed to read at least MINREAD bytes due to EOF, or - the number of bytes read if >= MINREAD. ARG is passed through. */ + the number of bytes read if >= MINREAD. ARG is passed through. + + PAGESIZE is the minimum page size and alignment used for the PT_LOAD + segments. */ Elf * elf_from_remote_memory (GElf_Addr ehdr_vma, + GElf_Xword pagesize, GElf_Addr *loadbasep, ssize_t (*read_memory) (void *arg, void *data, GElf_Addr address, @@ -83,6 +87,7 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, if (memcmp (buffer, ELFMAG, SELFMAG) != 0) { bad_elf: + free (buffer); __libdwfl_seterrno (DWFL_E_BADELF); return NULL; } @@ -191,25 +196,39 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, /* Scan for PT_LOAD segments to find the total size of the file image. */ size_t contents_size = 0; GElf_Off segments_end = 0; + GElf_Off segments_end_mem = 0; GElf_Addr loadbase = ehdr_vma; bool found_base = false; switch (ehdr.e32.e_ident[EI_CLASS]) { - inline void handle_segment (GElf_Addr vaddr, GElf_Off offset, - GElf_Xword filesz, GElf_Xword align) + /* Sanity checks segments and calculates segment_end, + segments_end, segments_end_mem and loadbase (if not + 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_Off segment_end = ((offset + filesz + align - 1) & -align); + /* Sanity check the alignment requirements. */ + if ((palign & (pagesize - 1)) != 0 + || ((vaddr - offset) & (palign - 1)) != 0) + return true; + + GElf_Off segment_end = ((offset + filesz + pagesize - 1) + & -pagesize); if (segment_end > (GElf_Off) contents_size) contents_size = segment_end; - if (!found_base && (offset & -align) == 0) + if (!found_base && (offset & -pagesize) == 0) { - loadbase = ehdr_vma - (vaddr & -align); + loadbase = ehdr_vma - (vaddr & -pagesize); found_base = true; } segments_end = offset + filesz; + segments_end_mem = offset + memsz; + return false; } case ELFCLASS32: @@ -218,8 +237,10 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, goto libelf_error; for (uint_fast16_t i = 0; i < phnum; ++i) if (phdrs.p32[i].p_type == PT_LOAD) - handle_segment (phdrs.p32[i].p_vaddr, phdrs.p32[i].p_offset, - phdrs.p32[i].p_filesz, phdrs.p32[i].p_align); + 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)) + goto bad_elf; break; case ELFCLASS64: @@ -228,8 +249,10 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, goto libelf_error; for (uint_fast16_t i = 0; i < phnum; ++i) if (phdrs.p64[i].p_type == PT_LOAD) - handle_segment (phdrs.p64[i].p_vaddr, phdrs.p64[i].p_offset, - phdrs.p64[i].p_filesz, phdrs.p64[i].p_align); + 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)) + goto bad_elf; break; default: @@ -239,9 +262,11 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, /* Trim the last segment so we don't bother with zeros in the last page that are off the end of the file. However, if the extra bit in that - page includes the section headers, keep them. */ + page includes the section headers and the memory isn't extended (which + might indicate it will have been reused otherwise), keep them. */ if ((GElf_Off) contents_size > segments_end - && (GElf_Off) contents_size >= shdrs_end) + && (GElf_Off) contents_size >= shdrs_end + && segments_end == segments_end_mem) { contents_size = segments_end; if ((GElf_Off) contents_size < shdrs_end) @@ -259,15 +284,17 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, switch (ehdr.e32.e_ident[EI_CLASS]) { + /* Reads the given segment. Returns true if reading fails, + false otherwise. */ inline bool handle_segment (GElf_Addr vaddr, GElf_Off offset, - GElf_Xword filesz, GElf_Xword align) + GElf_Xword filesz) { - GElf_Off start = offset & -align; - GElf_Off end = (offset + filesz + align - 1) & -align; + GElf_Off start = offset & -pagesize; + GElf_Off end = (offset + filesz + pagesize - 1) & -pagesize; if (end > (GElf_Off) contents_size) end = contents_size; nread = (*read_memory) (arg, buffer + start, - (loadbase + vaddr) & -align, + (loadbase + vaddr) & -pagesize, end - start, end - start); return nread <= 0; } @@ -276,7 +303,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_align)) + phdrs.p32[i].p_filesz)) goto read_error; /* If the segments visible in memory didn't include the section @@ -301,9 +328,9 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, case ELFCLASS64: for (uint_fast16_t i = 0; i < phnum; ++i) - if (phdrs.p32[i].p_type == PT_LOAD) + 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_align)) + phdrs.p64[i].p_filesz)) goto read_error; /* If the segments visible in memory didn't include the section diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c index 21db91a..3f5314a 100644 --- a/libdwfl/find-debuginfo.c +++ b/libdwfl/find-debuginfo.c @@ -1,5 +1,5 @@ /* Standard find_debuginfo callback for libdwfl. - 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 @@ -84,6 +84,45 @@ check_crc (int fd, GElf_Word debuglink_crc) static bool validate (Dwfl_Module *mod, int fd, bool check, GElf_Word debuglink_crc) { + /* For alt debug files always check the build-id from the Dwarf and alt. */ + if (mod->dw != NULL) + { + bool valid = false; + const void *build_id; + const char *altname; + ssize_t build_id_len = INTUSE(dwelf_dwarf_gnu_debugaltlink) (mod->dw, + &altname, + &build_id); + if (build_id_len > 0) + { + /* We need to open an Elf handle on the file so we can check its + build ID note for validation. Backdoor the handle into the + module data structure since we had to open it early anyway. */ + Dwfl_Error error = __libdw_open_file (&fd, &mod->alt_elf, + false, false); + if (error != DWFL_E_NOERROR) + __libdwfl_seterrno (error); + else + { + const void *alt_build_id; + ssize_t alt_len = INTUSE(dwelf_elf_gnu_build_id) (mod->alt_elf, + &alt_build_id); + if (alt_len > 0 && alt_len == build_id_len + && memcmp (build_id, alt_build_id, alt_len) == 0) + valid = true; + else + { + /* A mismatch! */ + elf_end (mod->alt_elf); + mod->alt_elf = NULL; + close (fd); + fd = -1; + } + } + } + return valid; + } + /* If we have a build ID, check only that. */ if (mod->build_id_len > 0) { @@ -124,7 +163,9 @@ find_debuginfo_in_path (Dwfl_Module *mod, const char *file_name, const char *file_basename = file_name == NULL ? NULL : basename (file_name); if (debuglink_file == NULL) { - if (file_basename == NULL) + /* For a alt debug multi file we need a name, for a separate debug + name we may be able to fall back on file_basename.debug. */ + if (file_basename == NULL || mod->dw != NULL) { errno = 0; return -1; @@ -174,38 +215,67 @@ find_debuginfo_in_path (Dwfl_Module *mod, const char *file_name, check = *p++ == '+'; check = check && cancheck; - const char *dir, *subdir; + const char *dir, *subdir, *file; switch (p[0]) { case '\0': /* An empty entry says to try the main file's directory. */ dir = file_dirname; subdir = NULL; + file = debuglink_file; break; case '/': /* An absolute path says to look there for a subdirectory - named by the main file's absolute directory. - This cannot be applied to a relative file name. */ - if (file_dirname == NULL || file_dirname[0] != '/') + named by the main file's absolute directory. This cannot + be applied to a relative file name. For alt debug files + it means to look for the basename file in that dir or the + .dwz subdir (see below). */ + if (mod->dw == NULL + && (file_dirname == NULL || file_dirname[0] != '/')) continue; dir = p; - subdir = file_dirname + 1; + if (mod->dw == NULL) + { + subdir = file_dirname + 1; + file = debuglink_file; + } + else + { + subdir = NULL; + file = basename (debuglink_file); + } break; default: /* A relative path says to try a subdirectory of that name in the main file's directory. */ dir = file_dirname; subdir = p; + file = debuglink_file; break; } char *fname = NULL; - int fd = try_open (&main_stat, dir, subdir, debuglink_file, &fname); + int fd = try_open (&main_stat, dir, subdir, file, &fname); if (fd < 0) switch (errno) { case ENOENT: case ENOTDIR: + /* If we are looking for the alt file also try the .dwz subdir. + But only if this is the empty or absolute path. */ + if (mod->dw != NULL && (p[0] == '\0' || p[0] == '/')) + { + fd = try_open (&main_stat, dir, ".dwz", + basename (file), &fname); + if (fd < 0) + { + if (errno != ENOENT && errno != ENOTDIR) + return -1; + else + continue; + } + break; + } continue; default: return -1; @@ -240,11 +310,21 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod, GElf_Addr vaddr; if (INTUSE(dwfl_module_build_id) (mod, &bits, &vaddr) > 0) { + /* Dropping most arguments means we cannot rely on them in + dwfl_build_id_find_debuginfo. But leave it that way since + some user code out there also does this, so we'll have to + handle it anyway. */ int fd = INTUSE(dwfl_build_id_find_debuginfo) (mod, NULL, NULL, 0, NULL, NULL, 0, debuginfo_file_name); - if (fd >= 0 || mod->debug.elf != NULL || errno != 0) + + /* Did the build_id callback find something or report an error? + Then we are done. Otherwise fallback on path based search. */ + if (fd >= 0 + || (mod->dw == NULL && mod->debug.elf != NULL) + || (mod->dw != NULL && mod->alt_elf != NULL) + || errno != 0) return fd; } diff --git a/libdwfl/frame_unwind.c b/libdwfl/frame_unwind.c new file mode 100644 index 0000000..16cebd0 --- /dev/null +++ b/libdwfl/frame_unwind.c @@ -0,0 +1,725 @@ +/* Get previous frame state for an existing frame state. + 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 + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "cfi.h" +#include +#include "libdwflP.h" +#include "../libdw/dwarf.h" +#include + +/* Maximum number of DWARF expression stack slots before returning an error. */ +#define DWARF_EXPR_STACK_MAX 0x100 + +/* Maximum number of DWARF expression executed operations before returning an + error. */ +#define DWARF_EXPR_STEPS_MAX 0x1000 + +#ifndef MAX +# define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif + +bool +internal_function +__libdwfl_frame_reg_get (Dwfl_Frame *state, unsigned regno, Dwarf_Addr *val) +{ + Ebl *ebl = state->thread->process->ebl; + if (! ebl_dwarf_to_regno (ebl, ®no)) + return false; + if (regno >= ebl_frame_nregs (ebl)) + return false; + if ((state->regs_set[regno / sizeof (*state->regs_set) / 8] + & ((uint64_t) 1U << (regno % (sizeof (*state->regs_set) * 8)))) == 0) + return false; + if (val) + *val = state->regs[regno]; + return true; +} + +bool +internal_function +__libdwfl_frame_reg_set (Dwfl_Frame *state, unsigned regno, Dwarf_Addr val) +{ + Ebl *ebl = state->thread->process->ebl; + if (! ebl_dwarf_to_regno (ebl, ®no)) + return false; + if (regno >= ebl_frame_nregs (ebl)) + return false; + /* For example i386 user_regs_struct has signed fields. */ + if (ebl_get_elfclass (ebl) == ELFCLASS32) + val &= 0xffffffff; + state->regs_set[regno / sizeof (*state->regs_set) / 8] |= + ((uint64_t) 1U << (regno % (sizeof (*state->regs_set) * 8))); + state->regs[regno] = val; + return true; +} + +static bool +state_get_reg (Dwfl_Frame *state, unsigned regno, Dwarf_Addr *val) +{ + if (! __libdwfl_frame_reg_get (state, regno, val)) + { + __libdwfl_seterrno (DWFL_E_INVALID_REGISTER); + return false; + } + return true; +} + +static int +bra_compar (const void *key_voidp, const void *elem_voidp) +{ + Dwarf_Word offset = (uintptr_t) key_voidp; + const Dwarf_Op *op = elem_voidp; + return (offset > op->offset) - (offset < op->offset); +} + +/* If FRAME is NULL is are computing CFI frame base. In such case another + DW_OP_call_frame_cfa is no longer permitted. */ + +static bool +expr_eval (Dwfl_Frame *state, Dwarf_Frame *frame, const Dwarf_Op *ops, + size_t nops, Dwarf_Addr *result, Dwarf_Addr bias) +{ + Dwfl_Process *process = state->thread->process; + if (nops == 0) + { + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } + Dwarf_Addr *stack = NULL; + size_t stack_used = 0, stack_allocated = 0; + + bool + push (Dwarf_Addr val) + { + if (stack_used >= DWARF_EXPR_STACK_MAX) + { + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } + if (stack_used == stack_allocated) + { + stack_allocated = MAX (stack_allocated * 2, 32); + Dwarf_Addr *stack_new = realloc (stack, stack_allocated * sizeof (*stack)); + if (stack_new == NULL) + { + __libdwfl_seterrno (DWFL_E_NOMEM); + return false; + } + stack = stack_new; + } + stack[stack_used++] = val; + return true; + } + + bool + pop (Dwarf_Addr *val) + { + if (stack_used == 0) + { + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } + *val = stack[--stack_used]; + return true; + } + + Dwarf_Addr val1, val2; + bool is_location = false; + size_t steps_count = 0; + for (const Dwarf_Op *op = ops; op < ops + nops; op++) + { + if (++steps_count > DWARF_EXPR_STEPS_MAX) + { + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } + switch (op->atom) + { + /* DW_OP_* order matches libgcc/unwind-dw2.c execute_stack_op: */ + case DW_OP_lit0 ... DW_OP_lit31: + if (! push (op->atom - DW_OP_lit0)) + { + free (stack); + return false; + } + break; + case DW_OP_addr: + if (! push (op->number + bias)) + { + free (stack); + return false; + } + break; + case DW_OP_GNU_encoded_addr: + /* Missing support in the rest of elfutils. */ + __libdwfl_seterrno (DWFL_E_UNSUPPORTED_DWARF); + return false; + case DW_OP_const1u: + case DW_OP_const1s: + case DW_OP_const2u: + case DW_OP_const2s: + case DW_OP_const4u: + case DW_OP_const4s: + case DW_OP_const8u: + case DW_OP_const8s: + case DW_OP_constu: + case DW_OP_consts: + if (! push (op->number)) + { + free (stack); + return false; + } + break; + case DW_OP_reg0 ... DW_OP_reg31: + if (! state_get_reg (state, op->atom - DW_OP_reg0, &val1) + || ! push (val1)) + { + free (stack); + return false; + } + break; + case DW_OP_regx: + if (! state_get_reg (state, op->number, &val1) || ! push (val1)) + { + free (stack); + return false; + } + break; + case DW_OP_breg0 ... DW_OP_breg31: + if (! state_get_reg (state, op->atom - DW_OP_breg0, &val1)) + { + free (stack); + return false; + } + val1 += op->number; + if (! push (val1)) + { + free (stack); + return false; + } + break; + case DW_OP_bregx: + if (! state_get_reg (state, op->number, &val1)) + { + free (stack); + return false; + } + val1 += op->number2; + if (! push (val1)) + { + free (stack); + return false; + } + break; + case DW_OP_dup: + if (! pop (&val1) || ! push (val1) || ! push (val1)) + { + free (stack); + return false; + } + break; + case DW_OP_drop: + if (! pop (&val1)) + { + free (stack); + return false; + } + break; + case DW_OP_pick: + if (stack_used <= op->number) + { + free (stack); + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } + if (! push (stack[stack_used - 1 - op->number])) + { + free (stack); + return false; + } + break; + case DW_OP_over: + if (! pop (&val1) || ! pop (&val2) + || ! push (val2) || ! push (val1) || ! push (val2)) + { + free (stack); + return false; + } + break; + case DW_OP_swap: + if (! pop (&val1) || ! pop (&val2) || ! push (val1) || ! push (val2)) + { + free (stack); + return false; + } + break; + case DW_OP_rot: + { + Dwarf_Addr val3; + if (! pop (&val1) || ! pop (&val2) || ! pop (&val3) + || ! push (val1) || ! push (val3) || ! push (val2)) + { + free (stack); + return false; + } + } + break; + case DW_OP_deref: + case DW_OP_deref_size: + if (process->callbacks->memory_read == NULL) + { + free (stack); + __libdwfl_seterrno (DWFL_E_INVALID_ARGUMENT); + return false; + } + if (! pop (&val1) + || ! process->callbacks->memory_read (process->dwfl, val1, &val1, + process->callbacks_arg)) + { + free (stack); + return false; + } + if (op->atom == DW_OP_deref_size) + { + const int elfclass = frame->cache->e_ident[EI_CLASS]; + const unsigned addr_bytes = elfclass == ELFCLASS32 ? 4 : 8; + if (op->number > addr_bytes) + { + free (stack); + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } +#if BYTE_ORDER == BIG_ENDIAN + if (op->number == 0) + val1 = 0; + else + val1 >>= (addr_bytes - op->number) * 8; +#else + if (op->number < 8) + val1 &= (1 << (op->number * 8)) - 1; +#endif + } + if (! push (val1)) + { + free (stack); + return false; + } + break; +#define UNOP(atom, expr) \ + case atom: \ + if (! pop (&val1) || ! push (expr)) \ + { \ + free (stack); \ + return false; \ + } \ + break; + UNOP (DW_OP_abs, abs ((int64_t) val1)) + UNOP (DW_OP_neg, -(int64_t) val1) + UNOP (DW_OP_not, ~val1) +#undef UNOP + case DW_OP_plus_uconst: + if (! pop (&val1) || ! push (val1 + op->number)) + { + free (stack); + return false; + } + break; +#define BINOP(atom, op) \ + case atom: \ + if (! pop (&val2) || ! pop (&val1) || ! push (val1 op val2)) \ + { \ + free (stack); \ + return false; \ + } \ + break; +#define BINOP_SIGNED(atom, op) \ + case atom: \ + if (! pop (&val2) || ! pop (&val1) \ + || ! push ((int64_t) val1 op (int64_t) val2)) \ + { \ + free (stack); \ + return false; \ + } \ + break; + BINOP (DW_OP_and, &) + case DW_OP_div: + if (! pop (&val2) || ! pop (&val1)) + { + free (stack); + return false; + } + if (val2 == 0) + { + free (stack); + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } + if (! push ((int64_t) val1 / (int64_t) val2)) + { + free (stack); + return false; + } + break; + BINOP (DW_OP_minus, -) + case DW_OP_mod: + if (! pop (&val2) || ! pop (&val1)) + { + free (stack); + return false; + } + if (val2 == 0) + { + free (stack); + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } + if (! push (val1 % val2)) + { + free (stack); + return false; + } + break; + BINOP (DW_OP_mul, *) + BINOP (DW_OP_or, |) + BINOP (DW_OP_plus, +) + BINOP (DW_OP_shl, <<) + BINOP (DW_OP_shr, >>) + BINOP_SIGNED (DW_OP_shra, >>) + BINOP (DW_OP_xor, ^) + BINOP_SIGNED (DW_OP_le, <=) + BINOP_SIGNED (DW_OP_ge, >=) + BINOP_SIGNED (DW_OP_eq, ==) + BINOP_SIGNED (DW_OP_lt, <) + BINOP_SIGNED (DW_OP_gt, >) + BINOP_SIGNED (DW_OP_ne, !=) +#undef BINOP +#undef BINOP_SIGNED + case DW_OP_bra: + if (! pop (&val1)) + { + free (stack); + return false; + } + if (val1 == 0) + break; + /* FALLTHRU */ + case DW_OP_skip:; + Dwarf_Word offset = op->offset + 1 + 2 + (int16_t) op->number; + const Dwarf_Op *found = bsearch ((void *) (uintptr_t) offset, ops, nops, + sizeof (*ops), bra_compar); + if (found == NULL) + { + free (stack); + /* PPC32 vDSO has such invalid operations. */ + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } + /* Undo the 'for' statement increment. */ + op = found - 1; + break; + case DW_OP_nop: + break; + /* DW_OP_* not listed in libgcc/unwind-dw2.c execute_stack_op: */ + case DW_OP_call_frame_cfa:; + // Not used by CFI itself but it is synthetized by elfutils internation. + Dwarf_Op *cfa_ops; + size_t cfa_nops; + Dwarf_Addr cfa; + if (frame == NULL + || dwarf_frame_cfa (frame, &cfa_ops, &cfa_nops) != 0 + || ! expr_eval (state, NULL, cfa_ops, cfa_nops, &cfa, bias) + || ! push (cfa)) + { + __libdwfl_seterrno (DWFL_E_LIBDW); + free (stack); + return false; + } + is_location = true; + break; + case DW_OP_stack_value: + // Not used by CFI itself but it is synthetized by elfutils internation. + is_location = false; + break; + default: + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + return false; + } + } + if (! pop (result)) + { + free (stack); + return false; + } + free (stack); + if (is_location) + { + if (process->callbacks->memory_read == NULL) + { + __libdwfl_seterrno (DWFL_E_INVALID_ARGUMENT); + return false; + } + if (! process->callbacks->memory_read (process->dwfl, *result, result, + process->callbacks_arg)) + return false; + } + return true; +} + +static void +new_unwound (Dwfl_Frame *state) +{ + assert (state->unwound == NULL); + Dwfl_Thread *thread = state->thread; + Dwfl_Process *process = thread->process; + Ebl *ebl = process->ebl; + size_t nregs = ebl_frame_nregs (ebl); + assert (nregs > 0); + Dwfl_Frame *unwound; + unwound = malloc (sizeof (*unwound) + sizeof (*unwound->regs) * nregs); + state->unwound = unwound; + unwound->thread = thread; + unwound->unwound = NULL; + unwound->signal_frame = false; + unwound->initial_frame = false; + unwound->pc_state = DWFL_FRAME_STATE_ERROR; + memset (unwound->regs_set, 0, sizeof (unwound->regs_set)); +} + +/* The logic is to call __libdwfl_seterrno for any CFI bytecode interpretation + error so one can easily catch the problem with a debugger. Still there are + archs with invalid CFI for some registers where the registers are never used + later. Therefore we continue unwinding leaving the registers undefined. */ + +static void +handle_cfi (Dwfl_Frame *state, Dwarf_Addr pc, Dwarf_CFI *cfi, Dwarf_Addr bias) +{ + Dwarf_Frame *frame; + if (INTUSE(dwarf_cfi_addrframe) (cfi, pc, &frame) != 0) + { + __libdwfl_seterrno (DWFL_E_LIBDW); + return; + } + new_unwound (state); + Dwfl_Frame *unwound = state->unwound; + unwound->signal_frame = frame->fde->cie->signal_frame; + Dwfl_Thread *thread = state->thread; + Dwfl_Process *process = thread->process; + Ebl *ebl = process->ebl; + size_t nregs = ebl_frame_nregs (ebl); + assert (nregs > 0); + + /* The return register is special for setting the unwound->pc_state. */ + unsigned ra = frame->fde->cie->return_address_register; + bool ra_set = false; + ebl_dwarf_to_regno (ebl, &ra); + + for (unsigned regno = 0; regno < nregs; regno++) + { + Dwarf_Op reg_ops_mem[3], *reg_ops; + size_t reg_nops; + if (dwarf_frame_register (frame, regno, reg_ops_mem, ®_ops, + ®_nops) != 0) + { + __libdwfl_seterrno (DWFL_E_LIBDW); + continue; + } + Dwarf_Addr regval; + if (reg_nops == 0) + { + if (reg_ops == reg_ops_mem) + { + /* REGNO is undefined. */ + if (regno == ra) + unwound->pc_state = DWFL_FRAME_STATE_PC_UNDEFINED; + continue; + } + else if (reg_ops == NULL) + { + /* REGNO is same-value. */ + if (! state_get_reg (state, regno, ®val)) + continue; + } + else + { + __libdwfl_seterrno (DWFL_E_INVALID_DWARF); + continue; + } + } + else if (! expr_eval (state, frame, reg_ops, reg_nops, ®val, bias)) + { + /* PPC32 vDSO has various invalid operations, ignore them. The + register will look as unset causing an error later, if used. + But PPC32 does not use such registers. */ + 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 + register value. But we always want to override the value if + the register is the actual CIE return address register. */ + if (ra_set && regno != frame->fde->cie->return_address_register) + { + unsigned r = regno; + if (ebl_dwarf_to_regno (ebl, &r) && r == ra) + continue; + } + + if (! __libdwfl_frame_reg_set (unwound, regno, regval)) + { + __libdwfl_seterrno (DWFL_E_INVALID_REGISTER); + continue; + } + else if (! ra_set) + { + unsigned r = regno; + if (ebl_dwarf_to_regno (ebl, &r) && r == ra) + ra_set = true; + } + } + if (unwound->pc_state == DWFL_FRAME_STATE_ERROR + && __libdwfl_frame_reg_get (unwound, + frame->fde->cie->return_address_register, + &unwound->pc)) + { + /* PPC32 __libc_start_main properly CFI-unwinds PC as zero. Currently + none of the archs supported for unwinding have zero as a valid PC. */ + if (unwound->pc == 0) + unwound->pc_state = DWFL_FRAME_STATE_PC_UNDEFINED; + else + unwound->pc_state = DWFL_FRAME_STATE_PC_SET; + } + free (frame); +} + +static bool +setfunc (int firstreg, unsigned nregs, const Dwarf_Word *regs, void *arg) +{ + Dwfl_Frame *state = arg; + Dwfl_Frame *unwound = state->unwound; + if (firstreg < 0) + { + assert (firstreg == -1); + assert (nregs == 1); + assert (unwound->pc_state == DWFL_FRAME_STATE_PC_UNDEFINED); + unwound->pc = *regs; + unwound->pc_state = DWFL_FRAME_STATE_PC_SET; + return true; + } + while (nregs--) + if (! __libdwfl_frame_reg_set (unwound, firstreg++, *regs++)) + return false; + return true; +} + +static bool +getfunc (int firstreg, unsigned nregs, Dwarf_Word *regs, void *arg) +{ + Dwfl_Frame *state = arg; + assert (firstreg >= 0); + while (nregs--) + if (! __libdwfl_frame_reg_get (state, firstreg++, regs++)) + return false; + return true; +} + +static bool +readfunc (Dwarf_Addr addr, Dwarf_Word *datap, void *arg) +{ + Dwfl_Frame *state = arg; + Dwfl_Thread *thread = state->thread; + Dwfl_Process *process = thread->process; + return process->callbacks->memory_read (process->dwfl, addr, datap, + process->callbacks_arg); +} + +void +internal_function +__libdwfl_frame_unwind (Dwfl_Frame *state) +{ + if (state->unwound) + return; + /* Do not ask dwfl_frame_pc for ISACTIVATION, it would try to unwind STATE + which would deadlock us. */ + Dwarf_Addr pc; + bool ok = INTUSE(dwfl_frame_pc) (state, &pc, NULL); + assert (ok); + /* Check whether this is the initial frame or a signal frame. + Then we need to unwind from the original, unadjusted PC. */ + if (! state->initial_frame && ! state->signal_frame) + pc--; + Dwfl_Module *mod = INTUSE(dwfl_addrmodule) (state->thread->process->dwfl, pc); + if (mod == NULL) + __libdwfl_seterrno (DWFL_E_NO_DWARF); + else + { + Dwarf_Addr bias; + Dwarf_CFI *cfi_eh = INTUSE(dwfl_module_eh_cfi) (mod, &bias); + if (cfi_eh) + { + handle_cfi (state, pc - bias, cfi_eh, bias); + if (state->unwound) + return; + } + Dwarf_CFI *cfi_dwarf = INTUSE(dwfl_module_dwarf_cfi) (mod, &bias); + if (cfi_dwarf) + { + handle_cfi (state, pc - bias, cfi_dwarf, bias); + if (state->unwound) + return; + } + } + assert (state->unwound == NULL); + Dwfl_Thread *thread = state->thread; + Dwfl_Process *process = thread->process; + Ebl *ebl = process->ebl; + new_unwound (state); + state->unwound->pc_state = DWFL_FRAME_STATE_PC_UNDEFINED; + // &Dwfl_Frame.signal_frame cannot be passed as it is a bitfield. + bool signal_frame = false; + if (! ebl_unwind (ebl, pc, setfunc, getfunc, readfunc, state, &signal_frame)) + { + // Discard the unwind attempt. During next __libdwfl_frame_unwind call + // we may have for example the appropriate Dwfl_Module already mapped. + assert (state->unwound->unwound == NULL); + free (state->unwound); + state->unwound = NULL; + // __libdwfl_seterrno has been called above. + return; + } + assert (state->unwound->pc_state == DWFL_FRAME_STATE_PC_SET); + state->unwound->signal_frame = signal_frame; +} diff --git a/libdwfl/libdwfl.h b/libdwfl/libdwfl.h index 506a2a0..2bb4f45 100644 --- a/libdwfl/libdwfl.h +++ b/libdwfl/libdwfl.h @@ -1,5 +1,5 @@ /* Interfaces for libdwfl. - Copyright (C) 2005-2010 Red Hat, Inc. + Copyright (C) 2005-2010, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -41,6 +41,14 @@ typedef struct Dwfl_Module Dwfl_Module; /* Handle describing a line record. */ typedef struct Dwfl_Line Dwfl_Line; +/* This holds information common for all the frames of one backtrace for + a partical thread/task/TID. Several threads belong to one Dwfl. */ +typedef struct Dwfl_Thread Dwfl_Thread; + +/* This holds everything we know about the state of the frame at a particular + PC location described by an FDE belonging to Dwfl_Thread. */ +typedef struct Dwfl_Frame Dwfl_Frame; + /* Callbacks. */ typedef struct { @@ -137,14 +145,21 @@ extern int dwfl_report_segment (Dwfl *dwfl, int ndx, extern Dwfl_Module *dwfl_report_module (Dwfl *dwfl, const char *name, Dwarf_Addr start, Dwarf_Addr end); -/* Report a module with start and end addresses computed from the ELF - program headers in the given file, plus BASE. For an ET_REL file, - does a simple absolute section layout starting at BASE. +/* Report a module to address BASE with start and end addresses computed + from the ELF program headers in the given file - see the table below. FD may be -1 to open FILE_NAME. On success, FD is consumed by the - library, and the `find_elf' callback will not be used for this module. */ + library, and the `find_elf' callback will not be used for this module. + ADD_P_VADDR BASE + ET_EXEC ignored ignored + ET_DYN false absolute address where to place the file + true start address relative to ELF's phdr p_vaddr + ET_REL ignored absolute address where to place the file + ET_CORE ignored ignored + ET_DYN ELF phdr p_vaddr address can be non-zero if the shared library + has been prelinked by tool prelink(8). */ extern Dwfl_Module *dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd, - GElf_Addr base); + GElf_Addr base, bool add_p_vaddr); /* Similar, but report the module for offline use. All ET_EXEC files being reported must be reported before any relocatable objects. @@ -342,15 +357,17 @@ extern int dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release, This can follow a dwfl_report_offline call to bootstrap the DT_DEBUG method of following the dynamic linker link_map chain, in case the core file does not contain enough of the executable's text - segment to locate its PT_DYNAMIC in the dump. This might call - dwfl_report_elf on file names found in the dump if reading some - link_map files is the only way to ascertain those modules' addresses. - Returns the number of modules reported, or -1 for errors. */ -extern int dwfl_core_file_report (Dwfl *dwfl, Elf *elf); + segment to locate its PT_DYNAMIC in the dump. In such case you need to + supply non-NULL EXECUTABLE, otherwise dynamic libraries will not be loaded + into the DWFL map. This might call dwfl_report_elf on file names found in + the dump if reading some link_map files is the only way to ascertain those + modules' addresses. Returns the number of modules reported, or -1 for + errors. */ +extern int dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable); /* Call dwfl_report_module for each file mapped into the address space of PID. Returns zero on success, -1 if dwfl_report_module failed, - or an errno code if opening the kernel binary failed. */ + or an errno code if opening the proc files failed. */ extern int dwfl_linux_proc_report (Dwfl *dwfl, pid_t pid); /* Similar, but reads an input stream in the format of Linux /proc/PID/maps @@ -403,28 +420,99 @@ extern int dwfl_validate_address (Dwfl *dwfl, are found) for use with libelf. If successful, fills in *BIAS with the difference between addresses within the loaded module and those in symbol tables or Dwarf information referring to it. */ -extern Elf *dwfl_module_getelf (Dwfl_Module *, GElf_Addr *bias); +extern Elf *dwfl_module_getelf (Dwfl_Module *, GElf_Addr *bias) + __nonnull_attribute__ (1, 2); /* Return the number of symbols in the module's symbol table, or -1 for errors. */ extern int dwfl_module_getsymtab (Dwfl_Module *mod); +/* Return the index of the first global symbol in the module's symbol + table, or -1 for errors. In each symbol table, all symbols with + STB_LOCAL binding precede the weak and global symbols. This + function returns the symbol table index one greater than the last + local symbol. */ +extern int dwfl_module_getsymtab_first_global (Dwfl_Module *mod); + /* Fetch one entry from the module's symbol table. On errors, returns NULL. If successful, fills in *SYM and returns the string for st_name. This works like gelf_getsym except that st_value is always adjusted to an absolute value based on the module's location, when the symbol is in an SHF_ALLOC section. If SHNDXP is non-null, it's set with the section index (whether from st_shndx or extended index table); in case of a - symbol in a non-allocated section, *SHNDXP is instead set to -1. */ + symbol in a non-allocated section, *SHNDXP is instead set to -1. + Note that since symbols can come from either the main, debug or auxiliary + ELF symbol file (either dynsym or symtab) the section index can only + be reliably used to compare against special section constants like + SHN_UNDEF or SHN_ABS. It is recommended to use dwfl_module_getsym_info + which doesn't have these deficiencies. */ extern const char *dwfl_module_getsym (Dwfl_Module *mod, int ndx, GElf_Sym *sym, GElf_Word *shndxp) __nonnull_attribute__ (3); +/* Fetch one entry from the module's symbol table and the associated + address value. On errors, returns NULL. If successful, fills in + *SYM, *ADDR and returns the string for st_name. This works like + gelf_getsym. *ADDR is set to the st_value adjusted to an absolute + value based on the module's location, when the symbol is in an + SHF_ALLOC section. For non-ET_REL files, if the arch uses function + descriptors, and the st_value points to one, *ADDR will be resolved + to the actual function entry address. The SYM->ST_VALUE itself + isn't adjusted in any way. Fills in ELFP, if not NULL, with the + ELF file the symbol originally came from. Note that symbols can + come from either the main, debug or auxiliary ELF symbol file + (either dynsym or symtab). If SHNDXP is non-null, it's set with + the section index (whether from st_shndx or extended index table); + in case of a symbol in a non-allocated section, *SHNDXP is instead + set to -1. Fills in BIAS, if not NULL, with the difference between + addresses within the loaded module and those in symbol table of the + ELF file. Note that the address associated with the symbol might + be in a different section than the returned symbol. The section in + the main elf file in which returned ADDR falls can be found with + dwfl_module_address_section. */ +extern const char *dwfl_module_getsym_info (Dwfl_Module *mod, int ndx, + GElf_Sym *sym, GElf_Addr *addr, + GElf_Word *shndxp, + Elf **elfp, Dwarf_Addr *bias) + __nonnull_attribute__ (3, 4); + /* Find the symbol that ADDRESS lies inside, and return its name. */ extern const char *dwfl_module_addrname (Dwfl_Module *mod, GElf_Addr address); +/* Find the symbol associated with ADDRESS. Return its name or NULL + when nothing was found. If the architecture uses function + descriptors, and symbol st_value points to one, ADDRESS wil be + matched against either the adjusted st_value or the associated + function entry value as described in dwfl_module_getsym_info. If + OFFSET is not NULL it will be filled in with the difference from + the start of the symbol (or function entry). If SYM is not NULL it + is filled in with the symbol associated with the matched ADDRESS. + The SYM->ST_VALUE itself isn't adjusted in any way. Fills in ELFP, + if not NULL, with the ELF file the symbol originally came from. + Note that symbols can come from either the main, debug or auxiliary + ELF symbol file (either dynsym or symtab). If SHNDXP is non-null, + it's set with the section index (whether from st_shndx or extended + index table). Fills in BIAS, if not NULL, with the difference + between addresses within the loaded module and those in symbol + table of the ELF file. Note that the address matched against the + symbol might be in a different section than the returned symbol. + The section in the main elf file in ADDRESS falls can be found with + dwfl_module_address_section. */ +extern const char *dwfl_module_addrinfo (Dwfl_Module *mod, GElf_Addr address, + GElf_Off *offset, GElf_Sym *sym, + GElf_Word *shndxp, Elf **elfp, + Dwarf_Addr *bias) + __nonnull_attribute__ (3); + /* Find the symbol that ADDRESS lies inside, and return detailed - information as for dwfl_module_getsym (above). */ + information as for dwfl_module_getsym (above). Note that like + dwfl_module_getsym this function also adjusts SYM->ST_VALUE to an + absolute value based on the module's location. ADDRESS is only + matched against this adjusted SYM->ST_VALUE. This means that + depending on architecture this might only match symbols that + represent function descriptor addresses (and not function entry + addresses). For these reasons it is recommended to use + dwfl_module_addrinfo instead. */ extern const char *dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr address, GElf_Sym *sym, GElf_Word *shndxp) __nonnull_attribute__ (3); @@ -557,6 +645,166 @@ extern Dwarf_CFI *dwfl_module_dwarf_cfi (Dwfl_Module *mod, Dwarf_Addr *bias); extern Dwarf_CFI *dwfl_module_eh_cfi (Dwfl_Module *mod, Dwarf_Addr *bias); +typedef struct +{ + /* Called to iterate through threads. Returns next TID (thread ID) on + success, a negative number on failure and zero if there are no more + threads. dwfl_errno () should be set if negative number has been + returned. *THREAD_ARGP is NULL on first call, and may be optionally + set by the implementation. The value set by the implementation will + be passed in on the next call to NEXT_THREAD. THREAD_ARGP is never + NULL. *THREAD_ARGP will be passed to set_initial_registers or + thread_detach callbacks together with Dwfl_Thread *thread. This + method must not be NULL. */ + pid_t (*next_thread) (Dwfl *dwfl, void *dwfl_arg, void **thread_argp) + __nonnull_attribute__ (1); + + /* Called to get a specific thread. Returns true if there is a + thread with the given thread id number, returns false if no such + thread exists and will set dwfl_errno in that case. THREAD_ARGP + is never NULL. *THREAD_ARGP will be passed to + set_initial_registers or thread_detach callbacks together with + Dwfl_Thread *thread. This method may be NULL and will then be + emulated using the next_thread callback. */ + bool (*get_thread) (Dwfl *dwfl, pid_t tid, void *dwfl_arg, + void **thread_argp) + __nonnull_attribute__ (1); + + /* Called during unwinding to access memory (stack) state. Returns true for + successfully read *RESULT or false and sets dwfl_errno () on failure. + This method may be NULL - in such case dwfl_thread_getframes will return + only the initial frame. */ + bool (*memory_read) (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Word *result, + void *dwfl_arg) + __nonnull_attribute__ (1, 3); + + /* Called on initial unwind to get the initial register state of the first + frame. Should call dwfl_thread_state_registers, possibly multiple times + for different ranges and possibly also dwfl_thread_state_register_pc, to + fill in initial (DWARF) register values. After this call, till at least + thread_detach is called, the thread is assumed to be frozen, so that it is + safe to unwind. Returns true on success or false and sets dwfl_errno () + on failure. In the case of a failure thread_detach will not be called. + This method must not be NULL. */ + bool (*set_initial_registers) (Dwfl_Thread *thread, void *thread_arg) + __nonnull_attribute__ (1); + + /* Called by dwfl_end. All thread_detach method calls have been already + done. This method may be NULL. */ + void (*detach) (Dwfl *dwfl, void *dwfl_arg) + __nonnull_attribute__ (1); + + /* Called when unwinding is done. No callback will be called after + this method has been called. Iff set_initial_registers was called for + a TID and it returned success thread_detach will be called before the + detach method above. This method may be NULL. */ + void (*thread_detach) (Dwfl_Thread *thread, void *thread_arg) + __nonnull_attribute__ (1); +} Dwfl_Thread_Callbacks; + +/* PID is the process id associated with the DWFL state. Architecture of DWFL + modules is specified by ELF, ELF must remain valid during DWFL lifetime. + Use NULL ELF to detect architecture from DWFL, the function will then detect + it from arbitrary Dwfl_Module of DWFL. DWFL_ARG is the callback backend + state. DWFL_ARG will be provided to the callbacks. *THREAD_CALLBACKS + function pointers must remain valid during lifetime of DWFL. Function + returns true on success, false otherwise. */ +bool dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, + const Dwfl_Thread_Callbacks *thread_callbacks, + void *dwfl_arg) + __nonnull_attribute__ (1, 4); + +/* Calls dwfl_attach_state with Dwfl_Thread_Callbacks setup for extracting + thread state from the ELF core file. Returns the pid number extracted + from the core file, or -1 for errors. */ +extern int dwfl_core_file_attach (Dwfl *dwfl, Elf *elf); + +/* Calls dwfl_attach_state with Dwfl_Thread_Callbacks setup for extracting + thread state from the proc file system. Uses ptrace to attach and stop + the thread under inspection and detaches when thread_detach is called + and unwinding for the thread is done, unless ASSUME_PTRACE_STOPPED is + true. If ASSUME_PTRACE_STOPPED is true the caller should make sure that + the thread is ptrace attached and stopped before unwinding by calling + either dwfl_thread_getframes or dwfl_getthread_frames. Returns zero on + success, -1 if dwfl_attach_state failed, or an errno code if opening the + proc files failed. */ +extern int dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, + bool assume_ptrace_stopped); + +/* Return PID for the process associated with DWFL. Function returns -1 if + dwfl_attach_state was not called for DWFL. */ +pid_t dwfl_pid (Dwfl *dwfl) + __nonnull_attribute__ (1); + +/* Return DWFL from which THREAD was created using dwfl_getthreads. */ +Dwfl *dwfl_thread_dwfl (Dwfl_Thread *thread) + __nonnull_attribute__ (1); + +/* Return positive TID (thread ID) for THREAD. This function never fails. */ +pid_t dwfl_thread_tid (Dwfl_Thread *thread) + __nonnull_attribute__ (1); + +/* Return thread for frame STATE. This function never fails. */ +Dwfl_Thread *dwfl_frame_thread (Dwfl_Frame *state) + __nonnull_attribute__ (1); + +/* Called by Dwfl_Thread_Callbacks.set_initial_registers implementation. + For every known continuous block of registers #include #include +#include #include #include #include #include #include "../libdw/libdwP.h" /* We need its INTDECLs. */ +#include "../libdwelf/libdwelfP.h" + +typedef struct Dwfl_Process Dwfl_Process; /* gettext helper macros. */ #define _(Str) dgettext ("elfutils", Str) @@ -74,7 +78,21 @@ DWFL_ERROR (BADELF, N_("not a valid ELF file")) \ DWFL_ERROR (WEIRD_TYPE, N_("cannot handle DWARF type description")) \ DWFL_ERROR (WRONG_ID_ELF, N_("ELF file does not match build ID")) \ - DWFL_ERROR (BAD_PRELINK, N_("corrupt .gnu.prelink_undo section data")) + DWFL_ERROR (BAD_PRELINK, N_("corrupt .gnu.prelink_undo section data")) \ + DWFL_ERROR (LIBEBL_BAD, N_("Internal error due to ebl")) \ + DWFL_ERROR (CORE_MISSING, N_("Missing data in core file")) \ + DWFL_ERROR (INVALID_REGISTER, N_("Invalid register")) \ + DWFL_ERROR (PROCESS_MEMORY_READ, N_("Error reading process memory")) \ + DWFL_ERROR (PROCESS_NO_ARCH, N_("Couldn't find architecture of any ELF")) \ + DWFL_ERROR (PARSE_PROC, N_("Error parsing /proc filesystem")) \ + DWFL_ERROR (INVALID_DWARF, N_("Invalid DWARF")) \ + DWFL_ERROR (UNSUPPORTED_DWARF, N_("Unsupported DWARF")) \ + DWFL_ERROR (NEXT_THREAD_FAIL, N_("Unable to find more threads")) \ + 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 (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; @@ -92,6 +110,9 @@ 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; GElf_Addr segment_align; /* Smallest granularity of segments. */ @@ -108,6 +129,8 @@ struct Dwfl GElf_Off lookup_tail_vaddr; GElf_Off lookup_tail_offset; int lookup_tail_ndx; + + char *executable_for_core; /* --executable if --core was specified. */ }; #define OFFLINE_REDZONE 0x10000 @@ -140,7 +163,7 @@ struct Dwfl_Module char *name; /* Iterator name for this module. */ GElf_Addr low_addr, high_addr; - struct dwfl_file main, debug; + struct dwfl_file main, debug, aux_sym; GElf_Addr main_bias; Ebl *ebl; GElf_Half e_type; /* GElf_Ehdr.e_type cache. */ @@ -150,12 +173,20 @@ struct Dwfl_Module struct dwfl_file *symfile; /* Either main or debug. */ Elf_Data *symdata; /* Data in the ELF symbol table section. */ + Elf_Data *aux_symdata; /* Data in the auxiliary ELF symbol table. */ size_t syments; /* sh_size / sh_entsize of that section. */ + size_t aux_syments; /* sh_size / sh_entsize of aux_sym section. */ int first_global; /* Index of first global symbol of table. */ + int aux_first_global; /* Index of first global of aux_sym table. */ Elf_Data *symstrdata; /* Data for its string table. */ + Elf_Data *aux_symstrdata; /* Data for aux_sym string table. */ Elf_Data *symxndxdata; /* Data in the extended section index table. */ + Elf_Data *aux_symxndxdata; /* Data in the extended auxiliary table. */ Dwarf *dw; /* libdw handle for its debugging info. */ + Dwarf *alt; /* Dwarf used for dwarf_setalt, or NULL. */ + int alt_fd; /* descriptor, only valid when alt != NULL. */ + Elf *alt_elf; /* Elf for alt Dwarf. */ Dwfl_Error symerr; /* Previous failure to load symbols. */ Dwfl_Error dwerr; /* Previous failure to load DWARF. */ @@ -182,7 +213,72 @@ struct Dwfl_Module bool gc; /* Mark/sweep flag. */ }; +/* This holds information common for all the threads/tasks/TIDs of one process + for backtraces. */ + +struct Dwfl_Process +{ + struct Dwfl *dwfl; + pid_t pid; + const Dwfl_Thread_Callbacks *callbacks; + void *callbacks_arg; + struct ebl *ebl; + bool ebl_close:1; +}; + +/* See its typedef in libdwfl.h. */ + +struct Dwfl_Thread +{ + Dwfl_Process *process; + pid_t tid; + /* The current frame being unwound. Initially it is the bottom frame. + Later the processed frames get freed and this pointer is updated. */ + Dwfl_Frame *unwound; + void *callbacks_arg; +}; + +/* See its typedef in libdwfl.h. */ + +struct Dwfl_Frame +{ + Dwfl_Thread *thread; + /* Previous (outer) frame. */ + Dwfl_Frame *unwound; + bool signal_frame : 1; + bool initial_frame : 1; + enum + { + /* This structure is still being initialized or there was an error + initializing it. */ + DWFL_FRAME_STATE_ERROR, + /* PC field is valid. */ + DWFL_FRAME_STATE_PC_SET, + /* PC field is undefined, this means the next (inner) frame was the + outermost frame. */ + DWFL_FRAME_STATE_PC_UNDEFINED + } pc_state; + /* Either initialized from appropriate REGS element or on some archs + initialized separately as the return address has no DWARF register. */ + Dwarf_Addr pc; + /* (1 << X) bitmask where 0 <= X < ebl_frame_nregs. */ + uint64_t regs_set[3]; + /* REGS array size is ebl_frame_nregs. + REGS_SET tells which of the REGS are valid. */ + Dwarf_Addr regs[]; +}; + +/* Fetch value from Dwfl_Frame->regs indexed by DWARF REGNO. + No error code is set if the function returns FALSE. */ +bool __libdwfl_frame_reg_get (Dwfl_Frame *state, unsigned regno, + Dwarf_Addr *val) + internal_function; +/* Store value to Dwfl_Frame->regs indexed by DWARF REGNO. + No error code is set if the function returns FALSE. */ +bool __libdwfl_frame_reg_set (Dwfl_Frame *state, unsigned regno, + Dwarf_Addr val) + internal_function; /* Information cached about each CU in Dwfl_Module.dw. */ struct dwfl_cu @@ -253,20 +349,40 @@ dwfl_deadjust_dwarf_addr (Dwfl_Module *mod, Dwarf_Addr addr) + mod->debug.address_sync); } +static inline Dwarf_Addr +dwfl_adjusted_aux_sym_addr (Dwfl_Module *mod, Dwarf_Addr addr) +{ + return dwfl_adjusted_address (mod, (addr + - mod->aux_sym.address_sync + + mod->main.address_sync)); +} + +static inline Dwarf_Addr +dwfl_deadjust_aux_sym_addr (Dwfl_Module *mod, Dwarf_Addr addr) +{ + return (dwfl_deadjust_address (mod, addr) + - mod->main.address_sync + + mod->aux_sym.address_sync); +} + static inline GElf_Addr -dwfl_adjusted_st_value (Dwfl_Module *mod, GElf_Addr addr) +dwfl_adjusted_st_value (Dwfl_Module *mod, Elf *symelf, GElf_Addr addr) { - if (mod->symfile == &mod->main) + if (symelf == mod->main.elf) return dwfl_adjusted_address (mod, addr); - return dwfl_adjusted_dwarf_addr (mod, addr); + if (symelf == mod->debug.elf) + return dwfl_adjusted_dwarf_addr (mod, addr); + return dwfl_adjusted_aux_sym_addr (mod, addr); } static inline GElf_Addr -dwfl_deadjust_st_value (Dwfl_Module *mod, GElf_Addr addr) +dwfl_deadjust_st_value (Dwfl_Module *mod, Elf *symelf, GElf_Addr addr) { - if (mod->symfile == &mod->main) + if (symelf == mod->main.elf) return dwfl_deadjust_address (mod, addr); - return dwfl_deadjust_dwarf_addr (mod, addr); + if (symelf == mod->debug.elf) + return dwfl_deadjust_dwarf_addr (mod, addr); + return dwfl_deadjust_aux_sym_addr (mod, addr); } /* This describes a contiguous address range that lies in a single CU. @@ -278,6 +394,56 @@ struct dwfl_arange }; +/* Structure used for keeping track of ptrace attaching a thread. + Shared by linux-pid-attach and linux-proc-maps. If it has been setup + then get the instance through __libdwfl_get_pid_arg. */ +struct __libdwfl_pid_arg +{ + DIR *dir; + /* It is 0 if not used. */ + pid_t tid_attached; + /* Valid only if TID_ATTACHED is not zero. */ + bool tid_was_stopped; + /* True if threads are ptrace stopped by caller. */ + bool assume_ptrace_stopped; +}; + +/* If DWfl is not NULL and a Dwfl_Process has been setup that has + Dwfl_Thread_Callbacks set to pid_thread_callbacks, then return the + callbacks_arg, which will be a struct __libdwfl_pid_arg. Otherwise + returns NULL. */ +extern struct __libdwfl_pid_arg *__libdwfl_get_pid_arg (Dwfl *dwfl) + internal_function; + +/* Makes sure the given tid is attached. On success returns true and + sets tid_was_stopped. */ +extern bool __libdwfl_ptrace_attach (pid_t tid, bool *tid_was_stoppedp) + internal_function; + +/* Detaches a tid that was attached through + __libdwfl_ptrace_attach. Must be given the tid_was_stopped as set + by __libdwfl_ptrace_attach. */ +extern void __libdwfl_ptrace_detach (pid_t tid, bool tid_was_stopped) + internal_function; + + +/* Internal wrapper for old dwfl_module_getsym and new dwfl_module_getsym_info. + adjust_st_value set to true returns adjusted SYM st_value, set to false + it will not adjust SYM at all, but does match against resolved *ADDR. */ +extern const char *__libdwfl_getsym (Dwfl_Module *mod, int ndx, GElf_Sym *sym, + GElf_Addr *addr, GElf_Word *shndxp, + Elf **elfp, Dwarf_Addr *biasp, + bool *resolved, bool adjust_st_value) + internal_function; + +/* Internal wrapper for old dwfl_module_addrsym and new dwfl_module_addrinfo. + adjust_st_value set to true returns adjusted SYM st_value, set to false + it will not adjust SYM at all, but does match against resolved values. */ +extern const char *__libdwfl_addrsym (Dwfl_Module *mod, GElf_Addr addr, + GElf_Off *off, GElf_Sym *sym, + GElf_Word *shndxp, Elf **elfp, + Dwarf_Addr *bias, + bool adjust_st_value) internal_function; extern void __libdwfl_module_free (Dwfl_Module *mod) internal_function; @@ -294,6 +460,12 @@ extern void __libdwfl_getelf (Dwfl_Module *mod) internal_function; extern Dwfl_Error __libdwfl_relocate (Dwfl_Module *mod, Elf *file, bool debug) internal_function; +/* Find the section index in mod->main.elf that contains the given + *ADDR. Adjusts *ADDR to be section relative on success, returns + SHN_UNDEF on failure. */ +extern size_t __libdwfl_find_section_ndx (Dwfl_Module *mod, Dwarf_Addr *addr) + internal_function; + /* Process (simple) relocations in arbitrary section TSCN of an ET_REL file. RELOCSCN is SHT_REL or SHT_RELA and TSCN is its sh_info target section. */ extern Dwfl_Error __libdwfl_relocate_section (Dwfl_Module *mod, Elf *relocated, @@ -310,7 +482,6 @@ extern Dwfl_Error __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, GElf_Addr *value) internal_function; - /* Ensure that MOD->ebl is set up. */ extern Dwfl_Error __libdwfl_module_getebl (Dwfl_Module *mod) internal_function; @@ -333,6 +504,17 @@ extern Dwfl_Error __libdwfl_addrcu (Dwfl_Module *mod, Dwarf_Addr addr, extern Dwfl_Error __libdwfl_cu_getsrclines (struct dwfl_cu *cu) internal_function; +/* Look in ELF for an NT_GNU_BUILD_ID note. Store it to BUILD_ID_BITS, + its vaddr in ELF to BUILD_ID_VADDR (it is unrelocated, even if MOD is not + NULL) and store length to BUILD_ID_LEN. Returns -1 for errors, 1 if it was + stored and 0 if no note is found. MOD may be NULL, MOD must be non-NULL + only if ELF is ET_REL. */ +extern int __libdwfl_find_elf_build_id (Dwfl_Module *mod, Elf *elf, + const void **build_id_bits, + GElf_Addr *build_id_elfaddr, + int *build_id_len) + internal_function; + /* Look in ELF for an NT_GNU_BUILD_ID note. If SET is true, store it in MOD and return its length. If SET is false, instead compare it to that stored in MOD and return 2 if they match, 1 if they do not. @@ -341,19 +523,35 @@ extern int __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf) internal_function; /* Open a main or debuginfo file by its build ID, returns the fd. */ +extern int __libdwfl_open_mod_by_build_id (Dwfl_Module *mod, bool debug, + char **file_name) internal_function; + +/* Same, but takes an explicit build_id, can also be used for alt debug. */ extern int __libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, - char **file_name) internal_function; + char **file_name, const size_t id_len, + const uint8_t *id) internal_function; extern uint32_t __libdwfl_crc32 (uint32_t crc, unsigned char *buf, size_t len) attribute_hidden; extern int __libdwfl_crc32_file (int fd, uint32_t *resp) attribute_hidden; +/* Given ELF and some parameters return TRUE if the *P return value parameters + have been successfully filled in. Any of the *P parameters can be NULL. */ +extern bool __libdwfl_elf_address_range (Elf *elf, GElf_Addr base, + bool add_p_vaddr, bool sanity, + GElf_Addr *vaddrp, + GElf_Addr *address_syncp, + GElf_Addr *startp, GElf_Addr *endp, + GElf_Addr *biasp, GElf_Half *e_typep) + internal_function; + /* Meat of dwfl_report_elf, given elf_begin just called. Consumes ELF on success, not on failure. */ extern Dwfl_Module *__libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd, - Elf *elf, GElf_Addr base, bool sanity) + Elf *elf, GElf_Addr base, + bool add_p_vaddr, bool sanity) internal_function; /* Meat of dwfl_report_offline. */ @@ -364,6 +562,25 @@ extern Dwfl_Module *__libdwfl_report_offline (Dwfl *dwfl, const char *name, const char *)) internal_function; +/* Free PROCESS. Unlink and free also any structures it references. */ +extern void __libdwfl_process_free (Dwfl_Process *process) + internal_function; + +/* Update STATE->unwound for the unwound frame. + On error STATE->unwound == NULL + or STATE->unwound->pc_state == DWFL_FRAME_STATE_ERROR; + in such case dwfl_errno () is set. + If STATE->unwound->pc_state == DWFL_FRAME_STATE_PC_UNDEFINED + then STATE was the last valid frame. */ +extern void __libdwfl_frame_unwind (Dwfl_Frame *state) + internal_function; + +/* Align segment START downwards or END upwards addresses according to DWFL. */ +extern GElf_Addr __libdwfl_segment_start (Dwfl *dwfl, GElf_Addr start) + internal_function; +extern GElf_Addr __libdwfl_segment_end (Dwfl *dwfl, GElf_Addr end) + internal_function; + /* Decompression wrappers: decompress whole file into memory. */ extern Dwfl_Error __libdw_gunzip (int fd, off64_t start_offset, void *mapped, size_t mapped_size, @@ -391,6 +608,11 @@ extern Dwfl_Error __libdw_open_file (int *fdp, Elf **elfp, bool close_on_fail, bool archive_ok) internal_function; +/* Fetch PT_DYNAMIC P_VADDR from ELF and store it to *VADDRP. Return success. + *VADDRP is not modified if the function fails. */ +extern bool __libdwfl_dynamic_vaddr_get (Elf *elf, GElf_Addr *vaddrp) + internal_function; + /* These are working nicely for --core, but are not ready to be exported interfaces quite yet. */ @@ -409,13 +631,35 @@ typedef bool Dwfl_Module_Callback (Dwfl_Module *mod, void **userdata, GElf_Off whole, GElf_Off contiguous, void *arg, Elf **elfp); +/* One shared library (or executable) info from DT_DEBUG link map. */ +struct r_debug_info_module +{ + struct r_debug_info_module *next; + /* FD is -1 iff ELF is NULL. */ + int fd; + Elf *elf; + GElf_Addr l_ld; + /* START and END are both zero if not valid. */ + GElf_Addr start, end; + bool disk_file_has_build_id; + char name[0]; +}; + +/* Information gathered from DT_DEBUG by dwfl_link_map_report hinted to + dwfl_segment_report_module. */ +struct r_debug_info +{ + struct r_debug_info_module *module; +}; + /* ... */ extern 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); + void *read_eagerly_arg, + const struct r_debug_info *r_debug_info); /* Report a module for entry in the dynamic linker's struct link_map list. For each link_map entry, if an existing module resides at its address, @@ -429,10 +673,16 @@ extern int dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, only find where to begin if the correct executable file was previously reported and preloaded as with dwfl_report_elf. + Fill in R_DEBUG_INFO if it is not NULL. It should be cleared by the + caller, this function does not touch fields it does not need to modify. + If R_DEBUG_INFO is not NULL then no modules get added to DWFL, caller + has to add them from filled in R_DEBUG_INFO. + Returns the number of modules found, or -1 for errors. */ extern int dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, Dwfl_Memory_Callback *memory_callback, - void *memory_callback_arg); + void *memory_callback_arg, + struct r_debug_info *r_debug_info); /* Avoid PLT entries. */ @@ -443,16 +693,20 @@ INTDECL (dwfl_addrmodule) INTDECL (dwfl_addrsegment) INTDECL (dwfl_addrdwarf) INTDECL (dwfl_addrdie) +INTDECL (dwfl_core_file_attach) INTDECL (dwfl_core_file_report) INTDECL (dwfl_getmodules) INTDECL (dwfl_module_addrdie) INTDECL (dwfl_module_address_section) +INTDECL (dwfl_module_addrinfo) INTDECL (dwfl_module_addrsym) INTDECL (dwfl_module_build_id) INTDECL (dwfl_module_getdwarf) INTDECL (dwfl_module_getelf) INTDECL (dwfl_module_getsym) +INTDECL (dwfl_module_getsym_info) INTDECL (dwfl_module_getsymtab) +INTDECL (dwfl_module_getsymtab_first_global) INTDECL (dwfl_module_getsrc) INTDECL (dwfl_module_report_build_id) INTDECL (dwfl_report_elf) @@ -468,6 +722,7 @@ INTDECL (dwfl_standard_find_debuginfo) INTDECL (dwfl_link_map_report) INTDECL (dwfl_linux_kernel_find_elf) INTDECL (dwfl_linux_kernel_module_section_address) +INTDECL (dwfl_linux_proc_attach) INTDECL (dwfl_linux_proc_report) INTDECL (dwfl_linux_proc_maps_report) INTDECL (dwfl_linux_proc_find_elf) @@ -478,6 +733,17 @@ INTDECL (dwfl_offline_section_address) INTDECL (dwfl_module_relocate_address) INTDECL (dwfl_module_dwarf_cfi) INTDECL (dwfl_module_eh_cfi) +INTDECL (dwfl_attach_state) +INTDECL (dwfl_pid) +INTDECL (dwfl_thread_dwfl) +INTDECL (dwfl_thread_tid) +INTDECL (dwfl_frame_thread) +INTDECL (dwfl_thread_state_registers) +INTDECL (dwfl_thread_state_register_pc) +INTDECL (dwfl_getthread_frames) +INTDECL (dwfl_getthreads) +INTDECL (dwfl_thread_getframes) +INTDECL (dwfl_frame_pc) /* Leading arguments standard to callbacks passed a Dwfl_Module. */ #define MODCB_ARGS(mod) (mod), &(mod)->userdata, (mod)->name, (mod)->low_addr diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 8543ed6..272f89b 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-2010 Red Hat, Inc. + Copyright (C) 2008-2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -28,9 +28,12 @@ #include #include "libdwflP.h" +#include "../libdw/memory-access.h" +#include "system.h" #include #include +#include /* This element is always provided and always has a constant value. This makes it an easy thing to scan for to discern the format. */ @@ -38,18 +41,6 @@ #define PROBE_VAL32 sizeof (Elf32_Phdr) #define PROBE_VAL64 sizeof (Elf64_Phdr) -#if BYTE_ORDER == BIG_ENDIAN -# define BE32(x) (x) -# define BE64(x) (x) -# define LE32(x) bswap_32 (x) -# define LE64(x) bswap_64 (x) -#else -# define LE32(x) (x) -# define LE64(x) (x) -# define BE32(x) bswap_32 (x) -# define BE64(x) bswap_64 (x) -#endif - /* Examine an auxv data block and determine its format. Return true iff we figured it out. */ @@ -66,15 +57,22 @@ auxv_format_probe (const void *auxv, size_t size, inline bool check64 (size_t i) { - if (u->a64[i].a_type == BE64 (PROBE_TYPE) - && u->a64[i].a_un.a_val == BE64 (PROBE_VAL64)) + /* The AUXV pointer might not even be naturally aligned for 64-bit + data, because note payloads in a core file are not aligned. + But we assume the data is 32-bit aligned. */ + + uint64_t type = read_8ubyte_unaligned_noncvt (&u->a64[i].a_type); + uint64_t val = read_8ubyte_unaligned_noncvt (&u->a64[i].a_un.a_val); + + if (type == BE64 (PROBE_TYPE) + && val == BE64 (PROBE_VAL64)) { *elfdata = ELFDATA2MSB; return true; } - if (u->a64[i].a_type == LE64 (PROBE_TYPE) - && u->a64[i].a_un.a_val == LE64 (PROBE_VAL64)) + if (type == LE64 (PROBE_TYPE) + && val == LE64 (PROBE_VAL64)) { *elfdata = ELFDATA2LSB; return true; @@ -225,7 +223,10 @@ addrsize (uint_fast8_t elfclass) } /* Report a module for each struct link_map in the linked list at r_map - in the struct r_debug at R_DEBUG_VADDR. + in the struct r_debug at R_DEBUG_VADDR. For r_debug_info description + see dwfl_link_map_report in libdwflP.h. If R_DEBUG_INFO is not NULL then no + modules get added to DWFL, caller has to add them from filled in + R_DEBUG_INFO. For each link_map entry, if an existing module resides at its address, this just modifies that module's name and suggested file name. If @@ -237,7 +238,8 @@ static int report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, Dwfl *dwfl, GElf_Addr r_debug_vaddr, Dwfl_Memory_Callback *memory_callback, - void *memory_callback_arg) + void *memory_callback_arg, + struct r_debug_info *r_debug_info) { /* Skip r_version, to aligned r_map field. */ GElf_Addr read_vaddr = r_debug_vaddr + addrsize (elfclass); @@ -319,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]; @@ -352,42 +358,117 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata, if (name != NULL && name[0] == '\0') name = NULL; - /* If content-sniffing already reported a module covering - the same area, find that existing module to adjust. - The l_ld address is the only one we know for sure - to be within the module's own segments (its .dynamic). */ - Dwfl_Module *mod = INTUSE(dwfl_addrmodule) (dwfl, l_ld); - if (mod != NULL) + if (iterations == 1 && dwfl->executable_for_core != NULL) + name = dwfl->executable_for_core; + + struct r_debug_info_module *r_debug_info_module = NULL; + if (r_debug_info != NULL) + { + /* Save link map information about valid shared library (or + executable) which has not been found on disk. */ + const char *name1 = name == NULL ? "" : name; + r_debug_info_module = malloc (sizeof (*r_debug_info_module) + + strlen (name1) + 1); + if (r_debug_info_module == NULL) + return release_buffer (result); + r_debug_info_module->fd = -1; + r_debug_info_module->elf = NULL; + r_debug_info_module->l_ld = l_ld; + r_debug_info_module->start = 0; + r_debug_info_module->end = 0; + r_debug_info_module->disk_file_has_build_id = false; + strcpy (r_debug_info_module->name, name1); + r_debug_info_module->next = r_debug_info->module; + r_debug_info->module = r_debug_info_module; + } + + Dwfl_Module *mod = NULL; + if (name != NULL) { - /* We have a module. We can give it a better name from l_name. */ - if (name != NULL && mod->name[0] == '[') + /* This code is mostly inlined dwfl_report_elf. */ + // XXX hook for sysroot + int fd = open64 (name, O_RDONLY); + if (fd >= 0) { - char *newname = strdup (basename (name)); - if (newname != NULL) + Elf *elf; + Dwfl_Error error = __libdw_open_file (&fd, &elf, true, false); + GElf_Addr elf_dynamic_vaddr; + if (error == DWFL_E_NOERROR + && __libdwfl_dynamic_vaddr_get (elf, &elf_dynamic_vaddr)) { - free (mod->name); - mod->name = newname; + const void *build_id_bits; + GElf_Addr build_id_elfaddr; + int build_id_len; + bool valid = true; + + if (__libdwfl_find_elf_build_id (NULL, elf, &build_id_bits, + &build_id_elfaddr, + &build_id_len) > 0 + && build_id_elfaddr != 0) + { + if (r_debug_info_module != NULL) + r_debug_info_module->disk_file_has_build_id = true; + GElf_Addr build_id_vaddr = (build_id_elfaddr + - elf_dynamic_vaddr + l_ld); + + release_buffer (0); + int segndx = INTUSE(dwfl_addrsegment) (dwfl, + build_id_vaddr, + NULL); + if (! (*memory_callback) (dwfl, segndx, + &buffer, &buffer_available, + build_id_vaddr, build_id_len, + memory_callback_arg)) + { + /* File has valid build-id which cannot be read from + memory. This happens for core files without bit 4 + (0x10) set in Linux /proc/PID/coredump_filter. */ + } + else + { + if (memcmp (build_id_bits, buffer, build_id_len) != 0) + /* File has valid build-id which does not match + the one in memory. */ + valid = false; + release_buffer (0); + } + } + + 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, base, + true, true); + if (mod != NULL) + { + elf = NULL; + fd = -1; + } + } + else if (__libdwfl_elf_address_range (elf, base, true, + true, NULL, NULL, + &r_debug_info_module->start, + &r_debug_info_module->end, + NULL, NULL)) + { + r_debug_info_module->elf = elf; + r_debug_info_module->fd = fd; + elf = NULL; + fd = -1; + } + } + if (elf != NULL) + elf_end (elf); + if (fd != -1) + close (fd); } } - - if (name == NULL && mod->name[0] == '/') - name = mod->name; - - /* If we don't have a file for it already, we can pre-install - the full file name from l_name. Opening the file by this - name will be the fallback when no build ID match is found. - XXX hook for sysroot */ - if (name != NULL && mod->main.name == NULL) - mod->main.name = strdup (name); - } - else if (name != NULL) - { - /* We have to find the file's phdrs to compute along with l_addr - what its runtime address boundaries are. */ - - // XXX hook for sysroot - mod = INTUSE(dwfl_report_elf) (dwfl, basename (name), - name, -1, l_addr); } if (mod != NULL) @@ -604,7 +685,8 @@ find_executable (Dwfl *dwfl, GElf_Addr at_phdr, GElf_Addr at_entry, int dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, Dwfl_Memory_Callback *memory_callback, - void *memory_callback_arg) + void *memory_callback_arg, + struct r_debug_info *r_debug_info) { GElf_Addr r_debug_vaddr = 0; @@ -618,29 +700,32 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, GElf_Xword phent = 0; GElf_Xword phnum = 0; -#define AUXV_SCAN(NN, BL) do \ - { \ - const Elf##NN##_auxv_t *av = auxv; \ - for (size_t i = 0; i < auxv_size / sizeof av[0]; ++i) \ - { \ - Elf##NN##_Addr val = BL##NN (av[i].a_un.a_val); \ - if (av[i].a_type == BL##NN (AT_ENTRY)) \ - entry = val; \ - else if (av[i].a_type == BL##NN (AT_PHDR)) \ - phdr = val; \ - else if (av[i].a_type == BL##NN (AT_PHNUM)) \ - phnum = val; \ - else if (av[i].a_type == BL##NN (AT_PHENT)) \ - phent = val; \ - else if (av[i].a_type == BL##NN (AT_PAGESZ)) \ - { \ - if (val > 1 \ - && (dwfl->segment_align == 0 \ - || val < dwfl->segment_align)) \ - dwfl->segment_align = val; \ - } \ - } \ - } \ +#define READ_AUXV32(ptr) read_4ubyte_unaligned_noncvt (ptr) +#define READ_AUXV64(ptr) read_8ubyte_unaligned_noncvt (ptr) +#define AUXV_SCAN(NN, BL) do \ + { \ + const Elf##NN##_auxv_t *av = auxv; \ + for (size_t i = 0; i < auxv_size / sizeof av[0]; ++i) \ + { \ + uint##NN##_t type = READ_AUXV##NN (&av[i].a_type); \ + uint##NN##_t val = BL##NN (READ_AUXV##NN (&av[i].a_un.a_val)); \ + if (type == BL##NN (AT_ENTRY)) \ + entry = val; \ + else if (type == BL##NN (AT_PHDR)) \ + phdr = val; \ + else if (type == BL##NN (AT_PHNUM)) \ + phnum = val; \ + else if (type == BL##NN (AT_PHENT)) \ + phent = val; \ + else if (type == BL##NN (AT_PAGESZ)) \ + { \ + if (val > 1 \ + && (dwfl->segment_align == 0 \ + || val < dwfl->segment_align)) \ + dwfl->segment_align = val; \ + } \ + } \ + } \ while (0) if (elfclass == ELFCLASS32) @@ -699,8 +784,65 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, .d_size = phnum * phent, .d_buf = NULL }; - if ((*memory_callback) (dwfl, phdr_segndx, &in.d_buf, &in.d_size, - phdr, phnum * phent, memory_callback_arg)) + bool in_ok = (*memory_callback) (dwfl, phdr_segndx, &in.d_buf, + &in.d_size, phdr, phnum * phent, + memory_callback_arg); + if (! in_ok && dwfl->executable_for_core != NULL) + { + /* AUXV -> PHDR -> DYNAMIC + Both AUXV and DYNAMIC should be always present in a core file. + PHDR may be missing in core file, try to read it from + EXECUTABLE_FOR_CORE to find where DYNAMIC is located in the + core file. */ + + int fd = open (dwfl->executable_for_core, O_RDONLY); + Elf *elf; + Dwfl_Error error = DWFL_E_ERRNO; + if (fd != -1) + error = __libdw_open_file (&fd, &elf, true, false); + if (error != DWFL_E_NOERROR) + { + __libdwfl_seterrno (error); + return false; + } + GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (elf, &ehdr_mem); + if (ehdr == NULL) + { + elf_end (elf); + close (fd); + __libdwfl_seterrno (DWFL_E_LIBELF); + return false; + } + if (ehdr->e_phnum != phnum || ehdr->e_phentsize != phent) + { + elf_end (elf); + close (fd); + __libdwfl_seterrno (DWFL_E_BADELF); + return false; + } + off_t off = ehdr->e_phoff; + assert (in.d_buf == NULL); + assert (in.d_size == phnum * phent); + in.d_buf = malloc (in.d_size); + if (unlikely (in.d_buf == NULL)) + { + elf_end (elf); + close (fd); + __libdwfl_seterrno (DWFL_E_NOMEM); + return false; + } + ssize_t nread = pread_retry (fd, in.d_buf, in.d_size, off); + elf_end (elf); + close (fd); + if (nread != (ssize_t) in.d_size) + { + free (in.d_buf); + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; + } + in_ok = true; + } + if (in_ok) { union { @@ -862,6 +1004,6 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, /* Now we can follow the dynamic linker's library list. */ return report_r_debug (elfclass, elfdata, dwfl, r_debug_vaddr, - &integrated_memory_callback, &mcb); + &integrated_memory_callback, &mcb, r_debug_info); } INTDEF (dwfl_link_map_report) diff --git a/libdwfl/linux-core-attach.c b/libdwfl/linux-core-attach.c new file mode 100644 index 0000000..5a7b3b3 --- /dev/null +++ b/libdwfl/linux-core-attach.c @@ -0,0 +1,427 @@ +/* Get Dwarf Frame state for target core file. + 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 + 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 . */ + +#include "libdwflP.h" +#include +#include "system.h" + +#include "../libdw/memory-access.h" + +#ifndef MIN +# define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif + +struct core_arg +{ + Elf *core; + Elf_Data *note_data; + size_t thread_note_offset; + Ebl *ebl; +}; + +struct thread_arg +{ + struct core_arg *core_arg; + size_t note_offset; +}; + +static bool +core_memory_read (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Word *result, + void *dwfl_arg) +{ + Dwfl_Process *process = dwfl->process; + struct core_arg *core_arg = dwfl_arg; + Elf *core = core_arg->core; + assert (core != NULL); + static size_t phnum; + if (elf_getphdrnum (core, &phnum) < 0) + { + __libdwfl_seterrno (DWFL_E_LIBELF); + return false; + } + for (size_t cnt = 0; cnt < phnum; ++cnt) + { + GElf_Phdr phdr_mem, *phdr = gelf_getphdr (core, cnt, &phdr_mem); + if (phdr == NULL || phdr->p_type != PT_LOAD) + continue; + /* Bias is zero here, a core file itself has no bias. */ + GElf_Addr start = __libdwfl_segment_start (dwfl, phdr->p_vaddr); + GElf_Addr end = __libdwfl_segment_end (dwfl, + phdr->p_vaddr + phdr->p_memsz); + unsigned bytes = ebl_get_elfclass (process->ebl) == ELFCLASS64 ? 8 : 4; + if (addr < start || addr + bytes > end) + continue; + Elf_Data *data; + data = elf_getdata_rawchunk (core, phdr->p_offset + addr - start, + bytes, ELF_T_ADDR); + if (data == NULL) + { + __libdwfl_seterrno (DWFL_E_LIBELF); + return false; + } + assert (data->d_size == bytes); + if (bytes == 8) + *result = read_8ubyte_unaligned_noncvt (data->d_buf); + else + *result = read_4ubyte_unaligned_noncvt (data->d_buf); + return true; + } + __libdwfl_seterrno (DWFL_E_ADDR_OUTOFRANGE); + return false; +} + +static pid_t +core_next_thread (Dwfl *dwfl __attribute__ ((unused)), void *dwfl_arg, + void **thread_argp) +{ + struct core_arg *core_arg = dwfl_arg; + Elf *core = core_arg->core; + GElf_Nhdr nhdr; + size_t name_offset; + size_t desc_offset; + Elf_Data *note_data = core_arg->note_data; + size_t offset; + + struct thread_arg *thread_arg; + if (*thread_argp == NULL) + { + core_arg->thread_note_offset = 0; + thread_arg = malloc (sizeof (*thread_arg)); + if (thread_arg == NULL) + { + __libdwfl_seterrno (DWFL_E_NOMEM); + return -1; + } + thread_arg->core_arg = core_arg; + *thread_argp = thread_arg; + } + else + thread_arg = (struct thread_arg *) *thread_argp; + + while (offset = core_arg->thread_note_offset, offset < note_data->d_size + && (core_arg->thread_note_offset = gelf_getnote (note_data, offset, + &nhdr, &name_offset, + &desc_offset)) > 0) + { + /* Do not check NAME for now, help broken Linux kernels. */ + const char *name = note_data->d_buf + name_offset; + const char *desc = note_data->d_buf + desc_offset; + GElf_Word regs_offset; + size_t nregloc; + const Ebl_Register_Location *reglocs; + size_t nitems; + const Ebl_Core_Item *items; + if (! ebl_core_note (core_arg->ebl, &nhdr, name, + ®s_offset, &nregloc, ®locs, &nitems, &items)) + { + /* This note may be just not recognized, skip it. */ + continue; + } + if (nhdr.n_type != NT_PRSTATUS) + continue; + const Ebl_Core_Item *item; + for (item = items; item < items + nitems; item++) + if (strcmp (item->name, "pid") == 0) + break; + if (item == items + nitems) + continue; + 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; + eu_static_assert (sizeof val32 <= sizeof tid); + thread_arg->note_offset = offset; + return tid; + } + + free (thread_arg); + return 0; +} + +static bool +core_set_initial_registers (Dwfl_Thread *thread, void *thread_arg_voidp) +{ + struct thread_arg *thread_arg = thread_arg_voidp; + struct core_arg *core_arg = thread_arg->core_arg; + Elf *core = core_arg->core; + size_t offset = thread_arg->note_offset; + GElf_Nhdr nhdr; + size_t name_offset; + size_t desc_offset; + Elf_Data *note_data = core_arg->note_data; + size_t nregs = ebl_frame_nregs (core_arg->ebl); + assert (nregs > 0); + assert (offset < note_data->d_size); + size_t getnote_err = gelf_getnote (note_data, offset, &nhdr, &name_offset, + &desc_offset); + /* __libdwfl_attach_state_for_core already verified the note is there. */ + assert (getnote_err != 0); + /* Do not check NAME for now, help broken Linux kernels. */ + const char *name = note_data->d_buf + name_offset; + const char *desc = note_data->d_buf + desc_offset; + GElf_Word regs_offset; + size_t nregloc; + const Ebl_Register_Location *reglocs; + size_t nitems; + const Ebl_Core_Item *items; + int core_note_err = ebl_core_note (core_arg->ebl, &nhdr, name, ®s_offset, + &nregloc, ®locs, &nitems, &items); + /* __libdwfl_attach_state_for_core already verified the note is there. */ + assert (core_note_err != 0); + assert (nhdr.n_type == NT_PRSTATUS); + const Ebl_Core_Item *item; + for (item = items; item < items + nitems; item++) + if (strcmp (item->name, "pid") == 0) + break; + assert (item < items + nitems); + pid_t tid; + { + 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; + eu_static_assert (sizeof val32 <= sizeof tid); + } + /* core_next_thread already found this TID there. */ + assert (tid == INTUSE(dwfl_thread_tid) (thread)); + for (item = items; item < items + nitems; item++) + if (item->pc_register) + break; + if (item < items + nitems) + { + Dwarf_Word pc; + switch (gelf_getclass (core) == ELFCLASS32 ? 32 : 64) + { + case 32:; + 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 = read_8ubyte_unaligned_noncvt (desc + item->offset); + val64 = (elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB + ? be64toh (val64) : le64toh (val64)); + pc = val64; + break; + default: + abort (); + } + INTUSE(dwfl_thread_state_register_pc) (thread, pc); + } + desc += regs_offset; + for (size_t regloci = 0; regloci < nregloc; regloci++) + { + const Ebl_Register_Location *regloc = reglocs + regloci; + // Iterate even regs out of NREGS range so that we can find pc_register. + if (regloc->bits != 32 && regloc->bits != 64) + continue; + const char *reg_desc = desc + regloc->offset; + for (unsigned regno = regloc->regno; + regno < regloc->regno + (regloc->count ?: 1U); + regno++) + { + /* PPC provides DWARF register 65 irrelevant for + CFI which clashes with register 108 (LR) we need. + LR (108) is provided earlier (in NT_PRSTATUS) than the # 65. + FIXME: It depends now on their order in core notes. + FIXME: It uses private function. */ + if (regno < nregs + && __libdwfl_frame_reg_get (thread->unwound, regno, NULL)) + continue; + Dwarf_Word val; + switch (regloc->bits) + { + case 32:; + 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)); + /* Do a host width conversion. */ + val = val32; + break; + case 64:; + 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)); + assert (sizeof (*thread->unwound->regs) == sizeof val64); + val = val64; + break; + default: + abort (); + } + /* Registers not valid for CFI are just ignored. */ + if (regno < nregs) + INTUSE(dwfl_thread_state_registers) (thread, regno, 1, &val); + if (regloc->pc_register) + INTUSE(dwfl_thread_state_register_pc) (thread, val); + reg_desc += regloc->pad; + } + } + return true; +} + +static void +core_detach (Dwfl *dwfl __attribute__ ((unused)), void *dwfl_arg) +{ + struct core_arg *core_arg = dwfl_arg; + ebl_closebackend (core_arg->ebl); + free (core_arg); +} + +static const Dwfl_Thread_Callbacks core_thread_callbacks = +{ + core_next_thread, + NULL, /* get_thread */ + core_memory_read, + core_set_initial_registers, + core_detach, + NULL, /* core_thread_detach */ +}; + +int +dwfl_core_file_attach (Dwfl *dwfl, Elf *core) +{ + Dwfl_Error err = DWFL_E_NOERROR; + Ebl *ebl = ebl_openbackend (core); + if (ebl == NULL) + { + 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) + { + err = DWFL_E_NO_UNWIND; + fail: + ebl_closebackend (ebl); + goto fail_err; + } + GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (core, &ehdr_mem); + if (ehdr == NULL) + { + err = DWFL_E_LIBELF; + goto fail; + } + if (ehdr->e_type != ET_CORE) + { + err = DWFL_E_NO_CORE_FILE; + goto fail; + } + size_t phnum; + if (elf_getphdrnum (core, &phnum) < 0) + { + err = DWFL_E_LIBELF; + goto fail; + } + pid_t pid = -1; + Elf_Data *note_data = NULL; + for (size_t cnt = 0; cnt < phnum; ++cnt) + { + GElf_Phdr phdr_mem, *phdr = gelf_getphdr (core, cnt, &phdr_mem); + if (phdr != NULL && phdr->p_type == PT_NOTE) + { + note_data = elf_getdata_rawchunk (core, phdr->p_offset, + phdr->p_filesz, ELF_T_NHDR); + break; + } + } + if (note_data == NULL) + { + err = DWFL_E_LIBELF; + goto fail; + } + size_t offset = 0; + GElf_Nhdr nhdr; + size_t name_offset; + size_t desc_offset; + while (offset < note_data->d_size + && (offset = gelf_getnote (note_data, offset, + &nhdr, &name_offset, &desc_offset)) > 0) + { + /* Do not check NAME for now, help broken Linux kernels. */ + const char *name = note_data->d_buf + name_offset; + const char *desc = note_data->d_buf + desc_offset; + GElf_Word regs_offset; + size_t nregloc; + const Ebl_Register_Location *reglocs; + size_t nitems; + const Ebl_Core_Item *items; + if (! ebl_core_note (ebl, &nhdr, name, + ®s_offset, &nregloc, ®locs, &nitems, &items)) + { + /* This note may be just not recognized, skip it. */ + continue; + } + if (nhdr.n_type != NT_PRPSINFO) + continue; + const Ebl_Core_Item *item; + for (item = items; item < items + nitems; item++) + if (strcmp (item->name, "pid") == 0) + break; + if (item == items + nitems) + continue; + 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; + eu_static_assert (sizeof val32 <= sizeof pid); + break; + } + if (pid == -1) + { + /* No valid NT_PRPSINFO recognized in this CORE. */ + err = DWFL_E_BADELF; + goto fail; + } + struct core_arg *core_arg = malloc (sizeof *core_arg); + if (core_arg == NULL) + { + err = DWFL_E_NOMEM; + goto fail; + } + core_arg->core = core; + core_arg->note_data = note_data; + core_arg->thread_note_offset = 0; + core_arg->ebl = ebl; + if (! INTUSE(dwfl_attach_state) (dwfl, core, pid, &core_thread_callbacks, + core_arg)) + { + free (core_arg); + ebl_closebackend (ebl); + return -1; + } + return pid; +} +INTDEF (dwfl_core_file_attach) diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c index bafe53c..e4065d8 100644 --- a/libdwfl/linux-kernel-modules.c +++ b/libdwfl/linux-kernel-modules.c @@ -1,5 +1,5 @@ /* Standard libdwfl callbacks for debugging the running Linux kernel. - Copyright (C) 2005-2011 Red Hat, Inc. + Copyright (C) 2005-2011, 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -88,23 +88,22 @@ try_kernel_name (Dwfl *dwfl, char **fname, bool try_debug) if (fd < 0) { - char *debugfname = NULL; Dwfl_Module fakemod = { .dwfl = dwfl }; /* First try the file's unadorned basename as DEBUGLINK_FILE, to look for "vmlinux" files. */ fd = INTUSE(dwfl_standard_find_debuginfo) (&fakemod, NULL, NULL, 0, *fname, basename (*fname), 0, - &debugfname); + &fakemod.debug.name); if (fd < 0 && try_debug) /* Next, let the call use the default of basename + ".debug", to look for "vmlinux.debug" files. */ fd = INTUSE(dwfl_standard_find_debuginfo) (&fakemod, NULL, NULL, 0, *fname, NULL, 0, - &debugfname); - if (debugfname != NULL) + &fakemod.debug.name); + if (fakemod.debug.name != NULL) { free (*fname); - *fname = debugfname; + *fname = fakemod.debug.name; } } @@ -216,8 +215,14 @@ report_kernel (Dwfl *dwfl, const char **release, if (report) { + /* Note that on some architectures (e.g. x86_64) the vmlinux + is ET_EXEC, while on others (e.g. ppc64) it is ET_DYN. + In both cases the phdr p_vaddr load address will be non-zero. + We want the image to be placed as if it was ET_DYN, so + pass true for add_p_vaddr which will do the right thing + (in combination with a zero base) in either case. */ Dwfl_Module *mod = INTUSE(dwfl_report_elf) (dwfl, KERNEL_MODNAME, - fname, fd, 0); + fname, fd, 0, true); if (mod == NULL) result = -1; else @@ -225,12 +230,12 @@ report_kernel (Dwfl *dwfl, const char **release, mod->e_type = ET_DYN; } + free (fname); + if (!report || result < 0) close (fd); } - free (fname); - return result; } @@ -245,9 +250,10 @@ report_kernel_archive (Dwfl *dwfl, const char **release, return result; char *archive; - if (unlikely ((*release)[0] == '/' - ? asprintf (&archive, "%s/debug.a", *release) - : asprintf (&archive, MODULEDIRFMT "/debug.a", *release)) < 0) + int res = (((*release)[0] == '/') + ? asprintf (&archive, "%s/debug.a", *release) + : asprintf (&archive, MODULEDIRFMT "/debug.a", *release)); + if (unlikely (res < 0)) return ENOMEM; int fd = try_kernel_name (dwfl, &archive, false); @@ -296,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 new file mode 100644 index 0000000..ae71702 --- /dev/null +++ b/libdwfl/linux-pid-attach.c @@ -0,0 +1,475 @@ +/* Get Dwarf Frame state for target live PID process. + 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 + 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 . */ + +#include "libdwflP.h" +#include +#include +#include +#include +#include + +#ifndef MAX +# define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif + +#ifdef __linux__ + +static bool +linux_proc_pid_is_stopped (pid_t pid) +{ + char buffer[64]; + FILE *procfile; + bool retval, have_state; + + snprintf (buffer, sizeof (buffer), "/proc/%ld/status", (long) pid); + procfile = fopen (buffer, "r"); + if (procfile == NULL) + return false; + + have_state = false; + while (fgets (buffer, sizeof (buffer), procfile) != NULL) + if (strncmp (buffer, "State:", 6) == 0) + { + have_state = true; + break; + } + retval = (have_state && strstr (buffer, "T (stopped)") != NULL); + fclose (procfile); + return retval; +} + +bool +internal_function +__libdwfl_ptrace_attach (pid_t tid, bool *tid_was_stoppedp) +{ + if (ptrace (PTRACE_ATTACH, tid, NULL, NULL) != 0) + { + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; + } + *tid_was_stoppedp = linux_proc_pid_is_stopped (tid); + if (*tid_was_stoppedp) + { + /* Make sure there is a SIGSTOP signal pending even when the process is + already State: T (stopped). Older kernels might fail to generate + a SIGSTOP notification in that case in response to our PTRACE_ATTACH + above. Which would make the waitpid below wait forever. So emulate + it. Since there can only be one SIGSTOP notification pending this is + safe. See also gdb/linux-nat.c linux_nat_post_attach_wait. */ + syscall (__NR_tkill, tid, SIGSTOP); + ptrace (PTRACE_CONT, tid, NULL, NULL); + } + for (;;) + { + int status; + if (waitpid (tid, &status, __WALL) != tid || !WIFSTOPPED (status)) + { + int saved_errno = errno; + ptrace (PTRACE_DETACH, tid, NULL, NULL); + errno = saved_errno; + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; + } + if (WSTOPSIG (status) == SIGSTOP) + break; + if (ptrace (PTRACE_CONT, tid, NULL, + (void *) (uintptr_t) WSTOPSIG (status)) != 0) + { + int saved_errno = errno; + ptrace (PTRACE_DETACH, tid, NULL, NULL); + errno = saved_errno; + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; + } + } + return true; +} + +static bool +pid_memory_read (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Word *result, void *arg) +{ + struct __libdwfl_pid_arg *pid_arg = arg; + pid_t tid = pid_arg->tid_attached; + assert (tid > 0); + Dwfl_Process *process = dwfl->process; + if (ebl_get_elfclass (process->ebl) == ELFCLASS64) + { +#if SIZEOF_LONG == 8 + errno = 0; + *result = ptrace (PTRACE_PEEKDATA, tid, (void *) (uintptr_t) addr, NULL); + return errno == 0; +#else /* SIZEOF_LONG != 8 */ + /* This should not happen. */ + return false; +#endif /* SIZEOF_LONG != 8 */ + } +#if SIZEOF_LONG == 8 + /* We do not care about reads unaliged to 4 bytes boundary. + But 0x...ffc read of 8 bytes could overrun a page. */ + bool lowered = (addr & 4) != 0; + if (lowered) + addr -= 4; +#endif /* SIZEOF_LONG == 8 */ + errno = 0; + *result = ptrace (PTRACE_PEEKDATA, tid, (void *) (uintptr_t) addr, NULL); + if (errno != 0) + return false; +#if SIZEOF_LONG == 8 +# if BYTE_ORDER == BIG_ENDIAN + if (! lowered) + *result >>= 32; +# else + if (lowered) + *result >>= 32; +# endif +#endif /* SIZEOF_LONG == 8 */ + *result &= 0xffffffff; + return true; +} + +static pid_t +pid_next_thread (Dwfl *dwfl __attribute__ ((unused)), void *dwfl_arg, + void **thread_argp) +{ + struct __libdwfl_pid_arg *pid_arg = dwfl_arg; + struct dirent *dirent; + /* Start fresh on first traversal. */ + if (*thread_argp == NULL) + rewinddir (pid_arg->dir); + do + { + errno = 0; + dirent = readdir (pid_arg->dir); + if (dirent == NULL) + { + if (errno != 0) + { + __libdwfl_seterrno (DWFL_E_ERRNO); + return -1; + } + return 0; + } + } + while (strcmp (dirent->d_name, ".") == 0 + || strcmp (dirent->d_name, "..") == 0); + char *end; + errno = 0; + long tidl = strtol (dirent->d_name, &end, 10); + if (errno != 0) + { + __libdwfl_seterrno (DWFL_E_ERRNO); + return -1; + } + pid_t tid = tidl; + if (tidl <= 0 || (end && *end) || tid != tidl) + { + __libdwfl_seterrno (DWFL_E_PARSE_PROC); + return -1; + } + *thread_argp = dwfl_arg; + return tid; +} + +/* Just checks that the thread id exists. */ +static bool +pid_getthread (Dwfl *dwfl __attribute__ ((unused)), pid_t tid, + void *dwfl_arg, void **thread_argp) +{ + *thread_argp = dwfl_arg; + if (kill (tid, 0) < 0) + { + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; + } + return true; +} + +/* Implement the ebl_set_initial_registers_tid setfunc callback. */ + +static bool +pid_thread_state_registers_cb (int firstreg, unsigned nregs, + const Dwarf_Word *regs, void *arg) +{ + Dwfl_Thread *thread = (Dwfl_Thread *) arg; + if (firstreg < 0) + { + assert (firstreg == -1); + assert (nregs == 1); + INTUSE(dwfl_thread_state_register_pc) (thread, *regs); + return true; + } + assert (nregs > 0); + return INTUSE(dwfl_thread_state_registers) (thread, firstreg, nregs, regs); +} + +static bool +pid_set_initial_registers (Dwfl_Thread *thread, void *thread_arg) +{ + struct __libdwfl_pid_arg *pid_arg = thread_arg; + assert (pid_arg->tid_attached == 0); + pid_t tid = INTUSE(dwfl_thread_tid) (thread); + if (! pid_arg->assume_ptrace_stopped + && ! __libdwfl_ptrace_attach (tid, &pid_arg->tid_was_stopped)) + return false; + pid_arg->tid_attached = tid; + Dwfl_Process *process = thread->process; + Ebl *ebl = process->ebl; + return ebl_set_initial_registers_tid (ebl, tid, + pid_thread_state_registers_cb, thread); +} + +static void +pid_detach (Dwfl *dwfl __attribute__ ((unused)), void *dwfl_arg) +{ + struct __libdwfl_pid_arg *pid_arg = dwfl_arg; + closedir (pid_arg->dir); + free (pid_arg); +} + +void +internal_function +__libdwfl_ptrace_detach (pid_t tid, bool tid_was_stopped) +{ + /* This handling is needed only on older Linux kernels such as + 2.6.32-358.23.2.el6.ppc64. Later kernels such as + 3.11.7-200.fc19.x86_64 remember the T (stopped) state + themselves and no longer need to pass SIGSTOP during + PTRACE_DETACH. */ + ptrace (PTRACE_DETACH, tid, NULL, + (void *) (intptr_t) (tid_was_stopped ? SIGSTOP : 0)); +} + +static void +pid_thread_detach (Dwfl_Thread *thread, void *thread_arg) +{ + struct __libdwfl_pid_arg *pid_arg = thread_arg; + pid_t tid = INTUSE(dwfl_thread_tid) (thread); + assert (pid_arg->tid_attached == tid); + pid_arg->tid_attached = 0; + if (! pid_arg->assume_ptrace_stopped) + __libdwfl_ptrace_detach (tid, pid_arg->tid_was_stopped); +} + +static const Dwfl_Thread_Callbacks pid_thread_callbacks = +{ + pid_next_thread, + pid_getthread, + pid_memory_read, + pid_set_initial_registers, + pid_detach, + pid_thread_detach, +}; + +int +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) + { + 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; + while (getline (&line, &linelen, procfile) >= 0) + if (strncmp (line, "Tgid:", 5) == 0) + { + errno = 0; + char *endptr; + long val = strtol (&line[5], &endptr, 10); + if ((errno == ERANGE && val == LONG_MAX) + || *endptr != '\n' || val < 0 || val != (pid_t) val) + pid = 0; + else + pid = (pid_t) val; + break; + } + free (line); + fclose (procfile); + + if (pid == 0) + { + 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) + { + err = errno; + goto fail; + } + struct __libdwfl_pid_arg *pid_arg = malloc (sizeof *pid_arg); + if (pid_arg == NULL) + { + closedir (dir); + err = ENOMEM; + goto fail; + } + pid_arg->dir = dir; + pid_arg->tid_attached = 0; + pid_arg->assume_ptrace_stopped = assume_ptrace_stopped; + if (! INTUSE(dwfl_attach_state) (dwfl, NULL, pid, &pid_thread_callbacks, + pid_arg)) + { + closedir (dir); + free (pid_arg); + return -1; + } + return 0; +} +INTDEF (dwfl_linux_proc_attach) + +struct __libdwfl_pid_arg * +internal_function +__libdwfl_get_pid_arg (Dwfl *dwfl) +{ + if (dwfl != NULL && dwfl->process != NULL + && dwfl->process->callbacks == &pid_thread_callbacks) + return (struct __libdwfl_pid_arg *) dwfl->process->callbacks_arg; + + return NULL; +} + +#else /* __linux__ */ + +static pid_t +pid_next_thread (Dwfl *dwfl __attribute__ ((unused)), + void *dwfl_arg __attribute__ ((unused)), + void **thread_argp __attribute__ ((unused))) +{ + errno = ENOSYS; + __libdwfl_seterrno (DWFL_E_ERRNO); + return -1; +} + +static bool +pid_getthread (Dwfl *dwfl __attribute__ ((unused)), + pid_t tid __attribute__ ((unused)), + void *dwfl_arg __attribute__ ((unused)), + void **thread_argp __attribute__ ((unused))) +{ + errno = ENOSYS; + __libdwfl_seterrno (DWFL_E_ERRNO); + 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)), + Dwarf_Word *result __attribute__ ((unused)), + void *arg __attribute__ ((unused))) +{ + errno = ENOSYS; + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; +} + +static bool +pid_set_initial_registers (Dwfl_Thread *thread __attribute__ ((unused)), + void *thread_arg __attribute__ ((unused))) +{ + errno = ENOSYS; + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; +} + +static void +pid_detach (Dwfl *dwfl __attribute__ ((unused)), + void *dwfl_arg __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))) +{ +} + +static const Dwfl_Thread_Callbacks pid_thread_callbacks = +{ + pid_next_thread, + pid_getthread, + pid_memory_read, + pid_set_initial_registers, + pid_detach, + pid_thread_detach, +}; + +int +dwfl_linux_proc_attach (Dwfl *dwfl __attribute__ ((unused)), + pid_t pid __attribute__ ((unused)), + bool assume_ptrace_stopped __attribute__ ((unused))) +{ + return ENOSYS; +} +INTDEF (dwfl_linux_proc_attach) + +struct __libdwfl_pid_arg * +internal_function +__libdwfl_get_pid_arg (Dwfl *dwfl __attribute__ ((unused))) +{ + return NULL; +} + +#endif /* ! __linux __ */ + diff --git a/libdwfl/linux-proc-maps.c b/libdwfl/linux-proc-maps.c index 4fbe90d..d085834 100644 --- a/libdwfl/linux-proc-maps.c +++ b/libdwfl/linux-proc-maps.c @@ -1,5 +1,5 @@ /* Standard libdwfl callbacks for debugging a live Linux process. - Copyright (C) 2005-2010 Red Hat, Inc. + Copyright (C) 2005-2010, 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -29,6 +29,7 @@ #include "libdwflP.h" #include #include +#include #include #include #include @@ -39,14 +40,53 @@ #include #include #include +#include "system.h" #define PROCMAPSFMT "/proc/%d/maps" #define PROCMEMFMT "/proc/%d/mem" #define PROCAUXVFMT "/proc/%d/auxv" +#define PROCEXEFMT "/proc/%d/exe" -/* Search /proc/PID/auxv for the AT_SYSINFO_EHDR tag. */ +/* Return ELFCLASS64 or ELFCLASS32 for the main ELF executable. Return + ELFCLASSNONE for an error. */ + +static unsigned char +get_pid_class (pid_t pid) +{ + char *fname; + if (asprintf (&fname, PROCEXEFMT, pid) < 0) + return ELFCLASSNONE; + + int fd = open64 (fname, O_RDONLY); + free (fname); + if (fd < 0) + return ELFCLASSNONE; + + unsigned char buf[EI_CLASS + 1]; + ssize_t nread = pread_retry (fd, &buf, sizeof buf, 0); + close (fd); + if (nread != sizeof buf || buf[EI_MAG0] != ELFMAG0 + || buf[EI_MAG1] != ELFMAG1 || buf[EI_MAG2] != ELFMAG2 + || buf[EI_MAG3] != ELFMAG3 + || (buf[EI_CLASS] != ELFCLASS64 && buf[EI_CLASS] != ELFCLASS32)) + return ELFCLASSNONE; + + return buf[EI_CLASS]; +} + +/* Search /proc/PID/auxv for the AT_SYSINFO_EHDR tag. + + It would be easiest to call get_pid_class and parse everything according to + the 32-bit or 64-bit class. But this would bring the overhead of syscalls + to open and read the "/proc/%d/exe" file. + + Therefore this function tries to parse the "/proc/%d/auxv" content both + ways, as if it were the 32-bit format and also if it were the 64-bit format. + Only if it gives some valid data in both cases get_pid_class gets called. + In most cases only one of the format bit sizes gives valid data and the + get_pid_class call overhead can be saved. */ static int grovel_auxv (pid_t pid, Dwfl *dwfl, GElf_Addr *sysinfo_ehdr) @@ -60,61 +100,79 @@ grovel_auxv (pid_t pid, Dwfl *dwfl, GElf_Addr *sysinfo_ehdr) if (fd < 0) return errno == ENOENT ? 0 : errno; + GElf_Addr sysinfo_ehdr64 = 0; + GElf_Addr sysinfo_ehdr32 = 0; + GElf_Addr segment_align64 = dwfl->segment_align; + GElf_Addr segment_align32 = dwfl->segment_align; + off_t offset = 0; ssize_t nread; + union + { + Elf64_auxv_t a64[64]; + Elf32_auxv_t a32[128]; + } d; do { - union - { - char buffer[sizeof (long int) * 2 * 64]; - Elf64_auxv_t a64[sizeof (long int) * 2 * 64 / sizeof (Elf64_auxv_t)]; - Elf32_auxv_t a32[sizeof (long int) * 2 * 32 / sizeof (Elf32_auxv_t)]; - } d; - nread = read (fd, &d, sizeof d); - if (nread > 0) + eu_static_assert (sizeof d.a64 == sizeof d.a32); + nread = pread_retry (fd, d.a64, sizeof d.a64, offset); + if (nread < 0) { - switch (sizeof (long int)) - { - case 4: - for (size_t i = 0; (char *) &d.a32[i] < &d.buffer[nread]; ++i) - if (d.a32[i].a_type == AT_SYSINFO_EHDR) - { - *sysinfo_ehdr = d.a32[i].a_un.a_val; - if (dwfl->segment_align > 1) - { - nread = 0; - break; - } - } - else if (d.a32[i].a_type == AT_PAGESZ - && dwfl->segment_align <= 1) - dwfl->segment_align = d.a32[i].a_un.a_val; + int ret = errno; + close (fd); + return ret; + } + for (size_t a32i = 0; a32i < nread / sizeof d.a32[0]; a32i++) + { + const Elf32_auxv_t *a32 = d.a32 + a32i; + switch (a32->a_type) + { + case AT_SYSINFO_EHDR: + sysinfo_ehdr32 = a32->a_un.a_val; break; - case 8: - for (size_t i = 0; (char *) &d.a64[i] < &d.buffer[nread]; ++i) - if (d.a64[i].a_type == AT_SYSINFO_EHDR) - { - *sysinfo_ehdr = d.a64[i].a_un.a_val; - if (dwfl->segment_align > 1) - { - nread = 0; - break; - } - } - else if (d.a64[i].a_type == AT_PAGESZ - && dwfl->segment_align <= 1) - dwfl->segment_align = d.a64[i].a_un.a_val; + case AT_PAGESZ: + segment_align32 = a32->a_un.a_val; break; - default: - abort (); + } + } + for (size_t a64i = 0; a64i < nread / sizeof d.a64[0]; a64i++) + { + const Elf64_auxv_t *a64 = d.a64 + a64i; + switch (a64->a_type) + { + case AT_SYSINFO_EHDR: + sysinfo_ehdr64 = a64->a_un.a_val; break; - } + case AT_PAGESZ: + segment_align64 = a64->a_un.a_val; + break; + } } + offset += nread; } - while (nread > 0); + while (nread == sizeof d.a64); close (fd); - return nread < 0 ? errno : 0; + bool valid64 = sysinfo_ehdr64 != 0 || segment_align64 != dwfl->segment_align; + bool valid32 = sysinfo_ehdr32 != 0 || segment_align32 != dwfl->segment_align; + + unsigned char pid_class = ELFCLASSNONE; + if (valid64 && valid32) + pid_class = get_pid_class (pid); + + if (pid_class == ELFCLASS64 || (valid64 && ! valid32)) + { + *sysinfo_ehdr = sysinfo_ehdr64; + dwfl->segment_align = segment_align64; + return 0; + } + if (pid_class == ELFCLASS32 || (! valid64 && valid32)) + { + *sysinfo_ehdr = sysinfo_ehdr32; + dwfl->segment_align = segment_align32; + return 0; + } + return ENOEXEC; } static int @@ -168,7 +226,6 @@ proc_maps_report (Dwfl *dwfl, FILE *f, GElf_Addr sysinfo_ehdr, pid_t pid) { bad_report: free (line); - fclose (f); return -1; } @@ -180,7 +237,7 @@ proc_maps_report (Dwfl *dwfl, FILE *f, GElf_Addr sysinfo_ehdr, pid_t pid) } char *file = line + nread + strspn (line + nread, " \t"); - if (file[0] == '\0' || (ino == 0 && dmajor == 0 && dminor == 0)) + if (file[0] != '/' || (ino == 0 && dmajor == 0 && dminor == 0)) /* This line doesn't indicate a file mapping. */ continue; @@ -188,7 +245,8 @@ proc_maps_report (Dwfl *dwfl, FILE *f, GElf_Addr sysinfo_ehdr, pid_t pid) && ino == last_ino && dmajor == last_dmajor && dminor == last_dminor) { /* This is another portion of the same file's mapping. */ - assert (!strcmp (last_file, file)); + if (strcmp (last_file, file) != 0) + goto bad_report; high = end; } else @@ -267,6 +325,7 @@ read_proc_memory (void *arg, void *data, GElf_Addr address, } extern Elf *elf_from_remote_memory (GElf_Addr ehdr_vma, + GElf_Xword pagesize, GElf_Addr *loadbasep, ssize_t (*read_memory) (void *arg, void *data, @@ -284,44 +343,80 @@ dwfl_linux_proc_find_elf (Dwfl_Module *mod __attribute__ ((unused)), const char *module_name, Dwarf_Addr base, char **file_name, Elf **elfp) { + int pid = -1; if (module_name[0] == '/') { - int fd = open64 (module_name, O_RDONLY); - if (fd >= 0) + /* When this callback is used together with dwfl_linux_proc_report + then we might see mappings of special character devices. Make + sure we only open and return regular files. Special devices + might hang on open or read. (deleted) files are super special. + The image might come from memory if we are attached. */ + struct stat sb; + if (stat (module_name, &sb) == -1 || (sb.st_mode & S_IFMT) != S_IFREG) + { + if (strcmp (strrchr (module_name, ' ') ?: "", " (deleted)") == 0) + pid = INTUSE(dwfl_pid) (mod->dwfl); + else + return -1; + } + + if (pid == -1) { - *file_name = strdup (module_name); - if (*file_name == NULL) + int fd = open64 (module_name, O_RDONLY); + if (fd >= 0) { - close (fd); - return ENOMEM; + *file_name = strdup (module_name); + if (*file_name == NULL) + { + close (fd); + return ENOMEM; + } } + return fd; } - return fd; } - int pid; - if (sscanf (module_name, "[vdso: %d]", &pid) == 1) + if (pid != -1 || sscanf (module_name, "[vdso: %d]", &pid) == 1) { /* Special case for in-memory ELF image. */ + bool detach = false; + bool tid_was_stopped = false; + struct __libdwfl_pid_arg *pid_arg = __libdwfl_get_pid_arg (mod->dwfl); + if (pid_arg != NULL && ! pid_arg->assume_ptrace_stopped) + { + /* If any thread is already attached we are fine. Read + through that thread. It doesn't have to be the main + thread pid. */ + pid_t tid = pid_arg->tid_attached; + if (tid != 0) + pid = tid; + else + detach = __libdwfl_ptrace_attach (pid, &tid_was_stopped); + } + char *fname; if (asprintf (&fname, PROCMEMFMT, pid) < 0) - return -1; + goto detach; int fd = open64 (fname, O_RDONLY); free (fname); if (fd < 0) - return -1; + goto detach; - *elfp = elf_from_remote_memory (base, NULL, &read_proc_memory, &fd); + *elfp = elf_from_remote_memory (base, getpagesize (), NULL, + &read_proc_memory, &fd); close (fd); *file_name = NULL; + + detach: + if (detach) + __libdwfl_ptrace_detach (pid, tid_was_stopped); return -1; } - abort (); return -1; } INTDEF (dwfl_linux_proc_find_elf) diff --git a/libdwfl/offline.c b/libdwfl/offline.c index 26a6bd6..28d2782 100644 --- a/libdwfl/offline.c +++ b/libdwfl/offline.c @@ -127,7 +127,8 @@ process_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd, Elf *elf) { Dwfl_Module *mod = __libdwfl_report_elf (dwfl, name, file_name, fd, elf, - dwfl->offline_next_address, false); + dwfl->offline_next_address, true, + false); if (mod != NULL) { /* If this is an ET_EXEC file with fixed addresses, the address range diff --git a/libdwfl/open.c b/libdwfl/open.c index 7dd5b52..40aac38 100644 --- a/libdwfl/open.c +++ b/libdwfl/open.c @@ -33,15 +33,15 @@ #include #if !USE_ZLIB -# define __libdw_gunzip(...) false +# define __libdw_gunzip(...) DWFL_E_BADELF #endif #if !USE_BZLIB -# define __libdw_bunzip2(...) false +# define __libdw_bunzip2(...) DWFL_E_BADELF #endif #if !USE_LZMA -# define __libdw_unlzma(...) false +# define __libdw_unlzma(...) DWFL_E_BADELF #endif /* Consumes and replaces *ELF only on success. */ diff --git a/libdwfl/relocate.c b/libdwfl/relocate.c index 2c24bd5..52b7b5e 100644 --- a/libdwfl/relocate.c +++ b/libdwfl/relocate.c @@ -1,5 +1,5 @@ /* Relocate debug information. - Copyright (C) 2005-2010 Red Hat, Inc. + Copyright (C) 2005-2011, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -38,8 +38,6 @@ internal_function __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, size_t *shstrndx, Elf32_Word shndx, GElf_Addr *value) { - assert (mod->e_type == ET_REL); - Elf_Scn *refscn = elf_getscn (elf, shndx); GElf_Shdr refshdr_mem, *refshdr = gelf_getshdr (refscn, &refshdr_mem); if (refshdr == NULL) @@ -254,7 +252,8 @@ resolve_symbol (Dwfl_Module *referer, struct reloc_symtab_cache *symtab, if (m->e_type != ET_REL) { - sym->st_value = dwfl_adjusted_st_value (m, sym->st_value); + sym->st_value = dwfl_adjusted_st_value (m, m->symfile->elf, + sym->st_value); return DWFL_E_NOERROR; } @@ -457,7 +456,10 @@ relocate_section (Dwfl_Module *mod, Elf *relocated, const GElf_Ehdr *ehdr, } } - size_t nrels = shdr->sh_size / shdr->sh_entsize; + size_t sh_entsize + = gelf_fsize (relocated, shdr->sh_type == SHT_REL ? ELF_T_REL : ELF_T_RELA, + 1, EV_CURRENT); + size_t nrels = shdr->sh_size / sh_entsize; size_t complete = 0; if (shdr->sh_type == SHT_REL) for (size_t relidx = 0; !result && relidx < nrels; ++relidx) @@ -559,7 +561,7 @@ relocate_section (Dwfl_Module *mod, Elf *relocated, const GElf_Ehdr *ehdr, nrels = next; } - shdr->sh_size = reldata->d_size = nrels * shdr->sh_entsize; + shdr->sh_size = reldata->d_size = nrels * sh_entsize; gelf_update_shdr (scn, shdr); } diff --git a/libdwfl/segment.c b/libdwfl/segment.c index 496b4fd..9276917 100644 --- a/libdwfl/segment.c +++ b/libdwfl/segment.c @@ -1,5 +1,5 @@ /* Manage address space lookup table for libdwfl. - Copyright (C) 2008, 2009, 2010 Red Hat, Inc. + Copyright (C) 2008, 2009, 2010, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -28,16 +28,18 @@ #include "libdwflP.h" -static GElf_Addr -segment_start (Dwfl *dwfl, GElf_Addr start) +GElf_Addr +internal_function +__libdwfl_segment_start (Dwfl *dwfl, GElf_Addr start) { if (dwfl->segment_align > 1) start &= -dwfl->segment_align; return start; } -static GElf_Addr -segment_end (Dwfl *dwfl, GElf_Addr end) +GElf_Addr +internal_function +__libdwfl_segment_end (Dwfl *dwfl, GElf_Addr end) { if (dwfl->segment_align > 1) end = (end + dwfl->segment_align - 1) & -dwfl->segment_align; @@ -156,8 +158,8 @@ reify_segments (Dwfl *dwfl) for (Dwfl_Module *mod = dwfl->modulelist; mod != NULL; mod = mod->next) if (! mod->gc) { - const GElf_Addr start = segment_start (dwfl, mod->low_addr); - const GElf_Addr end = segment_end (dwfl, mod->high_addr); + const GElf_Addr start = __libdwfl_segment_start (dwfl, mod->low_addr); + const GElf_Addr end = __libdwfl_segment_end (dwfl, mod->high_addr); bool resized = false; int idx = lookup (dwfl, start, hint); @@ -296,8 +298,9 @@ dwfl_report_segment (Dwfl *dwfl, int ndx, const GElf_Phdr *phdr, GElf_Addr bias, dwfl->lookup_module = NULL; } - GElf_Addr start = segment_start (dwfl, bias + phdr->p_vaddr); - GElf_Addr end = segment_end (dwfl, bias + phdr->p_vaddr + phdr->p_memsz); + GElf_Addr start = __libdwfl_segment_start (dwfl, bias + phdr->p_vaddr); + GElf_Addr end = __libdwfl_segment_end (dwfl, + bias + phdr->p_vaddr + phdr->p_memsz); /* Coalesce into the last one if contiguous and matching. */ if (ndx != dwfl->lookup_tail_ndx diff --git a/libebl/ChangeLog b/libebl/ChangeLog index af819a2..5ec7101 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,99 @@ +2014-06-17 Mark Wielaard + + * 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 + + * Makefile.am (gen_SOURCES): Add eblcheckreloctargettype.c. + * eblcheckreloctargettype.c: New file. + * ebl-hooks.h (check_reloc_target_type): New hook. + * eblopenbackend.c (default_check_reloc_target_type): New function. + (fill_defaults): Assign default_check_reloc_target_type to + check_reloc_target_type. + * libebl.h (ebl_check_reloc_target_type): New function definition. + +2013-12-18 Mark Wielaard + + * Makefile.am (gen_SOURCES): Add eblresolvesym.c. + * ebl-hooks.h (resolve_sym_value): New entry. + * eblresolvesym.c: New file. + * libebl.h (ebl_resolve_sym_value): New definition. + * libeblP.h (fd_addr): New field. + (fd_data): Likewise. + +2013-12-18 Jan Kratochvil + + unwinder: s390 and s390x + * Makefile.am (gen_SOURCES): Add eblnormalizepc.c and eblunwind.c. + * ebl-hooks.h (normalize_pc, unwind): New. + * eblnormalizepc.c: New file. + * eblunwind.c: New file. + * libebl.h (Ebl_Register_Location): Add field pc_register. + (ebl_normalize_pc): New declaration. + (ebl_tid_registers_get_t, ebl_pid_memory_read_t): New definitions. + (ebl_unwind): New declaration. + +2013-12-15 Jan Kratochvil + + unwinder: ppc and ppc64 + * Makefile.am (gen_SOURCES): Add ebldwarftoregno.c. + * ebl-hooks.h (dwarf_to_regno): New. + * ebldwarftoregno.c: New file. + * libebl.h (Ebl_Core_Item): New field pc_register. + (ebl_tid_registers_t): Add FIRSTREG -1 to the comment. + (ebl_dwarf_to_regno): New. + +2013-11-25 Petr Machata + + * eblopenbackend.c (machines): Add entry for AArch64. + +2013-11-14 Jan Kratochvil + + Code cleanup: Remove const in prototype + * libebl.h (ebl_tid_registers_t): Remove const from firstreg. + +2013-11-07 Jan Kratochvil + Mark Wielaard + + * Makefile.am (gen_SOURCES): Add eblinitreg.c. + * ebl-hooks.h (set_initial_registers_tid): New entry. + * eblinitreg.c: New file. + * libebl.h (ebl_tid_registers_t): New definition. + (ebl_set_initial_registers_tid, ebl_frame_nregs): New declarations. + * libeblP.h (struct ebl): New entry frame_nregs. + +2013-10-06 Mark Wielaard + + * libebl.h (ebl_abi_cfi): Document restrictions using register + rules. + +2013-09-26 Petr Machata + + * eblcorenotetypename.c: Handle NT_ARM_TLS, NT_ARM_HW_BREAK, + NT_ARM_HW_WATCH, NT_SIGINFO, NT_FILE. + +2013-09-25 Mark Wielaard + + * eblsectionstripp.c (ebl_section_strip_p): Check shdr_l is not NULL. + +2013-04-24 Mark Wielaard + + * Makefile.am: Use AM_CPPFLAGS instead of INCLUDES. + +2012-10-12 Jan Kratochvil + + * ebl-hooks.h (abi_cfi): Extend its comment for return value. + * eblopenbackend.c (default_abi_cfi): Return -1. + * libebl.h (ebl_abi_cfi): Extend its comment for return value. + +2012-08-30 Petr Machata + + * eblcorenotetypename.c: Handle PPC_VSX, X86_XSTATE, + S390_HIGH_GPRS, S390_TIMER, S390_TODCMP, S390_TODPREG, S390_CTRS, + S390_PREFIX, S390_LAST_BREAK, S390_SYSTEM_CALL, and ARM_VFP. + 2012-08-22 Jeff Kenton * eblopenbackend.c (machines): Add tilegx. diff --git a/libebl/Makefile.am b/libebl/Makefile.am index 65e6b5b..ec4477b 100644 --- a/libebl/Makefile.am +++ b/libebl/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to create Makefile.in ## -## Copyright (C) 2000-2010 Red Hat, Inc. +## Copyright (C) 2000-2010, 2013 Red Hat, Inc. ## This file is part of elfutils. ## ## This file is free software; you can redistribute it and/or modify @@ -29,7 +29,7 @@ ## include $(top_srcdir)/config/eu.am AM_CFLAGS += -fpic -INCLUDES += -I$(srcdir)/../libelf -I$(srcdir)/../libdw -I$(srcdir)/../libasm +AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libdw -I$(srcdir)/../libasm VERSION = 1 LIBEBL_SUBDIR = @LIBEBL_SUBDIR@ @@ -54,7 +54,8 @@ gen_SOURCES = eblopenbackend.c eblclosebackend.c eblstrtab.c \ eblreginfo.c eblnonerelocp.c eblrelativerelocp.c \ eblsysvhashentrysize.c eblauxvinfo.c eblcheckobjattr.c \ ebl_check_special_section.c ebl_syscall_abi.c eblabicfi.c \ - eblstother.c + eblstother.c eblinitreg.c ebldwarftoregno.c eblnormalizepc.c \ + eblunwind.c eblresolvesym.c eblcheckreloctargettype.c libebl_a_SOURCES = $(gen_SOURCES) diff --git a/libebl/Makefile.in b/libebl/Makefile.in index c4e9754..9340618 100644 --- a/libebl/Makefile.in +++ b/libebl/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,6 +16,51 @@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -35,13 +79,13 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(noinst_HEADERS) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/config/eu.am ChangeLog -@MUDFLAP_TRUE@am__append_1 = -fmudflap +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(noinst_HEADERS) $(pkginclude_HEADERS) ChangeLog subdir = libebl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -79,8 +123,11 @@ am__uninstall_files_from_dir = { \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)" LIBRARIES = $(lib_LIBRARIES) -AR = ar ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = libebl_a_AR = $(AR) $(ARFLAGS) libebl_a_LIBADD = am__objects_1 = eblopenbackend.$(OBJEXT) eblclosebackend.$(OBJEXT) \ @@ -106,32 +153,81 @@ am__objects_1 = eblopenbackend.$(OBJEXT) eblclosebackend.$(OBJEXT) \ eblsysvhashentrysize.$(OBJEXT) eblauxvinfo.$(OBJEXT) \ eblcheckobjattr.$(OBJEXT) ebl_check_special_section.$(OBJEXT) \ ebl_syscall_abi.$(OBJEXT) eblabicfi.$(OBJEXT) \ - eblstother.$(OBJEXT) + eblstother.$(OBJEXT) eblinitreg.$(OBJEXT) \ + ebldwarftoregno.$(OBJEXT) eblnormalizepc.$(OBJEXT) \ + eblunwind.$(OBJEXT) eblresolvesym.$(OBJEXT) \ + eblcheckreloctargettype.$(OBJEXT) am_libebl_a_OBJECTS = $(am__objects_1) libebl_a_OBJECTS = $(am_libebl_a_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = SOURCES = $(libebl_a_SOURCES) DIST_SOURCES = $(libebl_a_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -140,10 +236,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -164,6 +263,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -174,6 +274,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -188,6 +289,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -237,21 +339,15 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(srcdir)/../libelf -I$(srcdir)/../libdw \ -I$(srcdir)/../libasm -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 $(if \ $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) -fpic -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) - + $($(*F)_no_Wunused),,-Wunused -Wextra) $($(*F)_CFLAGS) -fpic +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda $(am_libebl_pic_a_OBJECTS) -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi lib_LIBRARIES = libebl.a pkginclude_HEADERS = libebl.h gen_SOURCES = eblopenbackend.c eblclosebackend.c eblstrtab.c \ @@ -271,7 +367,8 @@ gen_SOURCES = eblopenbackend.c eblclosebackend.c eblstrtab.c \ eblreginfo.c eblnonerelocp.c eblrelativerelocp.c \ eblsysvhashentrysize.c eblauxvinfo.c eblcheckobjattr.c \ ebl_check_special_section.c ebl_syscall_abi.c eblabicfi.c \ - eblstother.c + eblstother.c eblinitreg.c ebldwarftoregno.c eblnormalizepc.c \ + eblunwind.c eblresolvesym.c eblcheckreloctargettype.c libebl_a_SOURCES = $(gen_SOURCES) noinst_HEADERS = libeblP.h ebl-hooks.h @@ -312,7 +409,6 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): install-libLIBRARIES: $(lib_LIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ @@ -320,6 +416,8 @@ install-libLIBRARIES: $(lib_LIBRARIES) else :; fi; \ done; \ test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } @$(POST_INSTALL) @@ -340,10 +438,11 @@ uninstall-libLIBRARIES: clean-libLIBRARIES: -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) + libebl.a: $(libebl_a_OBJECTS) $(libebl_a_DEPENDENCIES) $(EXTRA_libebl_a_DEPENDENCIES) - -rm -f libebl.a - $(libebl_a_AR) libebl.a $(libebl_a_OBJECTS) $(libebl_a_LIBADD) - $(RANLIB) libebl.a + $(AM_V_at)-rm -f libebl.a + $(AM_V_AR)$(libebl_a_AR) libebl.a $(libebl_a_OBJECTS) $(libebl_a_LIBADD) + $(AM_V_at)$(RANLIB) libebl.a mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -359,11 +458,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblbackendname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblbsspltp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblcheckobjattr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblcheckreloctargettype.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblclosebackend.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblcopyrelocp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblcorenote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblcorenotetypename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebldebugscnp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebldwarftoregno.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebldynamictagcheck.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebldynamictagname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblelfclass.Po@am__quote@ @@ -371,10 +472,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblelfmachine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblgotpcreloccheck.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblgstrtab.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblinitreg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblmachineflagcheck.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblmachineflagname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblmachinesectionflagcheck.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblnonerelocp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblnormalizepc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblobjecttypename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblobjnote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblobjnotetypename.Po@am__quote@ @@ -386,6 +489,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblreloctypecheck.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblreloctypename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblrelocvaliduse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblresolvesym.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblretval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsectionname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsectionstripp.Po@am__quote@ @@ -397,25 +501,29 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsymbolbindingname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsymboltypename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblsysvhashentrysize.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblunwind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eblwstrtab.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -431,26 +539,15 @@ uninstall-pkgincludeHEADERS: files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -462,15 +559,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -479,6 +572,21 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -622,18 +730,19 @@ uninstall-am: uninstall-libLIBRARIES uninstall-pkgincludeHEADERS .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLIBRARIES install-man install-pdf \ - install-pdf-am install-pkgincludeHEADERS install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ - ps ps-am tags uninstall uninstall-am uninstall-libLIBRARIES \ +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLIBRARIES install-man \ + install-pdf install-pdf-am install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-libLIBRARIES \ uninstall-pkgincludeHEADERS diff --git a/libebl/ebl-hooks.h b/libebl/ebl-hooks.h index f629bce..e1186f8 100644 --- a/libebl/ebl-hooks.h +++ b/libebl/ebl-hooks.h @@ -1,5 +1,5 @@ /* Backend hook signatures internal interface for libebl. - Copyright (C) 2000-2011 Red Hat, Inc. + Copyright (C) 2000-2011, 2013, 2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -105,6 +105,9 @@ bool EBLHOOK(object_note) (const char *, uint32_t, uint32_t, const char *); bool EBLHOOK(check_object_attribute) (Ebl *, const char *, int, uint64_t, const char **, const char **); +/* Check reloc target section type. */ +bool EBLHOOK(check_reloc_target_type) (Ebl *, Elf64_Word); + /* Describe auxv element type. */ int EBLHOOK(auxv_info) (GElf_Xword, const char **, const char **); @@ -151,8 +154,42 @@ int EBLHOOK(disasm) (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, const char *fmt, DisasmOutputCB_t outcb, DisasmGetSymCB_t symcb, void *outcbarg, void *symcbarg); -/* Supply the machine-specific state of CFI before CIE initial programs. */ +/* Supply the machine-specific state of CFI before CIE initial programs. + Function returns 0 on success and -1 on error. */ int EBLHOOK(abi_cfi) (Ebl *ebl, Dwarf_CIE *abi_info); +/* Fetch process data from live TID and call SETFUNC one or more times. + Method should be present only when EBL_FRAME_NREGS > 0, otherwise the + backend doesn't support unwinding. */ +bool EBLHOOK(set_initial_registers_tid) (pid_t tid, + ebl_tid_registers_t *setfunc, + void *arg); + +/* Convert *REGNO as is in DWARF to a lower range suitable for + Dwarf_Frame->REGS indexing. */ +bool EBLHOOK(dwarf_to_regno) (Ebl *ebl, unsigned *regno); + +/* Optionally modify *PC as fetched from inferior data into valid PC + instruction pointer. */ +void EBLHOOK(normalize_pc) (Ebl *ebl, Dwarf_Addr *pc); + +/* Get previous frame state for an existing frame state. Method is called only + if unwinder could not find CFI for current PC. PC is for the + existing frame. SETFUNC sets register in the previous frame. GETFUNC gets + register from the existing frame. Note that GETFUNC vs. SETFUNC act on + a disjunct set of registers. READFUNC reads memory. ARG has to be passed + for SETFUNC, GETFUNC and READFUNC. *SIGNAL_FRAMEP is initialized to false, + it can be set to true if existing frame is a signal frame. SIGNAL_FRAMEP is + never NULL. */ +bool EBLHOOK(unwind) (Ebl *ebl, Dwarf_Addr pc, ebl_tid_registers_t *setfunc, + ebl_tid_registers_get_t *getfunc, + ebl_pid_memory_read_t *readfunc, void *arg, + bool *signal_framep); + +/* Returns true if the value can be resolved to an address in an + allocated section, which will be returned in *ADDR. + (e.g. function descriptor resolving) */ +bool EBLHOOK(resolve_sym_value) (Ebl *ebl, GElf_Addr *addr); + /* Destructor for ELF backend handle. */ void EBLHOOK(destr) (struct ebl *); diff --git a/libebl/eblcheckreloctargettype.c b/libebl/eblcheckreloctargettype.c new file mode 100644 index 0000000..e135f8a --- /dev/null +++ b/libebl/eblcheckreloctargettype.c @@ -0,0 +1,46 @@ +/* Check whether a section type is a valid target for relocation. + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + + +bool +ebl_check_reloc_target_type (Ebl *ebl, Elf64_Word sh_type) +{ + if (ebl->check_reloc_target_type (ebl, sh_type)) + return true; + + if (sh_type == SHT_PROGBITS || sh_type == SHT_NOBITS) + return true; + + return false; +} diff --git a/libebl/eblcorenotetypename.c b/libebl/eblcorenotetypename.c index c4c0c9c..b6db6cd 100644 --- a/libebl/eblcorenotetypename.c +++ b/libebl/eblcorenotetypename.c @@ -1,5 +1,5 @@ /* Return note type name. - Copyright (C) 2002, 2007, 2008 Red Hat, Inc. + Copyright (C) 2002, 2007, 2008, 2012, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2002. @@ -78,8 +78,24 @@ ebl_core_note_type_name (ebl, type, buf, len) KNOWNSTYPE (PRXFPREG); KNOWNSTYPE (PPC_VMX); KNOWNSTYPE (PPC_SPE); + KNOWNSTYPE (PPC_VSX); KNOWNSTYPE (386_TLS); KNOWNSTYPE (386_IOPERM); + KNOWNSTYPE (X86_XSTATE); + KNOWNSTYPE (S390_HIGH_GPRS); + KNOWNSTYPE (S390_TIMER); + KNOWNSTYPE (S390_TODCMP); + KNOWNSTYPE (S390_TODPREG); + KNOWNSTYPE (S390_CTRS); + KNOWNSTYPE (S390_PREFIX); + KNOWNSTYPE (S390_LAST_BREAK); + KNOWNSTYPE (S390_SYSTEM_CALL); + KNOWNSTYPE (ARM_VFP); + KNOWNSTYPE (ARM_TLS); + KNOWNSTYPE (ARM_HW_BREAK); + KNOWNSTYPE (ARM_HW_WATCH); + KNOWNSTYPE (SIGINFO); + KNOWNSTYPE (FILE); #undef KNOWNSTYPE default: diff --git a/libebl/ebldwarftoregno.c b/libebl/ebldwarftoregno.c new file mode 100644 index 0000000..8fb8540 --- /dev/null +++ b/libebl/ebldwarftoregno.c @@ -0,0 +1,41 @@ +/* Convert *REGNO as is in DWARF to a lower range. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +bool +ebl_dwarf_to_regno (Ebl *ebl, unsigned *regno) +{ + if (ebl == NULL) + return false; + return ebl->dwarf_to_regno == NULL ? true : ebl->dwarf_to_regno (ebl, regno); +} diff --git a/libebl/eblinitreg.c b/libebl/eblinitreg.c new file mode 100644 index 0000000..5729b3c --- /dev/null +++ b/libebl/eblinitreg.c @@ -0,0 +1,58 @@ +/* Fetch live process Dwfl_Frame from PID. + 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 + 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + +bool +ebl_set_initial_registers_tid (Ebl *ebl, pid_t tid, + ebl_tid_registers_t *setfunc, + void *arg) +{ + /* Otherwise caller could not allocate THREAD frame of proper size. + If set_initial_registers_tid is unsupported then FRAME_NREGS is zero. */ + assert (ebl->set_initial_registers_tid != NULL); + return ebl->set_initial_registers_tid (tid, setfunc, arg); +} + +size_t +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/eblnormalizepc.c b/libebl/eblnormalizepc.c new file mode 100644 index 0000000..a5fea77 --- /dev/null +++ b/libebl/eblnormalizepc.c @@ -0,0 +1,40 @@ +/* Modify PC as fetched from inferior data into valid PC. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +void +ebl_normalize_pc (Ebl *ebl, Dwarf_Addr *pc) +{ + if (ebl != NULL && ebl->normalize_pc != NULL) + ebl->normalize_pc (ebl, pc); +} diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c index 89e5da5..bd94759 100644 --- a/libebl/eblopenbackend.c +++ b/libebl/eblopenbackend.c @@ -1,5 +1,5 @@ /* Generate ELF backend handle. - Copyright (C) 2000-2011 Red Hat, Inc. + Copyright (C) 2000-2014 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -131,6 +131,7 @@ static const struct { "openrisc", "elf_openrisc", "openrisc", 8, EM_OPENRISC, 0, 0 }, { "arc", "elf_arc_a5", "arc_a5", 6, EM_ARC_A5, 0, 0 }, { "xtensa", "elf_xtensa", "xtensa", 6, EM_XTENSA, 0, 0 }, + { "aarch64", "elf_aarch64", "aarch64", 7, EM_AARCH64, ELFCLASS64, 0 }, }; #define nmachines (sizeof (machines) / sizeof (machines[0])) @@ -199,6 +200,7 @@ static bool default_check_object_attribute (Ebl *ebl, const char *vendor, int tag, uint64_t value, const char **tag_name, const char **value_name); +static bool default_check_reloc_target_type (Ebl *ebl, Elf64_Word sh_type); static int default_abi_cfi (Ebl *ebl, Dwarf_CIE *abi_info); @@ -240,6 +242,7 @@ fill_defaults (Ebl *result) result->register_info = default_register_info; result->syscall_abi = default_syscall_abi; result->check_object_attribute = default_check_object_attribute; + result->check_reloc_target_type = default_check_reloc_target_type; result->disasm = NULL; result->abi_cfi = default_abi_cfi; result->destr = default_destr; @@ -746,9 +749,16 @@ default_check_object_attribute (Ebl *ebl __attribute__ ((unused)), return false; } +static bool +default_check_reloc_target_type (Ebl *ebl __attribute__ ((unused)), + Elf64_Word sh_type __attribute__ ((unused))) +{ + return false; +} + static int default_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info __attribute__ ((unused))) { - return 0; + return -1; } diff --git a/libebl/eblresolvesym.c b/libebl/eblresolvesym.c new file mode 100644 index 0000000..470f6f0 --- /dev/null +++ b/libebl/eblresolvesym.c @@ -0,0 +1,43 @@ +/* Resolve a symbol value to an allocated section of the Elf file. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + +bool +ebl_resolve_sym_value (Ebl *ebl, GElf_Addr *addr) +{ + if (ebl == NULL || ebl->resolve_sym_value == NULL) + return false; + + return ebl->resolve_sym_value (ebl, addr); +} diff --git a/libebl/eblsectionstripp.c b/libebl/eblsectionstripp.c index 9497068..c6cda63 100644 --- a/libebl/eblsectionstripp.c +++ b/libebl/eblsectionstripp.c @@ -1,5 +1,5 @@ /* Check whether section can be stripped. - Copyright (C) 2005 Red Hat, Inc. + Copyright (C) 2005, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -51,7 +51,7 @@ ebl_section_strip_p (Ebl *ebl, const GElf_Ehdr *ehdr, const GElf_Shdr *shdr, Elf_Scn *scn_l = elf_getscn (ebl->elf, (shdr)->sh_info); GElf_Shdr shdr_mem_l; GElf_Shdr *shdr_l = gelf_getshdr (scn_l, &shdr_mem_l); - if (shdr_l == NULL) + if (shdr_l != NULL) { const char *s_l = elf_strptr (ebl->elf, ehdr->e_shstrndx, shdr_l->sh_name); diff --git a/libebl/eblunwind.c b/libebl/eblunwind.c new file mode 100644 index 0000000..1251c1b --- /dev/null +++ b/libebl/eblunwind.c @@ -0,0 +1,43 @@ +/* Get previous frame state for an existing frame state. + Copyright (C) 2013 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 . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +bool +ebl_unwind (Ebl *ebl, Dwarf_Addr pc, ebl_tid_registers_t *setfunc, + ebl_tid_registers_get_t *getfunc, ebl_pid_memory_read_t *readfunc, + void *arg, bool *signal_framep) +{ + if (ebl == NULL || ebl->unwind == NULL) + return false; + return ebl->unwind (ebl, pc, setfunc, getfunc, readfunc, arg, signal_framep); +} diff --git a/libebl/libebl.h b/libebl/libebl.h index 0d5621d..bb993bf 100644 --- a/libebl/libebl.h +++ b/libebl/libebl.h @@ -1,5 +1,5 @@ /* Interface for libebl. - Copyright (C) 2000-2010 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 @@ -179,6 +179,9 @@ extern bool ebl_check_object_attribute (Ebl *ebl, const char *vendor, const char **tag_name, const char **value_name); +/* Check whether a section type is a valid reloc target. */ +extern bool ebl_check_reloc_target_type (Ebl *ebl, Elf64_Word sh_type); + /* Check section name for being that of a debug informatino section. */ extern bool ebl_debugscn_p (Ebl *ebl, const char *name); @@ -257,6 +260,11 @@ extern int ebl_syscall_abi (Ebl *ebl, int *sp, int *pc, before each CIE's initial instructions. It should set the data_alignment_factor member if it affects the initial instructions. + The callback should not use the register rules DW_CFA_expression or + DW_CFA_val_expression. Defining the CFA using DW_CFA_def_cfa_expression + is allowed. This is an implementation detail since register rules + store expressions as offsets from the .eh_frame or .debug_frame data. + As a shorthand for some common cases, for this instruction stream we overload some CFI instructions that cannot be used in a CIE: @@ -267,7 +275,10 @@ extern int ebl_syscall_abi (Ebl *ebl, int *sp, int *pc, DWARF register number that identifies the actual PC in machine state. If there is no canonical DWARF register number with that meaning, it's left unchanged (callers usually initialize with (Dwarf_Word) -1). - This value is not used by CFI per se. */ + This value is not used by CFI per se. + + Function returns 0 on success and -1 for error or unsupported by the + backend. */ extern int ebl_abi_cfi (Ebl *ebl, Dwarf_CIE *abi_info) __nonnull_attribute__ (2); @@ -348,6 +359,7 @@ typedef struct uint8_t bits; /* Bits of data for one register. */ uint8_t pad; /* Bytes of padding after register's data. */ Dwarf_Half count; /* Consecutive register numbers here. */ + bool pc_register; } Ebl_Register_Location; /* Non-register data items in core notes. */ @@ -360,6 +372,7 @@ typedef struct Elf_Type type; char format; bool thread_identifier; + bool pc_register; } Ebl_Core_Item; /* Describe the format of a core file note with the given header and NAME. @@ -375,6 +388,76 @@ extern int ebl_auxv_info (Ebl *ebl, GElf_Xword a_type, const char **name, const char **format) __nonnull_attribute__ (1, 3, 4); +/* Callback type for ebl_set_initial_registers_tid. + Register -1 is mapped to PC (if arch PC has no DWARF number). + If FIRSTREG is -1 then NREGS has to be 1. */ +typedef bool (ebl_tid_registers_t) (int firstreg, unsigned nregs, + const Dwarf_Word *regs, void *arg) + __nonnull_attribute__ (3); + +/* Callback to fetch process data from live TID. + EBL architecture has to have EBL_FRAME_NREGS > 0, otherwise the + backend doesn't support unwinding and this function call may crash. */ +extern bool ebl_set_initial_registers_tid (Ebl *ebl, + pid_t tid, + ebl_tid_registers_t *setfunc, + void *arg) + __nonnull_attribute__ (1, 3); + +/* Number of registers to allocate for ebl_set_initial_registers_tid. + EBL architecture can unwind iff EBL_FRAME_NREGS > 0. */ +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) + __nonnull_attribute__ (1, 2); + +/* Modify PC as fetched from inferior data into valid PC. */ +extern void ebl_normalize_pc (Ebl *ebl, Dwarf_Addr *pc) + __nonnull_attribute__ (1, 2); + +/* Callback type for ebl_unwind's parameter getfunc. */ +typedef bool (ebl_tid_registers_get_t) (int firstreg, unsigned nregs, + Dwarf_Word *regs, void *arg) + __nonnull_attribute__ (3); + +/* Callback type for ebl_unwind's parameter readfunc. */ +typedef bool (ebl_pid_memory_read_t) (Dwarf_Addr addr, Dwarf_Word *data, + void *arg) + __nonnull_attribute__ (3); + +/* Get previous frame state for an existing frame state. Method is called only + if unwinder could not find CFI for current PC. PC is for the + existing frame. SETFUNC sets register in the previous frame. GETFUNC gets + register from the existing frame. Note that GETFUNC vs. SETFUNC act on + a disjunct set of registers. READFUNC reads memory. ARG has to be passed + for SETFUNC, GETFUNC and READFUNC. *SIGNAL_FRAMEP is initialized to false, + it can be set to true if existing frame is a signal frame. SIGNAL_FRAMEP is + never NULL. */ +extern bool ebl_unwind (Ebl *ebl, Dwarf_Addr pc, ebl_tid_registers_t *setfunc, + ebl_tid_registers_get_t *getfunc, + ebl_pid_memory_read_t *readfunc, void *arg, + bool *signal_framep) + __nonnull_attribute__ (1, 3, 4, 5, 7); + +/* Returns true if the value can be resolved to an address in an + allocated section, which will be returned in *ADDR + (e.g. function descriptor resolving) */ +extern bool ebl_resolve_sym_value (Ebl *ebl, GElf_Addr *addr) + __nonnull_attribute__ (2); #ifdef __cplusplus } diff --git a/libebl/libeblP.h b/libebl/libeblP.h index 5ec26a4..dbd67f3 100644 --- a/libebl/libeblP.h +++ b/libebl/libeblP.h @@ -1,5 +1,5 @@ /* Internal definitions for interface for libebl. - Copyright (C) 2000-2009 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 @@ -60,6 +60,21 @@ struct ebl /* Size of entry in Sysv-style hash table. */ int sysvhash_entrysize; + /* Number of registers to allocate for ebl_set_initial_registers_tid. + 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; + Elf_Data *fd_data; + /* Internal data. */ void *dlhandle; }; diff --git a/libelf/ChangeLog b/libelf/ChangeLog index d1df31a..4bc8f56 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,108 @@ +2014-07-07 Mark Wielaard + + * elf.h: Update from glibc. + +2014-04-13 Mark Wielaard + + * Makefile.am: Remove !MUDFLAP conditions. + * elf_begin.c (read_file): Don't clear use_mmap when _MUDFLAP is + defined. + * elf_update.c (write_file): Remove _MUDFLAP condition. + +2014-01-17 Jakub Jelinek + Roland McGrath + + * libelfP.h (INVALID_NDX): Define. + * gelf_getdyn.c (gelf_getdyn): Use it. Remove ndx < 0 test if any. + * gelf_getlib.c (gelf_getlib): Likewise. + * gelf_getmove.c (gelf_getmove): Likewise. + * gelf_getrel.c (gelf_getrel): Likewise. + * gelf_getrela.c (gelf_getrela): Likewise. + * gelf_getsym.c (gelf_getsym): Likewise. + * gelf_getsyminfo.c (gelf_getsyminfo): Likewise. + * gelf_getsymshndx.c (gelf_getsymshndx): Likewise. + * gelf_getversym.c (gelf_getversym): Likewise. + * gelf_update_dyn.c (gelf_update_dyn): Likewise. + * gelf_update_lib.c (gelf_update_lib): Likewise. + * gelf_update_move.c (gelf_update_move): Likewise. + * gelf_update_rel.c (gelf_update_rel): Likewise. + * gelf_update_rela.c (gelf_update_rela): Likewise. + * gelf_update_sym.c (gelf_update_sym): Likewise. + * gelf_update_syminfo.c (gelf_update_syminfo): Likewise. + * gelf_update_symshndx.c (gelf_update_symshndx): Likewise. + * gelf_update_versym.c (gelf_update_versym): Likewise. + +2014-01-17 Jakub Jelinek + + * elf32_getphdr.c (elfw2(LIBELFBITS,getphdr)): Check if program header + table fits into object's bounds. + * elf_getshdrstrndx.c (elf_getshstrndx): Add elf->start_offset to + elf->map_address. Check if first section header fits into object's + bounds. + * elf32_getshdr.c (elfw2(LIBELFBITS,getshdr)): + Check if section header table fits into object's bounds. + * elf_begin.c (get_shnum): Ensure section headers fits into + object's bounds. + (file_read_elf): Make sure scncnt is small enough to allocate both + ElfXX_Shdr and Elf_Scn array. Make sure section and program header + tables fit into object's bounds. Avoid memory leak on failure. + * elf_newscn.c (elf_newscn): Check for overflow. + * elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Likewise. + (__elfw2(LIBELFBITS,updatefile)): Likewise. + * elf32_newphdr.c (elfw2(LIBELFBITS,newphdr)): Likewise. + * elf_getarsym.c (elf_getarsym): Likewise. + +2013-11-08 Mark Wielaard + + * elf32_updatefile.c (elfXX_updatemmap): Only memcpy ehdr when not + already directly mmapped. + +2013-11-05 Mark Wielaard + + * elf32_updatefile.c (elfXX_updatefile): Copy all section headers + if elf->flags dirty. + +2013-11-01 Michael Forney + + * Makefile.am: Use READELF. + +2013-10-01 Petr Machata + + * elf.h: Update from glibc. + +2013-06-17 Petr Machata + + * elf.h: Update from glibc. + +2013-08-28 Namhyung Kim + + * gelf.h (gelf_fsize): Fix typo in comment. + +2013-08-28 Mark Wielaard + + * gelf_getauxv.c (gelf_getauxv): Add missing whitespace. + +2013-08-27 Mark Wielaard + + * gelf_getauxv.c (gelf_getauxv): Remove unnecessary casts to char *. + +2013-08-25 Kurt Roeckx + + * gelf_getauxv.c (gelf_getauxv): Use memcpy instead of pointer + dereference to avoid alignment problems. + +2013-01-07 Roland McGrath + + * elf_getarsym.c (elf_getarsym): Copy FILE_DATA into stack space if it + would be unaligned and !ALLOW_UNALIGNED. + + * elf_getarsym.c (read_number_entries): Use memcpy instead of pointer + dereference so as not to assume the field is naturally aligned. + +2012-09-17 Petr Machata + + * elf.h: Update from glibc. + 2012-08-16 Roland McGrath * elf.h: Update from glibc. diff --git a/libelf/Makefile.am b/libelf/Makefile.am index 5903ea8..493e4ec 100644 --- a/libelf/Makefile.am +++ b/libelf/Makefile.am @@ -35,10 +35,8 @@ GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include) VERSION = 1 lib_LIBRARIES = libelf.a -if !MUDFLAP noinst_LIBRARIES = libelf_pic.a noinst_PROGRAMS = $(noinst_LIBRARIES:_pic.a=.so) -endif include_HEADERS = libelf.h gelf.h nlist.h pkginclude_HEADERS = elf-knowledge.h @@ -92,7 +90,6 @@ libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \ elf_gnu_hash.c \ elf_scnshndx.c -if !MUDFLAP libelf_pic_a_SOURCES = am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os) @@ -102,11 +99,11 @@ libelf_so_LDLIBS += -lpthread endif libelf_so_SOURCES = -libelf.so: libelf_pic.a libelf.map +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 + if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi ln -fs $@ $@.$(VERSION) install: install-am libelf.so @@ -119,7 +116,6 @@ uninstall: uninstall-am rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION) rm -f $(DESTDIR)$(libdir)/libelf.so -endif noinst_HEADERS = elf.h abstract.h common.h exttypes.h gelf_xlate.h libelfP.h \ version_xlate.h gnuhash_xlate.h note_xlate.h dl-hash.h diff --git a/libelf/Makefile.in b/libelf/Makefile.in index 57c4317..8a99ae0 100644 --- a/libelf/Makefile.in +++ b/libelf/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -18,6 +17,51 @@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -36,17 +80,17 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \ - $(pkginclude_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog -@MUDFLAP_TRUE@am__append_1 = -fmudflap -@BUILD_STATIC_TRUE@am__append_2 = -fpic -@MUDFLAP_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1) -@MUDFLAP_TRUE@am_libelf_pic_a_OBJECTS = -@MUDFLAP_FALSE@@USE_LOCKS_TRUE@am__append_3 = -lpthread +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(include_HEADERS) $(noinst_HEADERS) $(pkginclude_HEADERS) \ + ChangeLog +@BUILD_STATIC_TRUE@am__append_1 = -fpic +noinst_PROGRAMS = $(am__EXEEXT_1) +@USE_LOCKS_TRUE@am__append_2 = -lpthread subdir = libelf ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -85,8 +129,11 @@ am__uninstall_files_from_dir = { \ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" \ "$(DESTDIR)$(pkgincludedir)" LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = libelf_a_AR = $(AR) $(ARFLAGS) libelf_a_LIBADD = am_libelf_a_OBJECTS = elf_version.$(OBJEXT) elf_hash.$(OBJEXT) \ @@ -147,36 +194,82 @@ libelf_a_OBJECTS = $(am_libelf_a_OBJECTS) libelf_pic_a_AR = $(AR) $(ARFLAGS) libelf_pic_a_LIBADD = libelf_pic_a_OBJECTS = $(am_libelf_pic_a_OBJECTS) -@MUDFLAP_FALSE@am__EXEEXT_1 = libelf.so$(EXEEXT) +am__EXEEXT_1 = libelf.so$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_libelf_so_OBJECTS = libelf_so_OBJECTS = $(am_libelf_so_OBJECTS) libelf_so_LDADD = $(LDADD) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = SOURCES = $(libelf_a_SOURCES) $(libelf_pic_a_SOURCES) \ $(libelf_so_SOURCES) DIST_SOURCES = $(libelf_a_SOURCES) $(libelf_pic_a_SOURCES) \ $(libelf_so_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac HEADERS = $(include_HEADERS) $(noinst_HEADERS) $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -185,10 +278,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -209,6 +305,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -219,6 +316,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -233,6 +331,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -282,23 +381,18 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 $(if \ $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) $(am__append_2) -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) - + $($(*F)_no_Wunused),,-Wunused -Wextra) $($(*F)_CFLAGS) \ + $(am__append_1) +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda $(am_libelf_pic_a_OBJECTS) \ libelf.so.$(VERSION) -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include) lib_LIBRARIES = libelf.a -@MUDFLAP_FALSE@noinst_LIBRARIES = libelf_pic.a +noinst_LIBRARIES = libelf_pic.a include_HEADERS = libelf.h gelf.h nlist.h pkginclude_HEADERS = elf-knowledge.h libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \ @@ -350,10 +444,10 @@ libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \ elf_gnu_hash.c \ elf_scnshndx.c -@MUDFLAP_FALSE@libelf_pic_a_SOURCES = -@MUDFLAP_FALSE@am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os) -@MUDFLAP_FALSE@libelf_so_LDLIBS = $(am__append_3) -@MUDFLAP_FALSE@libelf_so_SOURCES = +libelf_pic_a_SOURCES = +am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os) +libelf_so_LDLIBS = $(am__append_2) +libelf_so_SOURCES = noinst_HEADERS = elf.h abstract.h common.h exttypes.h gelf_xlate.h libelfP.h \ version_xlate.h gnuhash_xlate.h note_xlate.h dl-hash.h @@ -395,7 +489,6 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): install-libLIBRARIES: $(lib_LIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ @@ -403,6 +496,8 @@ install-libLIBRARIES: $(lib_LIBRARIES) else :; fi; \ done; \ test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } @$(POST_INSTALL) @@ -426,20 +521,19 @@ clean-libLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + libelf.a: $(libelf_a_OBJECTS) $(libelf_a_DEPENDENCIES) $(EXTRA_libelf_a_DEPENDENCIES) - -rm -f libelf.a - $(libelf_a_AR) libelf.a $(libelf_a_OBJECTS) $(libelf_a_LIBADD) - $(RANLIB) libelf.a + $(AM_V_at)-rm -f libelf.a + $(AM_V_AR)$(libelf_a_AR) libelf.a $(libelf_a_OBJECTS) $(libelf_a_LIBADD) + $(AM_V_at)$(RANLIB) libelf.a + libelf_pic.a: $(libelf_pic_a_OBJECTS) $(libelf_pic_a_DEPENDENCIES) $(EXTRA_libelf_pic_a_DEPENDENCIES) - -rm -f libelf_pic.a - $(libelf_pic_a_AR) libelf_pic.a $(libelf_pic_a_OBJECTS) $(libelf_pic_a_LIBADD) - $(RANLIB) libelf_pic.a + $(AM_V_at)-rm -f libelf_pic.a + $(AM_V_AR)$(libelf_pic_a_AR) libelf_pic.a $(libelf_pic_a_OBJECTS) $(libelf_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libelf_pic.a clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) -@MUDFLAP_TRUE@libelf.so$(EXEEXT): $(libelf_so_OBJECTS) $(libelf_so_DEPENDENCIES) $(EXTRA_libelf_so_DEPENDENCIES) -@MUDFLAP_TRUE@ @rm -f libelf.so$(EXEEXT) -@MUDFLAP_TRUE@ $(LINK) $(libelf_so_OBJECTS) $(libelf_so_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -560,22 +654,25 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlist.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -592,8 +689,11 @@ uninstall-includeHEADERS: dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -609,26 +709,15 @@ uninstall-pkgincludeHEADERS: files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -640,15 +729,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -657,6 +742,21 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -698,10 +798,8 @@ installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -@MUDFLAP_TRUE@install: install-am install-exec: install-exec-am install-data: install-data-am -@MUDFLAP_TRUE@uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am @@ -802,19 +900,20 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLIBRARIES \ .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \ - ctags distclean distclean-compile distclean-generic \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-includeHEADERS install-info \ - install-info-am install-libLIBRARIES install-man install-pdf \ - install-pdf-am install-pkgincludeHEADERS install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ - ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLIBRARIES install-man install-pdf install-pdf-am \ + install-pkgincludeHEADERS install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ uninstall-libLIBRARIES uninstall-pkgincludeHEADERS @@ -826,23 +925,23 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLIBRARIES \ @AMDEP_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @AMDEP_TRUE@ fi @AMDEP_FALSE@ $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED $< -@MUDFLAP_FALSE@libelf.so: libelf_pic.a libelf.map -@MUDFLAP_FALSE@ $(LINK) -shared -o $@ -Wl,--whole-archive,$<,--no-whole-archive \ -@MUDFLAP_FALSE@ -Wl,--version-script,$(srcdir)/libelf.map,--no-undefined \ -@MUDFLAP_FALSE@ -Wl,--soname,$@.$(VERSION),-z,defs,-z,relro $(libelf_so_LDLIBS) -@MUDFLAP_FALSE@ if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi -@MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION) - -@MUDFLAP_FALSE@install: install-am libelf.so -@MUDFLAP_FALSE@ $(mkinstalldirs) $(DESTDIR)$(libdir) -@MUDFLAP_FALSE@ $(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so -@MUDFLAP_FALSE@ ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION) -@MUDFLAP_FALSE@ ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so - -@MUDFLAP_FALSE@uninstall: uninstall-am -@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so -@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION) -@MUDFLAP_FALSE@ rm -f $(DESTDIR)$(libdir)/libelf.so +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 + ln -fs $@ $@.$(VERSION) + +install: install-am libelf.so + $(mkinstalldirs) $(DESTDIR)$(libdir) + $(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so + ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION) + ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so + +uninstall: uninstall-am + rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so + rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION) + rm -f $(DESTDIR)$(libdir)/libelf.so # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/libelf/elf.h b/libelf/elf.h index 1e67ef5..40e87b2 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-2012 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 @@ -249,7 +249,9 @@ typedef struct #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ #define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ +#define EM_AARCH64 183 /* ARM AARCH64 */ #define EM_TILEPRO 188 /* Tilera TILEPro */ +#define EM_MICROBLAZE 189 /* Xilinx MicroBlaze */ #define EM_TILEGX 191 /* Tilera TILE-Gx */ #define EM_NUM 192 @@ -615,6 +617,10 @@ typedef struct #define NT_LWPSTATUS 16 /* Contains copy of lwpstatus struct */ #define NT_LWPSINFO 17 /* Contains copy of lwpinfo struct */ #define NT_PRFPXREG 20 /* Contains copy of fprxregset struct */ +#define NT_SIGINFO 0x53494749 /* Contains copy of siginfo_t, + size might increase */ +#define NT_FILE 0x46494c45 /* Contains information about mapped + files */ #define NT_PRXFPREG 0x46e62b7f /* Contains copy of user_fxsr_struct */ #define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */ #define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */ @@ -622,6 +628,19 @@ typedef struct #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ #define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ #define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */ +#define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */ +#define NT_S390_TIMER 0x301 /* s390 timer register */ +#define NT_S390_TODCMP 0x302 /* s390 TOD clock comparator register */ +#define NT_S390_TODPREG 0x303 /* s390 TOD programmable register */ +#define NT_S390_CTRS 0x304 /* s390 control registers */ +#define NT_S390_PREFIX 0x305 /* s390 prefix register */ +#define NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */ +#define NT_S390_SYSTEM_CALL 0x307 /* s390 system call restart data */ +#define NT_S390_TDB 0x308 /* s390 transaction diagnostic block */ +#define NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */ +#define NT_ARM_TLS 0x401 /* ARM TLS register */ +#define NT_ARM_HW_BREAK 0x402 /* ARM hardware breakpoint registers */ +#define NT_ARM_HW_WATCH 0x403 /* ARM hardware watchpoint registers */ /* Legal values for the note segment descriptor types for object files. */ @@ -785,6 +804,15 @@ typedef struct #define DF_1_ENDFILTEE 0x00004000 /* Filtee terminates filters search. */ #define DF_1_DISPRELDNE 0x00008000 /* Disp reloc applied at build time. */ #define DF_1_DISPRELPND 0x00010000 /* Disp reloc applied at run-time. */ +#define DF_1_NODIRECT 0x00020000 /* Object has no-direct binding. */ +#define DF_1_IGNMULDEF 0x00040000 +#define DF_1_NOKSYMS 0x00080000 +#define DF_1_NOHDR 0x00100000 +#define DF_1_EDITED 0x00200000 /* Object is modified after built. */ +#define DF_1_NORELOC 0x00400000 +#define DF_1_SYMINTPOSE 0x00800000 /* Object has individual interposers. */ +#define DF_1_GLOBAUDIT 0x01000000 /* Global auditing required. */ +#define DF_1_SINGLETON 0x02000000 /* Singleton symbols are used. */ /* Flags for the feature selection in DT_FEATURE_1. */ #define DTF_1_PARINIT 0x00000001 @@ -965,7 +993,7 @@ typedef struct /* Some more special a_type values describing the hardware. */ #define AT_PLATFORM 15 /* String identifying platform. */ -#define AT_HWCAP 16 /* Machine dependent hints about +#define AT_HWCAP 16 /* Machine-dependent hints about processor capabilities. */ /* This entry gives some information about the FPU initialization @@ -987,6 +1015,9 @@ typedef struct #define AT_RANDOM 25 /* Address of 16 random bytes. */ +#define AT_HWCAP2 26 /* More machine-dependent hints about + processor capabilities. */ + #define AT_EXECFN 31 /* Filename of executable. */ /* Pointer to the global system page used for system calls and other @@ -1202,7 +1233,7 @@ typedef struct #define R_386_TLS_DTPMOD32 35 /* ID of module containing symbol */ #define R_386_TLS_DTPOFF32 36 /* Offset in TLS block */ #define R_386_TLS_TPOFF32 37 /* Negated offset in static TLS block */ -/* 38? */ +#define R_386_SIZE32 38 /* 32-bit symbol size */ #define R_386_TLS_GOTDESC 39 /* GOT offset for TLS descriptor. */ #define R_386_TLS_DESC_CALL 40 /* Marker of call through TLS descriptor for @@ -1338,102 +1369,105 @@ typedef struct /* For Sparc64, legal values for d_tag of Elf64_Dyn. */ -#define DT_SPARC_REGISTER 0x70000001 -#define DT_SPARC_NUM 2 +#define DT_SPARC_REGISTER 0x70000001 +#define DT_SPARC_NUM 2 /* MIPS R3000 specific definitions. */ /* Legal values for e_flags field of Elf32_Ehdr. */ -#define EF_MIPS_NOREORDER 1 /* A .noreorder directive was used */ -#define EF_MIPS_PIC 2 /* Contains PIC code */ -#define EF_MIPS_CPIC 4 /* Uses PIC calling sequence */ -#define EF_MIPS_XGOT 8 -#define EF_MIPS_64BIT_WHIRL 16 -#define EF_MIPS_ABI2 32 -#define EF_MIPS_ABI_ON32 64 -#define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level */ +#define EF_MIPS_NOREORDER 1 /* A .noreorder directive was used. */ +#define EF_MIPS_PIC 2 /* Contains PIC code. */ +#define EF_MIPS_CPIC 4 /* Uses PIC calling sequence. */ +#define EF_MIPS_XGOT 8 +#define EF_MIPS_64BIT_WHIRL 16 +#define EF_MIPS_ABI2 32 +#define EF_MIPS_ABI_ON32 64 +#define EF_MIPS_NAN2008 1024 /* Uses IEEE 754-2008 NaN encoding. */ +#define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level. */ /* Legal values for MIPS architecture level. */ -#define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ -#define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ -#define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ -#define EF_MIPS_ARCH_4 0x30000000 /* -mips4 code. */ -#define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */ -#define EF_MIPS_ARCH_32 0x60000000 /* MIPS32 code. */ -#define EF_MIPS_ARCH_64 0x70000000 /* MIPS64 code. */ - -/* The following are non-official names and should not be used. */ - -#define E_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ -#define E_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ -#define E_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ -#define E_MIPS_ARCH_4 0x30000000 /* -mips4 code. */ -#define E_MIPS_ARCH_5 0x40000000 /* -mips5 code. */ -#define E_MIPS_ARCH_32 0x60000000 /* MIPS32 code. */ -#define E_MIPS_ARCH_64 0x70000000 /* MIPS64 code. */ +#define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ +#define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ +#define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ +#define EF_MIPS_ARCH_4 0x30000000 /* -mips4 code. */ +#define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */ +#define EF_MIPS_ARCH_32 0x50000000 /* MIPS32 code. */ +#define EF_MIPS_ARCH_64 0x60000000 /* MIPS64 code. */ +#define EF_MIPS_ARCH_32R2 0x70000000 /* MIPS32r2 code. */ +#define EF_MIPS_ARCH_64R2 0x80000000 /* MIPS64r2 code. */ + +/* The following are unofficial names and should not be used. */ + +#define E_MIPS_ARCH_1 EF_MIPS_ARCH_1 +#define E_MIPS_ARCH_2 EF_MIPS_ARCH_2 +#define E_MIPS_ARCH_3 EF_MIPS_ARCH_3 +#define E_MIPS_ARCH_4 EF_MIPS_ARCH_4 +#define E_MIPS_ARCH_5 EF_MIPS_ARCH_5 +#define E_MIPS_ARCH_32 EF_MIPS_ARCH_32 +#define E_MIPS_ARCH_64 EF_MIPS_ARCH_64 /* Special section indices. */ -#define SHN_MIPS_ACOMMON 0xff00 /* Allocated common symbols */ -#define SHN_MIPS_TEXT 0xff01 /* Allocated test symbols. */ -#define SHN_MIPS_DATA 0xff02 /* Allocated data symbols. */ -#define SHN_MIPS_SCOMMON 0xff03 /* Small common symbols */ -#define SHN_MIPS_SUNDEFINED 0xff04 /* Small undefined symbols */ +#define SHN_MIPS_ACOMMON 0xff00 /* Allocated common symbols. */ +#define SHN_MIPS_TEXT 0xff01 /* Allocated test symbols. */ +#define SHN_MIPS_DATA 0xff02 /* Allocated data symbols. */ +#define SHN_MIPS_SCOMMON 0xff03 /* Small common symbols. */ +#define SHN_MIPS_SUNDEFINED 0xff04 /* Small undefined symbols. */ /* Legal values for sh_type field of Elf32_Shdr. */ -#define SHT_MIPS_LIBLIST 0x70000000 /* Shared objects used in link */ -#define SHT_MIPS_MSYM 0x70000001 -#define SHT_MIPS_CONFLICT 0x70000002 /* Conflicting symbols */ -#define SHT_MIPS_GPTAB 0x70000003 /* Global data area sizes */ -#define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */ -#define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging information*/ -#define SHT_MIPS_REGINFO 0x70000006 /* Register usage information */ -#define SHT_MIPS_PACKAGE 0x70000007 -#define SHT_MIPS_PACKSYM 0x70000008 -#define SHT_MIPS_RELD 0x70000009 -#define SHT_MIPS_IFACE 0x7000000b -#define SHT_MIPS_CONTENT 0x7000000c -#define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */ -#define SHT_MIPS_SHDR 0x70000010 -#define SHT_MIPS_FDESC 0x70000011 -#define SHT_MIPS_EXTSYM 0x70000012 -#define SHT_MIPS_DENSE 0x70000013 -#define SHT_MIPS_PDESC 0x70000014 -#define SHT_MIPS_LOCSYM 0x70000015 -#define SHT_MIPS_AUXSYM 0x70000016 -#define SHT_MIPS_OPTSYM 0x70000017 -#define SHT_MIPS_LOCSTR 0x70000018 -#define SHT_MIPS_LINE 0x70000019 -#define SHT_MIPS_RFDESC 0x7000001a -#define SHT_MIPS_DELTASYM 0x7000001b -#define SHT_MIPS_DELTAINST 0x7000001c -#define SHT_MIPS_DELTACLASS 0x7000001d -#define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */ -#define SHT_MIPS_DELTADECL 0x7000001f -#define SHT_MIPS_SYMBOL_LIB 0x70000020 -#define SHT_MIPS_EVENTS 0x70000021 /* Event section. */ -#define SHT_MIPS_TRANSLATE 0x70000022 -#define SHT_MIPS_PIXIE 0x70000023 -#define SHT_MIPS_XLATE 0x70000024 -#define SHT_MIPS_XLATE_DEBUG 0x70000025 -#define SHT_MIPS_WHIRL 0x70000026 -#define SHT_MIPS_EH_REGION 0x70000027 -#define SHT_MIPS_XLATE_OLD 0x70000028 -#define SHT_MIPS_PDR_EXCEPTION 0x70000029 +#define SHT_MIPS_LIBLIST 0x70000000 /* Shared objects used in link. */ +#define SHT_MIPS_MSYM 0x70000001 +#define SHT_MIPS_CONFLICT 0x70000002 /* Conflicting symbols. */ +#define SHT_MIPS_GPTAB 0x70000003 /* Global data area sizes. */ +#define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */ +#define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging info. */ +#define SHT_MIPS_REGINFO 0x70000006 /* Register usage information. */ +#define SHT_MIPS_PACKAGE 0x70000007 +#define SHT_MIPS_PACKSYM 0x70000008 +#define SHT_MIPS_RELD 0x70000009 +#define SHT_MIPS_IFACE 0x7000000b +#define SHT_MIPS_CONTENT 0x7000000c +#define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */ +#define SHT_MIPS_SHDR 0x70000010 +#define SHT_MIPS_FDESC 0x70000011 +#define SHT_MIPS_EXTSYM 0x70000012 +#define SHT_MIPS_DENSE 0x70000013 +#define SHT_MIPS_PDESC 0x70000014 +#define SHT_MIPS_LOCSYM 0x70000015 +#define SHT_MIPS_AUXSYM 0x70000016 +#define SHT_MIPS_OPTSYM 0x70000017 +#define SHT_MIPS_LOCSTR 0x70000018 +#define SHT_MIPS_LINE 0x70000019 +#define SHT_MIPS_RFDESC 0x7000001a +#define SHT_MIPS_DELTASYM 0x7000001b +#define SHT_MIPS_DELTAINST 0x7000001c +#define SHT_MIPS_DELTACLASS 0x7000001d +#define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */ +#define SHT_MIPS_DELTADECL 0x7000001f +#define SHT_MIPS_SYMBOL_LIB 0x70000020 +#define SHT_MIPS_EVENTS 0x70000021 /* Event section. */ +#define SHT_MIPS_TRANSLATE 0x70000022 +#define SHT_MIPS_PIXIE 0x70000023 +#define SHT_MIPS_XLATE 0x70000024 +#define SHT_MIPS_XLATE_DEBUG 0x70000025 +#define SHT_MIPS_WHIRL 0x70000026 +#define SHT_MIPS_EH_REGION 0x70000027 +#define SHT_MIPS_XLATE_OLD 0x70000028 +#define SHT_MIPS_PDR_EXCEPTION 0x70000029 /* Legal values for sh_flags field of Elf32_Shdr. */ -#define SHF_MIPS_GPREL 0x10000000 /* Must be part of global data area */ -#define SHF_MIPS_MERGE 0x20000000 -#define SHF_MIPS_ADDR 0x40000000 -#define SHF_MIPS_STRINGS 0x80000000 -#define SHF_MIPS_NOSTRIP 0x08000000 -#define SHF_MIPS_LOCAL 0x04000000 -#define SHF_MIPS_NAMES 0x02000000 -#define SHF_MIPS_NODUPE 0x01000000 +#define SHF_MIPS_GPREL 0x10000000 /* Must be in global data area. */ +#define SHF_MIPS_MERGE 0x20000000 +#define SHF_MIPS_ADDR 0x40000000 +#define SHF_MIPS_STRINGS 0x80000000 +#define SHF_MIPS_NOSTRIP 0x08000000 +#define SHF_MIPS_LOCAL 0x04000000 +#define SHF_MIPS_NAMES 0x02000000 +#define SHF_MIPS_NODUPE 0x01000000 /* Symbol tables. */ @@ -1455,23 +1489,23 @@ typedef union { struct { - Elf32_Word gt_current_g_value; /* -G value used for compilation */ - Elf32_Word gt_unused; /* Not used */ - } gt_header; /* First entry in section */ + Elf32_Word gt_current_g_value; /* -G value used for compilation. */ + Elf32_Word gt_unused; /* Not used. */ + } gt_header; /* First entry in section. */ struct { - Elf32_Word gt_g_value; /* If this value were used for -G */ - Elf32_Word gt_bytes; /* This many bytes would be used */ - } gt_entry; /* Subsequent entries in section */ + Elf32_Word gt_g_value; /* If this value were used for -G. */ + Elf32_Word gt_bytes; /* This many bytes would be used. */ + } gt_entry; /* Subsequent entries in section. */ } Elf32_gptab; /* Entry found in sections of type SHT_MIPS_REGINFO. */ typedef struct { - Elf32_Word ri_gprmask; /* General registers used */ - Elf32_Word ri_cprmask[4]; /* Coprocessor registers used */ - Elf32_Sword ri_gp_value; /* $gp register value */ + Elf32_Word ri_gprmask; /* General registers used. */ + Elf32_Word ri_cprmask[4]; /* Coprocessor registers used. */ + Elf32_Sword ri_gp_value; /* $gp register value. */ } Elf32_RegInfo; /* Entries found in sections of type SHT_MIPS_OPTIONS. */ @@ -2218,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 @@ -2227,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 */ @@ -2250,6 +2312,9 @@ typedef Elf32_Addr Elf32_Conflict; #define EF_ARM_VFP_FLOAT 0x400 #define EF_ARM_MAVERICK_FLOAT 0x800 +#define EF_ARM_ABI_FLOAT_SOFT 0x200 /* NB conflicts with EF_ARM_SOFT_FLOAT */ +#define EF_ARM_ABI_FLOAT_HARD 0x400 /* NB conflicts with EF_ARM_VFP_FLOAT */ + /* Other constants defined in the ARM ELF spec. version B-01. */ /* NB. These conflict with values defined above. */ @@ -2294,26 +2359,154 @@ typedef Elf32_Addr Elf32_Conflict; #define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) /* ARM attributes section. */ +/* AArch64 relocs. */ + +#define R_AARCH64_NONE 0 /* No relocation. */ +#define R_AARCH64_ABS64 257 /* Direct 64 bit. */ +#define R_AARCH64_ABS32 258 /* Direct 32 bit. */ +#define R_AARCH64_ABS16 259 /* Direct 16-bit. */ +#define R_AARCH64_PREL64 260 /* PC-relative 64-bit. */ +#define R_AARCH64_PREL32 261 /* PC-relative 32-bit. */ +#define R_AARCH64_PREL16 262 /* PC-relative 16-bit. */ +#define R_AARCH64_MOVW_UABS_G0 263 /* Dir. MOVZ imm. from bits 15:0. */ +#define R_AARCH64_MOVW_UABS_G0_NC 264 /* Likewise for MOVK; no check. */ +#define R_AARCH64_MOVW_UABS_G1 265 /* Dir. MOVZ imm. from bits 31:16. */ +#define R_AARCH64_MOVW_UABS_G1_NC 266 /* Likewise for MOVK; no check. */ +#define R_AARCH64_MOVW_UABS_G2 267 /* Dir. MOVZ imm. from bits 47:32. */ +#define R_AARCH64_MOVW_UABS_G2_NC 268 /* Likewise for MOVK; no check. */ +#define R_AARCH64_MOVW_UABS_G3 269 /* Dir. MOV{K,Z} imm. from 63:48. */ +#define R_AARCH64_MOVW_SABS_G0 270 /* Dir. MOV{N,Z} imm. from 15:0. */ +#define R_AARCH64_MOVW_SABS_G1 271 /* Dir. MOV{N,Z} imm. from 31:16. */ +#define R_AARCH64_MOVW_SABS_G2 272 /* Dir. MOV{N,Z} imm. from 47:32. */ +#define R_AARCH64_LD_PREL_LO19 273 /* PC-rel. LD imm. from bits 20:2. */ +#define R_AARCH64_ADR_PREL_LO21 274 /* PC-rel. ADR imm. from bits 20:0. */ +#define R_AARCH64_ADR_PREL_PG_HI21 275 /* Page-rel. ADRP imm. from 32:12. */ +#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 /* Likewise; no overflow check. */ +#define R_AARCH64_ADD_ABS_LO12_NC 277 /* Dir. ADD imm. from bits 11:0. */ +#define R_AARCH64_LDST8_ABS_LO12_NC 278 /* Likewise for LD/ST; no check. */ +#define R_AARCH64_TSTBR14 279 /* PC-rel. TBZ/TBNZ imm. from 15:2. */ +#define R_AARCH64_CONDBR19 280 /* PC-rel. cond. br. imm. from 20:2. */ +#define R_AARCH64_JUMP26 282 /* PC-rel. B imm. from bits 27:2. */ +#define R_AARCH64_CALL26 283 /* Likewise for CALL. */ +#define R_AARCH64_LDST16_ABS_LO12_NC 284 /* Dir. ADD imm. from bits 11:1. */ +#define R_AARCH64_LDST32_ABS_LO12_NC 285 /* Likewise for bits 11:2. */ +#define R_AARCH64_LDST64_ABS_LO12_NC 286 /* Likewise for bits 11:3. */ +#define R_AARCH64_MOVW_PREL_G0 287 /* PC-rel. MOV{N,Z} imm. from 15:0. */ +#define R_AARCH64_MOVW_PREL_G0_NC 288 /* Likewise for MOVK; no check. */ +#define R_AARCH64_MOVW_PREL_G1 289 /* PC-rel. MOV{N,Z} imm. from 31:16. */ +#define R_AARCH64_MOVW_PREL_G1_NC 290 /* Likewise for MOVK; no check. */ +#define R_AARCH64_MOVW_PREL_G2 291 /* PC-rel. MOV{N,Z} imm. from 47:32. */ +#define R_AARCH64_MOVW_PREL_G2_NC 292 /* Likewise for MOVK; no check. */ +#define R_AARCH64_MOVW_PREL_G3 293 /* PC-rel. MOV{N,Z} imm. from 63:48. */ +#define R_AARCH64_LDST128_ABS_LO12_NC 299 /* Dir. ADD imm. from bits 11:4. */ +#define R_AARCH64_MOVW_GOTOFF_G0 300 /* GOT-rel. off. MOV{N,Z} imm. 15:0. */ +#define R_AARCH64_MOVW_GOTOFF_G0_NC 301 /* Likewise for MOVK; no check. */ +#define R_AARCH64_MOVW_GOTOFF_G1 302 /* GOT-rel. o. MOV{N,Z} imm. 31:16. */ +#define R_AARCH64_MOVW_GOTOFF_G1_NC 303 /* Likewise for MOVK; no check. */ +#define R_AARCH64_MOVW_GOTOFF_G2 304 /* GOT-rel. o. MOV{N,Z} imm. 47:32. */ +#define R_AARCH64_MOVW_GOTOFF_G2_NC 305 /* Likewise for MOVK; no check. */ +#define R_AARCH64_MOVW_GOTOFF_G3 306 /* GOT-rel. o. MOV{N,Z} imm. 63:48. */ +#define R_AARCH64_GOTREL64 307 /* GOT-relative 64-bit. */ +#define R_AARCH64_GOTREL32 308 /* GOT-relative 32-bit. */ +#define R_AARCH64_GOT_LD_PREL19 309 /* PC-rel. GOT off. load imm. 20:2. */ +#define R_AARCH64_LD64_GOTOFF_LO15 310 /* GOT-rel. off. LD/ST imm. 14:3. */ +#define R_AARCH64_ADR_GOT_PAGE 311 /* P-page-rel. GOT off. ADRP 32:12. */ +#define R_AARCH64_LD64_GOT_LO12_NC 312 /* Dir. GOT off. LD/ST imm. 11:3. */ +#define R_AARCH64_LD64_GOTPAGE_LO15 313 /* GOT-page-rel. GOT off. LD/ST 14:3 */ +#define R_AARCH64_TLSGD_ADR_PREL21 512 /* PC-relative ADR imm. 20:0. */ +#define R_AARCH64_TLSGD_ADR_PAGE21 513 /* page-rel. ADRP imm. 32:12. */ +#define R_AARCH64_TLSGD_ADD_LO12_NC 514 /* direct ADD imm. from 11:0. */ +#define R_AARCH64_TLSGD_MOVW_G1 515 /* GOT-rel. MOV{N,Z} 31:16. */ +#define R_AARCH64_TLSGD_MOVW_G0_NC 516 /* GOT-rel. MOVK imm. 15:0. */ +#define R_AARCH64_TLSLD_ADR_PREL21 517 /* Like 512; local dynamic model. */ +#define R_AARCH64_TLSLD_ADR_PAGE21 518 /* Like 513; local dynamic model. */ +#define R_AARCH64_TLSLD_ADD_LO12_NC 519 /* Like 514; local dynamic model. */ +#define R_AARCH64_TLSLD_MOVW_G1 520 /* Like 515; local dynamic model. */ +#define R_AARCH64_TLSLD_MOVW_G0_NC 521 /* Like 516; local dynamic model. */ +#define R_AARCH64_TLSLD_LD_PREL19 522 /* TLS PC-rel. load imm. 20:2. */ +#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 /* TLS DTP-rel. MOV{N,Z} 47:32. */ +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 /* TLS DTP-rel. MOV{N,Z} 31:16. */ +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 /* Likewise; MOVK; no check. */ +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 /* TLS DTP-rel. MOV{N,Z} 15:0. */ +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 /* Likewise; MOVK; no check. */ +#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 /* DTP-rel. ADD imm. from 23:12. */ +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 /* DTP-rel. ADD imm. from 11:0. */ +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 /* Likewise; no ovfl. check. */ +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 /* DTP-rel. LD/ST imm. 11:0. */ +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 /* Likewise; no check. */ +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 /* DTP-rel. LD/ST imm. 11:1. */ +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 /* Likewise; no check. */ +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 /* DTP-rel. LD/ST imm. 11:2. */ +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 /* Likewise; no check. */ +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 /* DTP-rel. LD/ST imm. 11:3. */ +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 /* Likewise; no check. */ +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 /* GOT-rel. MOV{N,Z} 31:16. */ +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 /* GOT-rel. MOVK 15:0. */ +#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 /* Page-rel. ADRP 32:12. */ +#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 /* Direct LD off. 11:3. */ +#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 /* PC-rel. load imm. 20:2. */ +#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 /* TLS TP-rel. MOV{N,Z} 47:32. */ +#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 /* TLS TP-rel. MOV{N,Z} 31:16. */ +#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 /* Likewise; MOVK; no check. */ +#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 /* TLS TP-rel. MOV{N,Z} 15:0. */ +#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 /* Likewise; MOVK; no check. */ +#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 /* TP-rel. ADD imm. 23:12. */ +#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 /* TP-rel. ADD imm. 11:0. */ +#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 /* Likewise; no ovfl. check. */ +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 /* TP-rel. LD/ST off. 11:0. */ +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 /* Likewise; no ovfl. check. */ +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 /* TP-rel. LD/ST off. 11:1. */ +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 /* Likewise; no check. */ +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 /* TP-rel. LD/ST off. 11:2. */ +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 /* Likewise; no check. */ +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 /* TP-rel. LD/ST off. 11:3. */ +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 /* Likewise; no check. */ +#define R_AARCH64_TLSDESC_LD_PREL19 560 /* PC-rel. load immediate 20:2. */ +#define R_AARCH64_TLSDESC_ADR_PREL21 561 /* PC-rel. ADR immediate 20:0. */ +#define R_AARCH64_TLSDESC_ADR_PAGE21 562 /* Page-rel. ADRP imm. 32:12. */ +#define R_AARCH64_TLSDESC_LD64_LO12 563 /* Direct LD off. from 11:3. */ +#define R_AARCH64_TLSDESC_ADD_LO12 564 /* Direct ADD imm. from 11:0. */ +#define R_AARCH64_TLSDESC_OFF_G1 565 /* GOT-rel. MOV{N,Z} imm. 31:16. */ +#define R_AARCH64_TLSDESC_OFF_G0_NC 566 /* GOT-rel. MOVK imm. 15:0; no ck. */ +#define R_AARCH64_TLSDESC_LDR 567 /* Relax LDR. */ +#define R_AARCH64_TLSDESC_ADD 568 /* Relax ADD. */ +#define R_AARCH64_TLSDESC_CALL 569 /* Relax BLR. */ +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 /* TP-rel. LD/ST off. 11:4. */ +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 /* Likewise; no check. */ +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 /* DTP-rel. LD/ST imm. 11:4. */ +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 /* Likewise; no check. */ +#define R_AARCH64_COPY 1024 /* Copy symbol at runtime. */ +#define R_AARCH64_GLOB_DAT 1025 /* Create GOT entry. */ +#define R_AARCH64_JUMP_SLOT 1026 /* Create PLT entry. */ +#define R_AARCH64_RELATIVE 1027 /* Adjust by program base. */ +#define R_AARCH64_TLS_DTPMOD64 1028 /* Module number, 64 bit. */ +#define R_AARCH64_TLS_DTPREL64 1029 /* Module-relative offset, 64 bit. */ +#define R_AARCH64_TLS_TPREL64 1030 /* TP-relative offset, 64 bit. */ +#define R_AARCH64_TLSDESC 1031 /* TLS Descriptor. */ +#define R_AARCH64_IRELATIVE 1032 /* STT_GNU_IFUNC relocation. */ + /* ARM relocs. */ #define R_ARM_NONE 0 /* No reloc */ -#define R_ARM_PC24 1 /* PC relative 26 bit branch */ +#define R_ARM_PC24 1 /* Deprecated PC relative 26 + bit branch. */ #define R_ARM_ABS32 2 /* Direct 32 bit */ #define R_ARM_REL32 3 /* PC relative 32 bit */ #define R_ARM_PC13 4 #define R_ARM_ABS16 5 /* Direct 16 bit */ #define R_ARM_ABS12 6 /* Direct 12 bit */ -#define R_ARM_THM_ABS5 7 +#define R_ARM_THM_ABS5 7 /* Direct & 0x7C (LDR, STR). */ #define R_ARM_ABS8 8 /* Direct 8 bit */ #define R_ARM_SBREL32 9 -#define R_ARM_THM_PC22 10 -#define R_ARM_THM_PC8 11 +#define R_ARM_THM_PC22 10 /* PC relative 24 bit (Thumb32 BL). */ +#define R_ARM_THM_PC8 11 /* PC relative & 0x3FC + (Thumb16 LDR, ADD, ADR). */ #define R_ARM_AMP_VCALL9 12 #define R_ARM_SWI24 13 /* Obsolete static relocation. */ #define R_ARM_TLS_DESC 13 /* Dynamic relocation. */ -#define R_ARM_THM_SWI8 14 -#define R_ARM_XPC25 15 -#define R_ARM_THM_XPC22 16 +#define R_ARM_THM_SWI8 14 /* Reserved. */ +#define R_ARM_XPC25 15 /* Reserved. */ +#define R_ARM_THM_XPC22 16 /* Reserved. */ #define R_ARM_TLS_DTPMOD32 17 /* ID of module containing symbol */ #define R_ARM_TLS_DTPOFF32 18 /* Offset in TLS block */ #define R_ARM_TLS_TPOFF32 19 /* Offset in static TLS block */ @@ -2324,21 +2517,109 @@ typedef Elf32_Addr Elf32_Conflict; #define R_ARM_GOTOFF 24 /* 32 bit offset to GOT */ #define R_ARM_GOTPC 25 /* 32 bit PC relative offset to GOT */ #define R_ARM_GOT32 26 /* 32 bit GOT entry */ -#define R_ARM_PLT32 27 /* 32 bit PLT address */ -#define R_ARM_ALU_PCREL_7_0 32 -#define R_ARM_ALU_PCREL_15_8 33 -#define R_ARM_ALU_PCREL_23_15 34 -#define R_ARM_LDR_SBREL_11_0 35 -#define R_ARM_ALU_SBREL_19_12 36 -#define R_ARM_ALU_SBREL_27_20 37 +#define R_ARM_PLT32 27 /* Deprecated, 32 bit PLT address. */ +#define R_ARM_CALL 28 /* PC relative 24 bit (BL, BLX). */ +#define R_ARM_JUMP24 29 /* PC relative 24 bit + (B, BL). */ +#define R_ARM_THM_JUMP24 30 /* PC relative 24 bit (Thumb32 B.W). */ +#define R_ARM_BASE_ABS 31 /* Adjust by program base. */ +#define R_ARM_ALU_PCREL_7_0 32 /* Obsolete. */ +#define R_ARM_ALU_PCREL_15_8 33 /* Obsolete. */ +#define R_ARM_ALU_PCREL_23_15 34 /* Obsolete. */ +#define R_ARM_LDR_SBREL_11_0 35 /* Deprecated, prog. base relative. */ +#define R_ARM_ALU_SBREL_19_12 36 /* Deprecated, prog. base relative. */ +#define R_ARM_ALU_SBREL_27_20 37 /* Deprecated, prog. base relative. */ +#define R_ARM_TARGET1 38 +#define R_ARM_SBREL31 39 /* Program base relative. */ +#define R_ARM_V4BX 40 +#define R_ARM_TARGET2 41 +#define R_ARM_PREL31 42 /* 32 bit PC relative. */ +#define R_ARM_MOVW_ABS_NC 43 /* Direct 16-bit (MOVW). */ +#define R_ARM_MOVT_ABS 44 /* Direct high 16-bit (MOVT). */ +#define R_ARM_MOVW_PREL_NC 45 /* PC relative 16-bit (MOVW). */ +#define R_ARM_MOVT_PREL 46 /* PC relative (MOVT). */ +#define R_ARM_THM_MOVW_ABS_NC 47 /* Direct 16 bit (Thumb32 MOVW). */ +#define R_ARM_THM_MOVT_ABS 48 /* Direct high 16 bit + (Thumb32 MOVT). */ +#define R_ARM_THM_MOVW_PREL_NC 49 /* PC relative 16 bit + (Thumb32 MOVW). */ +#define R_ARM_THM_MOVT_PREL 50 /* PC relative high 16 bit + (Thumb32 MOVT). */ +#define R_ARM_THM_JUMP19 51 /* PC relative 20 bit + (Thumb32 B.W). */ +#define R_ARM_THM_JUMP6 52 /* PC relative X & 0x7E + (Thumb16 CBZ, CBNZ). */ +#define R_ARM_THM_ALU_PREL_11_0 53 /* PC relative 12 bit + (Thumb32 ADR.W). */ +#define R_ARM_THM_PC12 54 /* PC relative 12 bit + (Thumb32 LDR{D,SB,H,SH}). */ +#define R_ARM_ABS32_NOI 55 /* Direct 32-bit. */ +#define R_ARM_REL32_NOI 56 /* PC relative 32-bit. */ +#define R_ARM_ALU_PC_G0_NC 57 /* PC relative (ADD, SUB). */ +#define R_ARM_ALU_PC_G0 58 /* PC relative (ADD, SUB). */ +#define R_ARM_ALU_PC_G1_NC 59 /* PC relative (ADD, SUB). */ +#define R_ARM_ALU_PC_G1 60 /* PC relative (ADD, SUB). */ +#define R_ARM_ALU_PC_G2 61 /* PC relative (ADD, SUB). */ +#define R_ARM_LDR_PC_G1 62 /* PC relative (LDR,STR,LDRB,STRB). */ +#define R_ARM_LDR_PC_G2 63 /* PC relative (LDR,STR,LDRB,STRB). */ +#define R_ARM_LDRS_PC_G0 64 /* PC relative (STR{D,H}, + LDR{D,SB,H,SH}). */ +#define R_ARM_LDRS_PC_G1 65 /* PC relative (STR{D,H}, + LDR{D,SB,H,SH}). */ +#define R_ARM_LDRS_PC_G2 66 /* PC relative (STR{D,H}, + LDR{D,SB,H,SH}). */ +#define R_ARM_LDC_PC_G0 67 /* PC relative (LDC, STC). */ +#define R_ARM_LDC_PC_G1 68 /* PC relative (LDC, STC). */ +#define R_ARM_LDC_PC_G2 69 /* PC relative (LDC, STC). */ +#define R_ARM_ALU_SB_G0_NC 70 /* Program base relative (ADD,SUB). */ +#define R_ARM_ALU_SB_G0 71 /* Program base relative (ADD,SUB). */ +#define R_ARM_ALU_SB_G1_NC 72 /* Program base relative (ADD,SUB). */ +#define R_ARM_ALU_SB_G1 73 /* Program base relative (ADD,SUB). */ +#define R_ARM_ALU_SB_G2 74 /* Program base relative (ADD,SUB). */ +#define R_ARM_LDR_SB_G0 75 /* Program base relative (LDR, + STR, LDRB, STRB). */ +#define R_ARM_LDR_SB_G1 76 /* Program base relative + (LDR, STR, LDRB, STRB). */ +#define R_ARM_LDR_SB_G2 77 /* Program base relative + (LDR, STR, LDRB, STRB). */ +#define R_ARM_LDRS_SB_G0 78 /* Program base relative + (LDR, STR, LDRB, STRB). */ +#define R_ARM_LDRS_SB_G1 79 /* Program base relative + (LDR, STR, LDRB, STRB). */ +#define R_ARM_LDRS_SB_G2 80 /* Program base relative + (LDR, STR, LDRB, STRB). */ +#define R_ARM_LDC_SB_G0 81 /* Program base relative (LDC,STC). */ +#define R_ARM_LDC_SB_G1 82 /* Program base relative (LDC,STC). */ +#define R_ARM_LDC_SB_G2 83 /* Program base relative (LDC,STC). */ +#define R_ARM_MOVW_BREL_NC 84 /* Program base relative 16 + bit (MOVW). */ +#define R_ARM_MOVT_BREL 85 /* Program base relative high + 16 bit (MOVT). */ +#define R_ARM_MOVW_BREL 86 /* Program base relative 16 + bit (MOVW). */ +#define R_ARM_THM_MOVW_BREL_NC 87 /* Program base relative 16 + bit (Thumb32 MOVW). */ +#define R_ARM_THM_MOVT_BREL 88 /* Program base relative high + 16 bit (Thumb32 MOVT). */ +#define R_ARM_THM_MOVW_BREL 89 /* Program base relative 16 + bit (Thumb32 MOVW). */ #define R_ARM_TLS_GOTDESC 90 #define R_ARM_TLS_CALL 91 -#define R_ARM_TLS_DESCSEQ 92 +#define R_ARM_TLS_DESCSEQ 92 /* TLS relaxation. */ #define R_ARM_THM_TLS_CALL 93 +#define R_ARM_PLT32_ABS 94 +#define R_ARM_GOT_ABS 95 /* GOT entry. */ +#define R_ARM_GOT_PREL 96 /* PC relative GOT entry. */ +#define R_ARM_GOT_BREL12 97 /* GOT entry relative to GOT + origin (LDR). */ +#define R_ARM_GOTOFF12 98 /* 12 bit, GOT entry relative + to GOT origin (LDR, STR). */ +#define R_ARM_GOTRELAX 99 #define R_ARM_GNU_VTENTRY 100 #define R_ARM_GNU_VTINHERIT 101 -#define R_ARM_THM_PC11 102 /* thumb unconditional branch */ -#define R_ARM_THM_PC9 103 /* thumb conditional branch */ +#define R_ARM_THM_PC11 102 /* PC relative & 0xFFE (Thumb16 B). */ +#define R_ARM_THM_PC9 103 /* PC relative & 0x1FE + (Thumb16 B/B). */ #define R_ARM_TLS_GD32 104 /* PC-rel 32 bit for global dynamic thread local data */ #define R_ARM_TLS_LDM32 105 /* PC-rel 32 bit for local dynamic @@ -2349,7 +2630,18 @@ typedef Elf32_Addr Elf32_Conflict; static TLS block offset */ #define R_ARM_TLS_LE32 108 /* 32 bit offset relative to static TLS block */ -#define R_ARM_THM_TLS_DESCSEQ 129 +#define R_ARM_TLS_LDO12 109 /* 12 bit relative to TLS + block (LDR, STR). */ +#define R_ARM_TLS_LE12 110 /* 12 bit relative to static + TLS block (LDR, STR). */ +#define R_ARM_TLS_IE12GP 111 /* 12 bit GOT entry relative + to GOT origin (LDR). */ +#define R_ARM_ME_TOO 128 /* Obsolete. */ +#define R_ARM_THM_TLS_DESCSEQ 129 +#define R_ARM_THM_TLS_DESCSEQ16 129 +#define R_ARM_THM_TLS_DESCSEQ32 130 +#define R_ARM_THM_GOT_BREL12 131 /* GOT entry relative to GOT + origin, 12 bit (Thumb32 LDR). */ #define R_ARM_IRELATIVE 160 #define R_ARM_RXPC25 249 #define R_ARM_RSBREL32 250 @@ -2808,6 +3100,37 @@ typedef Elf32_Addr Elf32_Conflict; #define R_M32R_GOTOFF_LO 64 /* Low 16 bit offset to GOT */ #define R_M32R_NUM 256 /* Keep this the last entry. */ +/* MicroBlaze relocations */ +#define R_MICROBLAZE_NONE 0 /* No reloc. */ +#define R_MICROBLAZE_32 1 /* Direct 32 bit. */ +#define R_MICROBLAZE_32_PCREL 2 /* PC relative 32 bit. */ +#define R_MICROBLAZE_64_PCREL 3 /* PC relative 64 bit. */ +#define R_MICROBLAZE_32_PCREL_LO 4 /* Low 16 bits of PCREL32. */ +#define R_MICROBLAZE_64 5 /* Direct 64 bit. */ +#define R_MICROBLAZE_32_LO 6 /* Low 16 bit. */ +#define R_MICROBLAZE_SRO32 7 /* Read-only small data area. */ +#define R_MICROBLAZE_SRW32 8 /* Read-write small data area. */ +#define R_MICROBLAZE_64_NONE 9 /* No reloc. */ +#define R_MICROBLAZE_32_SYM_OP_SYM 10 /* Symbol Op Symbol relocation. */ +#define R_MICROBLAZE_GNU_VTINHERIT 11 /* GNU C++ vtable hierarchy. */ +#define R_MICROBLAZE_GNU_VTENTRY 12 /* GNU C++ vtable member usage. */ +#define R_MICROBLAZE_GOTPC_64 13 /* PC-relative GOT offset. */ +#define R_MICROBLAZE_GOT_64 14 /* GOT entry offset. */ +#define R_MICROBLAZE_PLT_64 15 /* PLT offset (PC-relative). */ +#define R_MICROBLAZE_REL 16 /* Adjust by program base. */ +#define R_MICROBLAZE_JUMP_SLOT 17 /* Create PLT entry. */ +#define R_MICROBLAZE_GLOB_DAT 18 /* Create GOT entry. */ +#define R_MICROBLAZE_GOTOFF_64 19 /* 64 bit offset to GOT. */ +#define R_MICROBLAZE_GOTOFF_32 20 /* 32 bit offset to GOT. */ +#define R_MICROBLAZE_COPY 21 /* Runtime copy. */ +#define R_MICROBLAZE_TLS 22 /* TLS Reloc. */ +#define R_MICROBLAZE_TLSGD 23 /* TLS General Dynamic. */ +#define R_MICROBLAZE_TLSLD 24 /* TLS Local Dynamic. */ +#define R_MICROBLAZE_TLSDTPMOD32 25 /* TLS Module ID. */ +#define R_MICROBLAZE_TLSDTPREL32 26 /* TLS Offset Within TLS Block. */ +#define R_MICROBLAZE_TLSDTPREL64 27 /* TLS Offset Within TLS Block. */ +#define R_MICROBLAZE_TLSGOTTPREL32 28 /* TLS Offset From Thread Pointer. */ +#define R_MICROBLAZE_TLSTPREL32 29 /* TLS Offset From Thread Pointer. */ /* TILEPro relocations. */ #define R_TILEPRO_NONE 0 /* No reloc */ @@ -2974,12 +3297,18 @@ typedef Elf32_Addr Elf32_Conflict; #define R_TILEGX_IMM16_X1_HW2_LAST_PCREL 63 /* X1 pipe PC-rel last hword 2 */ #define R_TILEGX_IMM16_X0_HW0_GOT 64 /* X0 pipe hword 0 GOT offset */ #define R_TILEGX_IMM16_X1_HW0_GOT 65 /* X1 pipe hword 0 GOT offset */ -/* Relocs 66-71 are currently not defined. */ +#define R_TILEGX_IMM16_X0_HW0_PLT_PCREL 66 /* X0 pipe PC-rel PLT hword 0 */ +#define R_TILEGX_IMM16_X1_HW0_PLT_PCREL 67 /* X1 pipe PC-rel PLT hword 0 */ +#define R_TILEGX_IMM16_X0_HW1_PLT_PCREL 68 /* X0 pipe PC-rel PLT hword 1 */ +#define R_TILEGX_IMM16_X1_HW1_PLT_PCREL 69 /* X1 pipe PC-rel PLT hword 1 */ +#define R_TILEGX_IMM16_X0_HW2_PLT_PCREL 70 /* X0 pipe PC-rel PLT hword 2 */ +#define R_TILEGX_IMM16_X1_HW2_PLT_PCREL 71 /* X1 pipe PC-rel PLT hword 2 */ #define R_TILEGX_IMM16_X0_HW0_LAST_GOT 72 /* X0 pipe last hword 0 GOT offset */ #define R_TILEGX_IMM16_X1_HW0_LAST_GOT 73 /* X1 pipe last hword 0 GOT offset */ #define R_TILEGX_IMM16_X0_HW1_LAST_GOT 74 /* X0 pipe last hword 1 GOT offset */ #define R_TILEGX_IMM16_X1_HW1_LAST_GOT 75 /* X1 pipe last hword 1 GOT offset */ -/* Relocs 76-77 are currently not defined. */ +#define R_TILEGX_IMM16_X0_HW3_PLT_PCREL 76 /* X0 pipe PC-rel PLT hword 3 */ +#define R_TILEGX_IMM16_X1_HW3_PLT_PCREL 77 /* X1 pipe PC-rel PLT hword 3 */ #define R_TILEGX_IMM16_X0_HW0_TLS_GD 78 /* X0 pipe hword 0 TLS GD offset */ #define R_TILEGX_IMM16_X1_HW0_TLS_GD 79 /* X1 pipe hword 0 TLS GD offset */ #define R_TILEGX_IMM16_X0_HW0_TLS_LE 80 /* X0 pipe hword 0 TLS LE offset */ @@ -2995,7 +3324,12 @@ typedef Elf32_Addr Elf32_Conflict; /* Relocs 90-91 are currently not defined. */ #define R_TILEGX_IMM16_X0_HW0_TLS_IE 92 /* X0 pipe hword 0 TLS IE offset */ #define R_TILEGX_IMM16_X1_HW0_TLS_IE 93 /* X1 pipe hword 0 TLS IE offset */ -/* Relocs 94-99 are currently not defined. */ +#define R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL 94 /* X0 pipe PC-rel PLT last hword 0 */ +#define R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL 95 /* X1 pipe PC-rel PLT last hword 0 */ +#define R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL 96 /* X0 pipe PC-rel PLT last hword 1 */ +#define R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL 97 /* X1 pipe PC-rel PLT last hword 1 */ +#define R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL 98 /* X0 pipe PC-rel PLT last hword 2 */ +#define R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL 99 /* X1 pipe PC-rel PLT last hword 2 */ #define R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE 100 /* X0 pipe last hword 0 IE off */ #define R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE 101 /* X1 pipe last hword 0 IE off */ #define R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE 102 /* X0 pipe last hword 1 IE off */ diff --git a/libelf/elf32_getphdr.c b/libelf/elf32_getphdr.c index a47c9f7..e74e63f 100644 --- a/libelf/elf32_getphdr.c +++ b/libelf/elf32_getphdr.c @@ -1,5 +1,5 @@ /* Get ELF program header table. - Copyright (C) 1998-2010 Red Hat, Inc. + Copyright (C) 1998-2010, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -93,6 +93,16 @@ __elfw2(LIBELFBITS,getphdr_wrlock) (elf) if (elf->map_address != NULL) { + /* First see whether the information in the ELF header is + valid and it does not ask for too much. */ + if (unlikely (ehdr->e_phoff >= elf->maximum_size) + || unlikely (elf->maximum_size - ehdr->e_phoff < size)) + { + /* Something is wrong. */ + __libelf_seterrno (ELF_E_INVALID_PHDR); + goto out; + } + /* All the data is already mapped. Use it. */ void *file_phdr = ((char *) elf->map_address + elf->start_offset + ehdr->e_phoff); diff --git a/libelf/elf32_getshdr.c b/libelf/elf32_getshdr.c index bd9340d..7417047 100644 --- a/libelf/elf32_getshdr.c +++ b/libelf/elf32_getshdr.c @@ -1,5 +1,5 @@ /* Return section header. - Copyright (C) 1998-2002, 2005, 2007, 2009, 2012 Red Hat, Inc. + Copyright (C) 1998-2002, 2005, 2007, 2009, 2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -60,7 +60,8 @@ load_shdr_wrlock (Elf_Scn *scn) goto out; size_t shnum; - if (__elf_getshdrnum_rdlock (elf, &shnum) != 0) + if (__elf_getshdrnum_rdlock (elf, &shnum) != 0 + || shnum > SIZE_MAX / sizeof (ElfW2(LIBELFBITS,Shdr))) goto out; size_t size = shnum * sizeof (ElfW2(LIBELFBITS,Shdr)); @@ -77,6 +78,16 @@ load_shdr_wrlock (Elf_Scn *scn) if (elf->map_address != NULL) { + /* First see whether the information in the ELF header is + valid and it does not ask for too much. */ + if (unlikely (ehdr->e_shoff >= elf->maximum_size) + || unlikely (elf->maximum_size - ehdr->e_shoff < size)) + { + /* Something is wrong. */ + __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); + goto free_and_out; + } + ElfW2(LIBELFBITS,Shdr) *notcvt; /* All the data is already mapped. If we could use it diff --git a/libelf/elf32_newphdr.c b/libelf/elf32_newphdr.c index 1db2080..01038e7 100644 --- a/libelf/elf32_newphdr.c +++ b/libelf/elf32_newphdr.c @@ -1,5 +1,5 @@ /* Create new ELF program header table. - Copyright (C) 1999-2010 Red Hat, Inc. + Copyright (C) 1999-2010, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -114,6 +114,12 @@ elfw2(LIBELFBITS,newphdr) (elf, count) || count == PN_XNUM || elf->state.ELFW(elf,LIBELFBITS).phdr == NULL) { + if (unlikely (count > SIZE_MAX / sizeof (ElfW2(LIBELFBITS,Phdr)))) + { + result = NULL; + goto out; + } + /* Allocate a new program header with the appropriate number of elements. */ result = (ElfW2(LIBELFBITS,Phdr) *) diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c index 296b1ac..153e377 100644 --- a/libelf/elf32_updatefile.c +++ b/libelf/elf32_updatefile.c @@ -1,5 +1,5 @@ /* Write changed data structures. - Copyright (C) 2000-2010 Red Hat, Inc. + Copyright (C) 2000-2010, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -133,7 +133,7 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) (*fctp) ((char *) elf->map_address + elf->start_offset, ehdr, sizeof (ElfW2(LIBELFBITS,Ehdr)), 1); } - else + else if (elf->map_address + elf->start_offset != ehdr) memcpy (elf->map_address + elf->start_offset, ehdr, sizeof (ElfW2(LIBELFBITS,Ehdr))); @@ -202,6 +202,9 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) /* Write all the sections. Well, only those which are modified. */ if (shnum > 0) { + if (unlikely (shnum > SIZE_MAX / sizeof (Elf_Scn *))) + return 1; + Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns; Elf_Scn **scns = (Elf_Scn **) alloca (shnum * sizeof (Elf_Scn *)); char *const shdr_start = ((char *) elf->map_address + elf->start_offset @@ -624,6 +627,10 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) /* Write all the sections. Well, only those which are modified. */ if (shnum > 0) { + if (unlikely (shnum > SIZE_MAX / (sizeof (Elf_Scn *) + + sizeof (ElfW2(LIBELFBITS,Shdr))))) + return 1; + off_t shdr_offset = elf->start_offset + ehdr->e_shoff; #if EV_NUM != 2 xfct_t shdr_fctp = __elf_xfctstom[__libelf_version - 1][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_SHDR]; @@ -633,7 +640,8 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) #endif ElfW2(LIBELFBITS,Shdr) *shdr_data; - if (change_bo || elf->state.ELFW(elf,LIBELFBITS).shdr == NULL) + if (change_bo || elf->state.ELFW(elf,LIBELFBITS).shdr == NULL + || (elf->flags & ELF_F_DIRTY)) shdr_data = (ElfW2(LIBELFBITS,Shdr) *) alloca (shnum * sizeof (ElfW2(LIBELFBITS,Shdr))); else @@ -764,7 +772,8 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) (*shdr_fctp) (&shdr_data[scn->index], scn->shdr.ELFW(e,LIBELFBITS), sizeof (ElfW2(LIBELFBITS,Shdr)), 1); - else if (elf->state.ELFW(elf,LIBELFBITS).shdr == NULL) + else if (elf->state.ELFW(elf,LIBELFBITS).shdr == NULL + || (elf->flags & ELF_F_DIRTY)) memcpy (&shdr_data[scn->index], scn->shdr.ELFW(e,LIBELFBITS), sizeof (ElfW2(LIBELFBITS,Shdr))); diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index b9d5cea..1ef70ac 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -1,5 +1,5 @@ /* Create descriptor for processing file. - Copyright (C) 1998-2010, 2012 Red Hat, Inc. + Copyright (C) 1998-2010, 2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -144,7 +144,8 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, off_t offset, if (unlikely (result == 0) && ehdr.e32->e_shoff != 0) { - if (ehdr.e32->e_shoff + sizeof (Elf32_Shdr) > maxsize) + if (unlikely (ehdr.e32->e_shoff >= maxsize) + || unlikely (maxsize - ehdr.e32->e_shoff < sizeof (Elf32_Shdr))) /* Cannot read the first section header. */ return 0; @@ -192,7 +193,8 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, off_t offset, if (unlikely (result == 0) && ehdr.e64->e_shoff != 0) { - if (ehdr.e64->e_shoff + sizeof (Elf64_Shdr) > maxsize) + if (unlikely (ehdr.e64->e_shoff >= maxsize) + || unlikely (ehdr.e64->e_shoff + sizeof (Elf64_Shdr) > maxsize)) /* Cannot read the first section header. */ return 0; @@ -264,6 +266,15 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, /* Could not determine the number of sections. */ return NULL; + /* Check for too many sections. */ + if (e_ident[EI_CLASS] == ELFCLASS32) + { + if (scncnt > SIZE_MAX / (sizeof (Elf_Scn) + sizeof (Elf32_Shdr))) + return NULL; + } + else if (scncnt > SIZE_MAX / (sizeof (Elf_Scn) + sizeof (Elf64_Shdr))) + return NULL; + /* We can now allocate the memory. Even if there are no section headers, we allocate space for a zeroth section in case we need it later. */ const size_t scnmax = (scncnt ?: (cmd == ELF_C_RDWR || cmd == ELF_C_RDWR_MMAP) @@ -303,6 +314,16 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, { /* We can use the mmapped memory. */ elf->state.elf32.ehdr = ehdr; + + if (unlikely (ehdr->e_shoff >= maxsize) + || unlikely (maxsize - ehdr->e_shoff + < scncnt * sizeof (Elf32_Shdr))) + { + free_and_out: + free (elf); + __libelf_seterrno (ELF_E_INVALID_FILE); + return NULL; + } elf->state.elf32.shdr = (Elf32_Shdr *) ((char *) ehdr + ehdr->e_shoff); @@ -389,6 +410,11 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, { /* We can use the mmapped memory. */ elf->state.elf64.ehdr = ehdr; + + if (unlikely (ehdr->e_shoff >= maxsize) + || unlikely (ehdr->e_shoff + + scncnt * sizeof (Elf32_Shdr) > maxsize)) + goto free_and_out; elf->state.elf64.shdr = (Elf64_Shdr *) ((char *) ehdr + ehdr->e_shoff); @@ -565,11 +591,6 @@ read_file (int fildes, off_t offset, size_t maxsize, || cmd == ELF_C_WRITE_MMAP || cmd == ELF_C_READ_MMAP_PRIVATE); -#if _MUDFLAP - /* Mudflap doesn't grok that our mmap'd data is ok. */ - use_mmap = 0; -#endif - if (use_mmap) { if (parent == NULL) diff --git a/libelf/elf_getarsym.c b/libelf/elf_getarsym.c index 9e0f4c2..7325190 100644 --- a/libelf/elf_getarsym.c +++ b/libelf/elf_getarsym.c @@ -1,5 +1,5 @@ /* Return symbol table of archive. - Copyright (C) 1998-2000, 2002, 2005, 2012 Red Hat, Inc. + Copyright (C) 1998-2000, 2002, 2005, 2009, 2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -57,7 +57,9 @@ read_number_entries (uint64_t *nump, Elf *elf, size_t *offp, bool index64_p) size_t w = index64_p ? 8 : 4; if (elf->map_address != NULL) - u = *(union u *) (elf->map_address + *offp); + /* Use memcpy instead of pointer dereference so as not to assume the + field is naturally aligned within the file. */ + memcpy (&u, elf->map_address + *offp, sizeof u); else if ((size_t) pread_retry (elf->fildes, &u, w, *offp) != w) return -1; @@ -181,6 +183,9 @@ elf_getarsym (elf, ptr) size_t index_size = atol (tmpbuf); if (SARMAG + sizeof (struct ar_hdr) + index_size > elf->maximum_size +#if SIZE_MAX <= 4294967295U + || n >= SIZE_MAX / sizeof (Elf_Arsym) +#endif || n * w > index_size) { /* This index table cannot be right since it does not fit into @@ -238,6 +243,9 @@ elf_getarsym (elf, ptr) else { file_data = (void *) (elf->map_address + off); + if (!ALLOW_UNALIGNED + && ((uintptr_t) file_data & -(uintptr_t) n) != 0) + file_data = memcpy (alloca (sz), elf->map_address + off, sz); str_data = (char *) (elf->map_address + off + sz); } diff --git a/libelf/elf_getshdrstrndx.c b/libelf/elf_getshdrstrndx.c index 57ad800..1dbed4c 100644 --- a/libelf/elf_getshdrstrndx.c +++ b/libelf/elf_getshdrstrndx.c @@ -1,5 +1,5 @@ /* Return section index of section header string table. - Copyright (C) 2002, 2005, 2009 Red Hat, Inc. + Copyright (C) 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2002. @@ -104,10 +104,25 @@ elf_getshdrstrndx (elf, dst) if (elf->map_address != NULL && elf->state.elf32.ehdr->e_ident[EI_DATA] == MY_ELFDATA && (ALLOW_UNALIGNED - || (((size_t) ((char *) elf->map_address + offset)) + || (((size_t) ((char *) elf->map_address + + elf->start_offset + offset)) & (__alignof__ (Elf32_Shdr) - 1)) == 0)) - /* We can directly access the memory. */ - num = ((Elf32_Shdr *) (elf->map_address + offset))->sh_link; + { + /* First see whether the information in the ELF header is + valid and it does not ask for too much. */ + if (unlikely (elf->maximum_size - offset + < sizeof (Elf32_Shdr))) + { + /* Something is wrong. */ + __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); + result = -1; + goto out; + } + + /* We can directly access the memory. */ + num = ((Elf32_Shdr *) (elf->map_address + elf->start_offset + + offset))->sh_link; + } else { /* We avoid reading in all the section headers. Just read @@ -142,10 +157,25 @@ elf_getshdrstrndx (elf, dst) if (elf->map_address != NULL && elf->state.elf64.ehdr->e_ident[EI_DATA] == MY_ELFDATA && (ALLOW_UNALIGNED - || (((size_t) ((char *) elf->map_address + offset)) + || (((size_t) ((char *) elf->map_address + + elf->start_offset + offset)) & (__alignof__ (Elf64_Shdr) - 1)) == 0)) - /* We can directly access the memory. */ - num = ((Elf64_Shdr *) (elf->map_address + offset))->sh_link; + { + /* First see whether the information in the ELF header is + valid and it does not ask for too much. */ + if (unlikely (elf->maximum_size - offset + < sizeof (Elf64_Shdr))) + { + /* Something is wrong. */ + __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); + result = -1; + goto out; + } + + /* We can directly access the memory. */ + num = ((Elf64_Shdr *) (elf->map_address + elf->start_offset + + offset))->sh_link; + } else { /* We avoid reading in all the section headers. Just read diff --git a/libelf/elf_newscn.c b/libelf/elf_newscn.c index 70d29b6..6e0029e 100644 --- a/libelf/elf_newscn.c +++ b/libelf/elf_newscn.c @@ -1,5 +1,5 @@ /* Append new section. - Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -83,10 +83,18 @@ elf_newscn (elf) else { /* We must allocate a new element. */ - Elf_ScnList *newp; + Elf_ScnList *newp = NULL; assert (elf->state.elf.scnincr > 0); + if ( +#if SIZE_MAX <= 4294967295U + likely (elf->state.elf.scnincr + < SIZE_MAX / 2 / sizeof (Elf_Scn) - sizeof (Elf_ScnList)) +#else + 1 +#endif + ) newp = (Elf_ScnList *) calloc (sizeof (Elf_ScnList) + ((elf->state.elf.scnincr *= 2) * sizeof (Elf_Scn)), 1); diff --git a/libelf/elf_update.c b/libelf/elf_update.c index 31ba253..54c20f5 100644 --- a/libelf/elf_update.c +++ b/libelf/elf_update.c @@ -69,14 +69,10 @@ write_file (Elf *elf, off_t size, int change_bo, size_t shnum) /* Try to map the file if this isn't done yet. */ if (elf->map_address == NULL && elf->cmd == ELF_C_WRITE_MMAP) { -#if _MUDFLAP - /* Mudflap doesn't grok that our mmap'd data is ok. */ -#else elf->map_address = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, elf->fildes, 0); if (unlikely (elf->map_address == MAP_FAILED)) elf->map_address = NULL; -#endif } if (elf->map_address != NULL) diff --git a/libelf/gelf.h b/libelf/gelf.h index cd33225..e3f0740 100644 --- a/libelf/gelf.h +++ b/libelf/gelf.h @@ -150,7 +150,7 @@ typedef Elf64_Lib GElf_Lib; extern int gelf_getclass (Elf *__elf); -/* Return size of array of COUNT elemeents of the type denoted by TYPE +/* Return size of array of COUNT elements of the type denoted by TYPE in the external representation. The binary class is taken from ELF. The result is based on version VERSION of the ELF standard. */ extern size_t gelf_fsize (Elf *__elf, Elf_Type __type, size_t __count, diff --git a/libelf/gelf_getauxv.c b/libelf/gelf_getauxv.c index d87362e..a2f04e7 100644 --- a/libelf/gelf_getauxv.c +++ b/libelf/gelf_getauxv.c @@ -97,7 +97,8 @@ gelf_getauxv (data, ndx, dst) goto out; } - *dst = ((GElf_auxv_t *) data_scn->d.d_buf)[ndx]; + memcpy (dst, data_scn->d.d_buf + ndx * sizeof (GElf_auxv_t), + sizeof (GElf_auxv_t)); } result = dst; diff --git a/libelf/gelf_getdyn.c b/libelf/gelf_getdyn.c index 721af62..c366fd5 100644 --- a/libelf/gelf_getdyn.c +++ b/libelf/gelf_getdyn.c @@ -1,5 +1,5 @@ /* Get information from dynamic table at the given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -72,7 +72,7 @@ gelf_getdyn (data, ndx, dst) table entries has to be adopted. The user better has provided a buffer where we can store the information. While copying the data we are converting the format. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf32_Dyn, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; @@ -93,7 +93,7 @@ gelf_getdyn (data, ndx, dst) /* The data is already in the correct form. Just make sure the index is OK. */ - if (unlikely ((ndx + 1) * sizeof (GElf_Dyn) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, GElf_Dyn, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_getlib.c b/libelf/gelf_getlib.c index 9a8a174..880817e 100644 --- a/libelf/gelf_getlib.c +++ b/libelf/gelf_getlib.c @@ -1,5 +1,5 @@ /* Get library from table at the given index. - Copyright (C) 2004 Red Hat, Inc. + Copyright (C) 2004, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2004. @@ -65,7 +65,7 @@ gelf_getlib (data, ndx, dst) /* The data is already in the correct form. Just make sure the index is OK. */ GElf_Lib *result = NULL; - if (unlikely ((ndx + 1) * sizeof (GElf_Lib) > data->d_size)) + if (INVALID_NDX (ndx, GElf_Lib, data)) __libelf_seterrno (ELF_E_INVALID_INDEX); else { diff --git a/libelf/gelf_getmove.c b/libelf/gelf_getmove.c index 9566930..b81d61f 100644 --- a/libelf/gelf_getmove.c +++ b/libelf/gelf_getmove.c @@ -1,5 +1,5 @@ /* Get move structure at the given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -62,7 +62,7 @@ gelf_getmove (data, ndx, dst) /* The data is already in the correct form. Just make sure the index is OK. */ - if (unlikely ((ndx + 1) * sizeof (GElf_Move) > data->d_size)) + if (INVALID_NDX (ndx, GElf_Move, data)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_getrel.c b/libelf/gelf_getrel.c index 78394b4..1f786ff 100644 --- a/libelf/gelf_getrel.c +++ b/libelf/gelf_getrel.c @@ -1,5 +1,5 @@ /* Get REL relocation information at given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -50,12 +50,6 @@ gelf_getrel (data, ndx, dst) if (data_scn == NULL) return NULL; - if (unlikely (ndx < 0)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return NULL; - } - if (unlikely (data_scn->d.d_type != ELF_T_REL)) { __libelf_seterrno (ELF_E_INVALID_HANDLE); @@ -72,7 +66,7 @@ gelf_getrel (data, ndx, dst) if (scn->elf->class == ELFCLASS32) { /* We have to convert the data. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf32_Rel, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); result = NULL; @@ -92,7 +86,7 @@ gelf_getrel (data, ndx, dst) { /* Simply copy the data after we made sure we are actually getting correct data. */ - if (unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf64_Rel, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); result = NULL; diff --git a/libelf/gelf_getrela.c b/libelf/gelf_getrela.c index 1d0e7ee..cead7ee 100644 --- a/libelf/gelf_getrela.c +++ b/libelf/gelf_getrela.c @@ -1,5 +1,5 @@ /* Get RELA relocation information at given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -50,12 +50,6 @@ gelf_getrela (data, ndx, dst) if (data_scn == NULL) return NULL; - if (unlikely (ndx < 0)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return NULL; - } - if (unlikely (data_scn->d.d_type != ELF_T_RELA)) { __libelf_seterrno (ELF_E_INVALID_HANDLE); @@ -72,7 +66,7 @@ gelf_getrela (data, ndx, dst) if (scn->elf->class == ELFCLASS32) { /* We have to convert the data. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf32_Rela, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); result = NULL; @@ -93,7 +87,7 @@ gelf_getrela (data, ndx, dst) { /* Simply copy the data after we made sure we are actually getting correct data. */ - if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); result = NULL; diff --git a/libelf/gelf_getsym.c b/libelf/gelf_getsym.c index 183872e..a141c2d 100644 --- a/libelf/gelf_getsym.c +++ b/libelf/gelf_getsym.c @@ -1,5 +1,5 @@ /* Get symbol information from symbol table at the given index. - Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 1999. @@ -69,7 +69,7 @@ gelf_getsym (data, ndx, dst) table entries has to be adopted. The user better has provided a buffer where we can store the information. While copying the data we are converting the format. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data->d_size)) + if (INVALID_NDX (ndx, Elf32_Sym, data)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; @@ -98,7 +98,7 @@ gelf_getsym (data, ndx, dst) /* The data is already in the correct form. Just make sure the index is OK. */ - if (unlikely ((ndx + 1) * sizeof (GElf_Sym) > data->d_size)) + if (INVALID_NDX (ndx, GElf_Sym, data)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_getsyminfo.c b/libelf/gelf_getsyminfo.c index 09c9cee..8d7da7f 100644 --- a/libelf/gelf_getsyminfo.c +++ b/libelf/gelf_getsyminfo.c @@ -1,5 +1,5 @@ /* Get additional symbol information from symbol table at the given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -63,7 +63,7 @@ gelf_getsyminfo (data, ndx, dst) /* The data is already in the correct form. Just make sure the index is OK. */ - if (unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data->d_size)) + if (INVALID_NDX (ndx, GElf_Syminfo, data)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_getsymshndx.c b/libelf/gelf_getsymshndx.c index 91e1bf6..c19e876 100644 --- a/libelf/gelf_getsymshndx.c +++ b/libelf/gelf_getsymshndx.c @@ -1,6 +1,6 @@ /* Get symbol information and separate section index from symbol table at the given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -69,7 +69,7 @@ gelf_getsymshndx (symdata, shndxdata, ndx, dst, dstshndx) section index table. */ if (likely (shndxdata_scn != NULL)) { - if (unlikely ((ndx + 1) * sizeof (Elf32_Word) > shndxdata_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf32_Word, &shndxdata_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; @@ -89,7 +89,7 @@ gelf_getsymshndx (symdata, shndxdata, ndx, dst, dstshndx) table entries has to be adopted. The user better has provided a buffer where we can store the information. While copying the data we are converting the format. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata->d_size)) + if (INVALID_NDX (ndx, Elf32_Sym, symdata)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; @@ -118,7 +118,7 @@ gelf_getsymshndx (symdata, shndxdata, ndx, dst, dstshndx) /* The data is already in the correct form. Just make sure the index is OK. */ - if (unlikely ((ndx + 1) * sizeof (GElf_Sym) > symdata->d_size)) + if (INVALID_NDX (ndx, GElf_Sym, symdata)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_getversym.c b/libelf/gelf_getversym.c index 9e80efc..fe8dc62 100644 --- a/libelf/gelf_getversym.c +++ b/libelf/gelf_getversym.c @@ -1,5 +1,5 @@ /* Get symbol version information at the given index. - Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 1999. @@ -71,7 +71,7 @@ gelf_getversym (data, ndx, dst) /* The data is already in the correct form. Just make sure the index is OK. */ - if (unlikely ((ndx + 1) * sizeof (GElf_Versym) > data->d_size)) + if (INVALID_NDX (ndx, GElf_Versym, data)) { __libelf_seterrno (ELF_E_INVALID_INDEX); result = NULL; diff --git a/libelf/gelf_update_dyn.c b/libelf/gelf_update_dyn.c index 94408c8..2eb526e 100644 --- a/libelf/gelf_update_dyn.c +++ b/libelf/gelf_update_dyn.c @@ -1,5 +1,5 @@ /* Update information in dynamic table at the given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -50,12 +50,6 @@ gelf_update_dyn (data, ndx, src) if (data == NULL) return 0; - if (unlikely (ndx < 0)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return 0; - } - if (unlikely (data_scn->d.d_type != ELF_T_DYN)) { /* The type of the data better should match. */ @@ -81,7 +75,7 @@ gelf_update_dyn (data, ndx, src) } /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf32_Dyn, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; @@ -95,7 +89,7 @@ gelf_update_dyn (data, ndx, src) else { /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf64_Dyn) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf64_Dyn, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_update_lib.c b/libelf/gelf_update_lib.c index 4700bef..1c8c23d 100644 --- a/libelf/gelf_update_lib.c +++ b/libelf/gelf_update_lib.c @@ -1,5 +1,5 @@ /* Update library in table at the given index. - Copyright (C) 2004 Red Hat, Inc. + Copyright (C) 2004, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2004. @@ -47,12 +47,6 @@ gelf_update_lib (data, ndx, src) if (data == NULL) return 0; - if (unlikely (ndx < 0)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return 0; - } - Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data; if (unlikely (data_scn->d.d_type != ELF_T_LIB)) { @@ -66,7 +60,7 @@ gelf_update_lib (data, ndx, src) /* Check whether we have to resize the data buffer. */ int result = 0; - if (unlikely ((ndx + 1) * sizeof (Elf64_Lib) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf64_Lib, &data_scn->d)) __libelf_seterrno (ELF_E_INVALID_INDEX); else { diff --git a/libelf/gelf_update_move.c b/libelf/gelf_update_move.c index 102a45b..ad2ca6a 100644 --- a/libelf/gelf_update_move.c +++ b/libelf/gelf_update_move.c @@ -1,5 +1,5 @@ /* Update move structure at the given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -54,8 +54,7 @@ gelf_update_move (data, ndx, src) assert (sizeof (GElf_Move) == sizeof (Elf64_Move)); /* Check whether we have to resize the data buffer. */ - if (unlikely (ndx < 0) - || unlikely ((ndx + 1) * sizeof (GElf_Move) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, GElf_Move, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); return 0; diff --git a/libelf/gelf_update_rel.c b/libelf/gelf_update_rel.c index d13e402..14f62e9 100644 --- a/libelf/gelf_update_rel.c +++ b/libelf/gelf_update_rel.c @@ -1,5 +1,5 @@ /* Update REL relocation information at given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -47,12 +47,6 @@ gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src) if (dst == NULL) return 0; - if (unlikely (ndx < 0)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return 0; - } - if (unlikely (data_scn->d.d_type != ELF_T_REL)) { /* The type of the data better should match. */ @@ -78,7 +72,7 @@ gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src) } /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf32_Rel, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; @@ -93,7 +87,7 @@ gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src) else { /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf64_Rel, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_update_rela.c b/libelf/gelf_update_rela.c index cc70297..8825270 100644 --- a/libelf/gelf_update_rela.c +++ b/libelf/gelf_update_rela.c @@ -1,5 +1,5 @@ /* Update RELA relocation information at given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -47,12 +47,6 @@ gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src) if (dst == NULL) return 0; - if (unlikely (ndx < 0)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return 0; - } - if (unlikely (data_scn->d.d_type != ELF_T_RELA)) { /* The type of the data better should match. */ @@ -80,7 +74,7 @@ gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src) } /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf32_Rela, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; @@ -96,7 +90,7 @@ gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src) else { /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_update_sym.c b/libelf/gelf_update_sym.c index ab37641..278129c 100644 --- a/libelf/gelf_update_sym.c +++ b/libelf/gelf_update_sym.c @@ -1,5 +1,5 @@ /* Update symbol information in symbol table at the given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -51,12 +51,6 @@ gelf_update_sym (data, ndx, src) if (data == NULL) return 0; - if (unlikely (ndx < 0)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return 0; - } - if (unlikely (data_scn->d.d_type != ELF_T_SYM)) { /* The type of the data better should match. */ @@ -81,7 +75,7 @@ gelf_update_sym (data, ndx, src) } /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf32_Sym, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; @@ -104,7 +98,7 @@ gelf_update_sym (data, ndx, src) else { /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf64_Sym) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf64_Sym, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_update_syminfo.c b/libelf/gelf_update_syminfo.c index 5654a0d..640a1ed 100644 --- a/libelf/gelf_update_syminfo.c +++ b/libelf/gelf_update_syminfo.c @@ -1,5 +1,5 @@ /* Update additional symbol information in symbol table at the given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -51,12 +51,6 @@ gelf_update_syminfo (data, ndx, src) if (data == NULL) return 0; - if (unlikely (ndx < 0)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return 0; - } - if (unlikely (data_scn->d.d_type != ELF_T_SYMINFO)) { /* The type of the data better should match. */ @@ -72,7 +66,7 @@ gelf_update_syminfo (data, ndx, src) rwlock_wrlock (scn->elf->lock); /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, GElf_Syminfo, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_update_symshndx.c b/libelf/gelf_update_symshndx.c index d2bb5bb..5e2c7f7 100644 --- a/libelf/gelf_update_symshndx.c +++ b/libelf/gelf_update_symshndx.c @@ -1,6 +1,6 @@ /* Update symbol information and section index in symbol table at the given index. - Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -56,12 +56,6 @@ gelf_update_symshndx (symdata, shndxdata, ndx, src, srcshndx) if (symdata == NULL) return 0; - if (unlikely (ndx < 0)) - { - __libelf_seterrno (ELF_E_INVALID_INDEX); - return 0; - } - if (unlikely (symdata_scn->d.d_type != ELF_T_SYM)) { /* The type of the data better should match. */ @@ -107,7 +101,7 @@ gelf_update_symshndx (symdata, shndxdata, ndx, src, srcshndx) } /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf32_Sym, &symdata_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; @@ -130,7 +124,7 @@ gelf_update_symshndx (symdata, shndxdata, ndx, src, srcshndx) else { /* Check whether we have to resize the data buffer. */ - if (unlikely ((ndx + 1) * sizeof (Elf64_Sym) > symdata_scn->d.d_size)) + if (INVALID_NDX (ndx, Elf64_Sym, &symdata_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); goto out; diff --git a/libelf/gelf_update_versym.c b/libelf/gelf_update_versym.c index a4cec1f..03a3c5a 100644 --- a/libelf/gelf_update_versym.c +++ b/libelf/gelf_update_versym.c @@ -1,5 +1,5 @@ /* Update symbol version information. - Copyright (C) 2001, 2002 Red Hat, Inc. + Copyright (C) 2001, 2002, 2005, 2009, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2001. @@ -54,8 +54,7 @@ gelf_update_versym (data, ndx, src) assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym)); /* Check whether we have to resize the data buffer. */ - if (unlikely (ndx < 0) - || unlikely ((ndx + 1) * sizeof (GElf_Versym) > data_scn->d.d_size)) + if (INVALID_NDX (ndx, GElf_Versym, &data_scn->d)) { __libelf_seterrno (ELF_E_INVALID_INDEX); return 0; diff --git a/libelf/libelfP.h b/libelf/libelfP.h index 7da2370..52cf745 100644 --- a/libelf/libelfP.h +++ b/libelf/libelfP.h @@ -587,4 +587,8 @@ extern uint32_t __libelf_crc32 (uint32_t crc, unsigned char *buf, size_t len) /* Align offset to 4 bytes as needed for note name and descriptor data. */ #define NOTE_ALIGN(n) (((n) + 3) & -4U) +/* Convenience macro. */ +#define INVALID_NDX(ndx, type, data) \ + unlikely ((data)->d_size / sizeof (type) <= (unsigned int) (ndx)) + #endif /* libelfP.h */ diff --git a/m4/ChangeLog b/m4/ChangeLog index d4f2bc1..163ee73 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,23 @@ +2014-07-14 Mark Wielaard + + * biarch.m4 (utrace_BIARCH): Set biarch-no for cross-compile using + AC_RUN_IFELSE extra argument. + +2013-12-02 Jan Kratochvil + + * biarch.m4 (utrace_BIARCH): Call AC_MSG_WARN if !BIARCH. + +2013-11-07 Roland McGrath + Jan Kratochvil + + * biarch.m4: New file. + +2013-04-24 Mark Wielaard + + * gettext.m4: Upgrade to gettext-0.18.2. + * iconv.m4: Upgrade to gettext-0.18.2. + * po.m4: Upgrade to gettext-0.18.2. + 2010-04-14 Roland McGrath * gettext.m4: Upgrade to gettext-0.17. diff --git a/m4/Makefile.in b/m4/Makefile.in index b00c01e..d081f9e 100644 --- a/m4/Makefile.in +++ b/m4/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,6 +14,51 @@ @SET_MAKE@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -34,9 +78,10 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = m4 -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -45,18 +90,40 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = SOURCES = DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -65,10 +132,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -89,6 +159,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -99,6 +170,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -113,6 +185,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -196,11 +269,11 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): -tags: TAGS -TAGS: +tags TAGS: + +ctags CTAGS: -ctags: CTAGS -CTAGS: +cscope cscopelist: distdir: $(DISTFILES) @@ -335,15 +408,16 @@ uninstall-am: .MAKE: install-am install-strip -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/m4/biarch.m4 b/m4/biarch.m4 new file mode 100644 index 0000000..c238d8d --- /dev/null +++ b/m4/biarch.m4 @@ -0,0 +1,47 @@ +AC_DEFUN([utrace_CC_m32], [dnl +AC_CACHE_CHECK([$CC option for 32-bit word size], utrace_cv_CC_m32, [dnl +save_CC="$CC" +utrace_cv_CC_m32=none +for ut_try in -m32 -m31; do + [CC=`echo "$save_CC" | sed 's/ -m[36][241]//'`" $ut_try"] + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int foo (void) { return 1; }]])], + [utrace_cv_CC_m32=$ut_try]) + test x$utrace_cv_CC_m32 = xnone || break +done +CC="$save_CC"])]) + +AC_DEFUN([utrace_HOST64], [AC_REQUIRE([utrace_CC_m32]) +AS_IF([test x$utrace_cv_CC_m32 != xnone], [dnl +AC_CACHE_CHECK([for 64-bit host], utrace_cv_host64, [dnl +AC_EGREP_CPP([@utrace_host64@], [#include +#if (UINTPTR_MAX > 0xffffffffUL) +@utrace_host64@ +#endif], + utrace_cv_host64=yes, utrace_cv_host64=no)]) +AS_IF([test $utrace_cv_host64 = no], + [utrace_biarch=-m64 utrace_thisarch=$utrace_cv_CC_m32], + [utrace_biarch=$utrace_cv_CC_m32 utrace_thisarch=-m64]) + +biarch_CC=`echo "$CC" | sed "s/ *${utrace_thisarch}//"` +biarch_CC="$biarch_CC $utrace_biarch"])]) + +AC_DEFUN([utrace_BIARCH], [AC_REQUIRE([utrace_HOST64]) +utrace_biarch_forced=no +AC_ARG_WITH([biarch], + AC_HELP_STRING([--with-biarch], + [enable biarch tests despite build problems]), + [AS_IF([test "x$with_biarch" != xno], [utrace_biarch_forced=yes])]) +AS_IF([test $utrace_biarch_forced = yes], [dnl +utrace_cv_cc_biarch=yes +AC_MSG_NOTICE([enabling biarch tests regardless using $biarch_CC])], [dnl +AS_IF([test x$utrace_cv_CC_m32 != xnone], [dnl +AC_CACHE_CHECK([whether $biarch_CC makes executables we can run], + utrace_cv_cc_biarch, [dnl +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=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])])]) +AM_CONDITIONAL(BIARCH, [test $utrace_cv_cc_biarch = yes])]) diff --git a/m4/gettext.m4 b/m4/gettext.m4 index c9ae1f7..8d1f066 100644 --- a/m4/gettext.m4 +++ b/m4/gettext.m4 @@ -1,5 +1,5 @@ -# gettext.m4 serial 60 (gettext-0.17) -dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. +# gettext.m4 serial 66 (gettext-0.18.2) +dnl Copyright (C) 1995-2013 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2006. +dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. @@ -35,7 +35,7 @@ dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, -dnl the value `$(top_builddir)/intl/' is used. +dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled @@ -60,6 +60,8 @@ AC_DEFUN([AM_GNU_GETTEXT], ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) + ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], + [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) @@ -95,7 +97,7 @@ AC_DEFUN([AM_GNU_GETTEXT], AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) - dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. + dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. @@ -123,11 +125,11 @@ AC_DEFUN([AM_GNU_GETTEXT], gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) - AC_ARG_WITH(included-gettext, + AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) - AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then @@ -155,12 +157,18 @@ changequote([,])dnl fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], - [AC_TRY_LINK([#include + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include $gt_revision_test_code extern int _nl_msg_cat_cntr; -extern int *_nl_domain_bindings;], - [bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], +extern int *_nl_domain_bindings; + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) @@ -181,35 +189,47 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_b gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. - AC_TRY_LINK([#include + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif -const char *_nl_expand_alias (const char *);], - [bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], +const char *_nl_expand_alias (const char *); + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" - AC_TRY_LINK([#include + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif -const char *_nl_expand_alias (const char *);], - [bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], - [LIBINTL="$LIBINTL $LIBICONV" - LTLIBINTL="$LTLIBINTL $LTLIBICONV" - eval "$gt_func_gnugettext_libintl=yes" - ]) +const char *_nl_expand_alias (const char *); + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ]])], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) @@ -267,7 +287,7 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then - AC_DEFINE(ENABLE_NLS, 1, + AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else @@ -301,9 +321,9 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a fi dnl For backward compatibility. Some packages may be using this. - AC_DEFINE(HAVE_GETTEXT, 1, + AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) - AC_DEFINE(HAVE_DCGETTEXT, 1, + AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi @@ -319,9 +339,9 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a fi dnl Make all variables we use known to autoconf. - AC_SUBST(BUILD_INCLUDED_LIBINTL) - AC_SUBST(USE_INCLUDED_LIBINTL) - AC_SUBST(CATOBJEXT) + AC_SUBST([BUILD_INCLUDED_LIBINTL]) + AC_SUBST([USE_INCLUDED_LIBINTL]) + AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= @@ -329,36 +349,36 @@ return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_a dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share - AC_SUBST(DATADIRNAME) + AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo - AC_SUBST(INSTOBJEXT) + AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat - AC_SUBST(GENCAT) + AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi - AC_SUBST(INTLOBJS) + AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix - AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" - AC_SUBST(INTLLIBS) + AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. - AC_SUBST(LIBINTL) - AC_SUBST(LTLIBINTL) - AC_SUBST(POSUB) + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + AC_SUBST([POSUB]) ]) diff --git a/m4/iconv.m4 b/m4/iconv.m4 index 66bc76f..a503646 100644 --- a/m4/iconv.m4 +++ b/m4/iconv.m4 @@ -1,5 +1,5 @@ -# iconv.m4 serial AM6 (gettext-0.17) -dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc. +# iconv.m4 serial 18 (gettext-0.18.2) +dnl Copyright (C) 2000-2002, 2007-2013 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -30,44 +30,55 @@ AC_DEFUN([AM_ICONV_LINK], dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first - dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. + dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) - AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [ + AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - am_cv_func_iconv=yes) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - am_cv_lib_iconv=yes - am_cv_func_iconv=yes) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_lib_iconv=yes] + [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then - AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [ - dnl This tests against bugs in AIX 5.1 and HP-UX 11.11. + AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ + dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, + dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi - AC_TRY_RUN([ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ #include #include int main () { + int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { @@ -84,7 +95,47 @@ int main () (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) - return 1; + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\263"; + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ @@ -103,7 +154,8 @@ int main () (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) - return 1; + result |= 8; + iconv_close (cd_88591_to_utf8); } } #endif @@ -117,13 +169,19 @@ int main () && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) - return 1; - return 0; -}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], - [case "$host_os" in + result |= 16; + return result; +}]])], + [am_cv_func_iconv_works=yes], + [am_cv_func_iconv_works=no], + [ +changequote(,)dnl + case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; - esac]) + esac +changequote([,])dnl + ]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in @@ -134,7 +192,7 @@ int main () am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then - AC_DEFINE(HAVE_ICONV, 1, + AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then @@ -147,34 +205,64 @@ int main () LIBICONV= LTLIBICONV= fi - AC_SUBST(LIBICONV) - AC_SUBST(LTLIBICONV) + AC_SUBST([LIBICONV]) + AC_SUBST([LTLIBICONV]) ]) -AC_DEFUN([AM_ICONV], +dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to +dnl avoid warnings like +dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". +dnl This is tricky because of the way 'aclocal' is implemented: +dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. +dnl Otherwise aclocal's initial scan pass would miss the macro definition. +dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. +dnl Otherwise aclocal would emit many "Use of uninitialized value $1" +dnl warnings. +m4_define([gl_iconv_AC_DEFUN], + m4_version_prereq([2.64], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [m4_ifdef([gl_00GNULIB], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [[AC_DEFUN( + [$1], [$2])]])])) +gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) - AC_CACHE_VAL(am_cv_proto_iconv, [ - AC_TRY_COMPILE([ + AC_CACHE_VAL([am_cv_proto_iconv], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ #include #include extern #ifdef __cplusplus "C" #endif -#if defined(__STDC__) || defined(__cplusplus) +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif -], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + ]], + [[]])], + [am_cv_proto_iconv_arg1=""], + [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` - AC_MSG_RESULT([$]{ac_t:- - }[$]am_cv_proto_iconv) - AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + AC_MSG_RESULT([ + $am_cv_proto_iconv]) + AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) + dnl Also substitute ICONV_CONST in the gnulib generated . + m4_ifdef([gl_ICONV_H_DEFAULTS], + [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test -n "$am_cv_proto_iconv_arg1"; then + ICONV_CONST="const" + fi + ]) fi ]) diff --git a/m4/po.m4 b/m4/po.m4 index 0734762..f395723 100644 --- a/m4/po.m4 +++ b/m4/po.m4 @@ -1,5 +1,5 @@ -# po.m4 serial 15 (gettext-0.17) -dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. +# po.m4 serial 20 (gettext-0.18.2) +dnl Copyright (C) 1995-2013 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -17,19 +17,19 @@ dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. -AC_PREREQ(2.50) +AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl - AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. - AC_SUBST([GETTEXT_MACRO_VERSION], [0.17]) + AC_SUBST([GETTEXT_MACRO_VERSION], [0.18]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. @@ -41,7 +41,7 @@ AC_DEFUN([AM_PO_SUBDIRS], [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) - AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl @@ -102,7 +102,7 @@ changequote([,])dnl case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. @@ -118,7 +118,8 @@ changequote([,])dnl if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" - cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration @@ -129,12 +130,12 @@ changequote([,])dnl test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` - # Hide the ALL_LINGUAS assigment from automake < 1.5. + # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. - # Hide the ALL_LINGUAS assigment from automake < 1.5. + # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES @@ -226,7 +227,7 @@ AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. @@ -254,6 +255,7 @@ EOT fi # A sed script that extracts the value of VARIABLE from a Makefile. + tab=`printf '\t'` sed_x_variable=' # Test if the hold space is empty. x @@ -261,9 +263,9 @@ s/P/P/ x ta # Yes it was empty. Look if we have the expected variable definition. -/^[ ]*VARIABLE[ ]*=/{ +/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{ # Seen the first line of the variable definition. - s/^[ ]*VARIABLE[ ]*=// + s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=// ba } bd @@ -315,7 +317,7 @@ changequote([,])dnl sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` fi - # Hide the ALL_LINGUAS assigment from automake < 1.5. + # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) @@ -405,14 +407,15 @@ changequote([,])dnl fi sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" + tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" < + + * *.po: Update for 0.160. + +2014-05-20 Mark Wielaard + + * *.po: Regenerated. + +2014-05-17 Mark Wielaard + + * *.po: Update for 0.159. + +2014-01-03 Mark Wielaard + + * *.po: Update for 0.158. + +2013-07-30 Mark Wielaard + + * *.po: Update for 0.157. + +2013-07-25 Jan Kratochvil + + * *.po: Update for 0.156. + +2013-04-24 Mark Wielaard + + * Makefile.in.in: Upgrade to gettext-0.18.2. + 2012-08-27 Mark Wielaard * *.po: Update for 0.155. diff --git a/po/Makefile.in.in b/po/Makefile.in.in index fecf500..fce63a6 100644 --- a/po/Makefile.in.in +++ b/po/Makefile.in.in @@ -1,5 +1,5 @@ # Makefile for PO directory in any package using GNU gettext. -# Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper +# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public @@ -8,8 +8,8 @@ # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # -# Origin: gettext-0.17 -GETTEXT_MACRO_VERSION = 0.17 +# Origin: gettext-0.18.2 +GETTEXT_MACRO_VERSION = 0.18 PACKAGE = @PACKAGE@ VERSION = @VERSION@ @@ -88,22 +88,22 @@ CATALOGS = @CATALOGS@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ - cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ -all: check-macro-version all-@USE_NLS@ +all: all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. -check-macro-version: - @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ +CHECK_MACRO_VERSION = \ + test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } @@ -123,6 +123,7 @@ check-macro-version: # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot + @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ @@ -137,8 +138,16 @@ stamp-po: $(srcdir)/$(DOMAIN).pot # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +# The determination of whether the package xyz is a GNU one is based on the +# heuristic whether some file in the top level directory mentions "GNU xyz". +# If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed - if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ + if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ + LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \ + else \ + LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ + fi; \ + } | grep -v 'libtool:' >/dev/null; then \ package_gnu='GNU '; \ else \ package_gnu=''; \ @@ -193,8 +202,15 @@ $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ - cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) \ + && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ + esac; \ + }; \ else \ $(MAKE) $${lang}.po-create; \ fi @@ -217,7 +233,6 @@ install-data: install-data-@USE_NLS@ fi install-data-no: all install-data-yes: all - $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ @@ -269,7 +284,6 @@ installdirs-data: installdirs-data-@USE_NLS@ fi installdirs-data-no: installdirs-data-yes: - $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ @@ -395,9 +409,15 @@ update-po: Makefile tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ - if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + esac; \ + }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ @@ -418,9 +438,13 @@ $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: +# Recreate Makefile by invoking config.status. Explicitly invoke the shell, +# because execution permission bits may not work on the current file system. +# Use @SHELL@, which is the shell determined by autoconf for the use by its +# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ - && $(SHELL) ./config.status $(subdir)/$@.in po-directories + && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: diff --git a/po/de.gmo b/po/de.gmo index 9605049075ad394ece699b4ce67064bc09205705..69c0400286ee10a74c56852b6e845a8c4b4f7e4c 100644 GIT binary patch delta 2604 zcmZwHeN5F=9LMo<9T!L*FUaK?F7YG^#xp2jAR0)5fyFRt)Ka(ph^-o~HrA!uWVJcN z-}=LzM4e9m2yv{fS>V{3xg7aNQ)^VNh7IeV8q=`l=>6$;u4BwQ<#o>YckcI`^F8Nx ze?8@yJLMUlj|iUd7}Hp8OrkMnuEH1}E@A?%t~4eFGp*|}mi|W6xK_-;r>%pyp8hA8 zkKbT4{)usT592YW%9sqysxm>7MWc?u|A{b({vc-JVSE_Jk?)%CFc%}MjqzhKuEA!k z!5-wFd5=F4_%%L+S1=uau->-%YJ$dW<3S1EPQ_O-3J;=Id<2!~42I)5)P$d-b~weY^}SqDvYGxg=yG}U*LXRhvgfM3E;Cq8h#pYAg5s7N0sIhrs7Rhg_ckgXKivP zuD}%feHg&kP3Dg8rsD)oc9p!D*_Y)i3@2^8P5H#&HbgA~CF4X{P#lu*FXHW~f zj=D^LTf;WHCHG-E@mkaoJ&DTGi^}^F>e3Bj7#_q-JdDZAZ^mhCA#e#bFzQh^VFqT< zuSMoGPuaMG+R0he5nRMHyn%XK{;~1MMz_Q{sPT2yE=;2TB0dtN5u~vJ&!UdvXQWzY z0d-kQsjuwCJ$L{$?hjPSwR#;%6lUQD)Dg6!F6mw@#t|&UDb&&ZhC$uh_-6ODszD9t zMNRlN>g>m?*HNW2Tipd`p)PGZYT_Zx!K0|W)0mC(s63IpYRX?`-Mx+aYv7v%D)BU` z{}U=v*kf)93s5_1!~phKU&lQ9AD||>fV$N;FcH)ydEY`^&I#1QuAshm3stf3 zV4FK29~Ee_K8N}N(sNCC2zBPCZGRH=lYI>X_&aJLQIEUkqJF~bFdjQl6ZfI=4BB{b z#6CEV`8>FQN^}#I;GT`g?{FuqMkQ!N-Qqsf&IWA%5C-Uy8L|=Q-Cp1H~M!TW=vCaD4 zidd`jJQ+HcWeDxRo0tl#PbjvJSZL>ZrkxKt=g4qu*^|(Y#)z$~$(O`*9LsBW+3}<# zmi%Zl=-Z(Tw;m9?L(I$WQ#`wzDSw)G%`RIPPqs6XlAcsdUpG;oP&I0t>6FBVts3b* yxc_7av6VIHUX~%W^JgY}sUM}rRF;(1mXy~7%E~sCS3Bp+hga>{JJD2;6Zj9m0CubZ delta 2605 zcmZwHeN5F=9LMo<85cyJC7v&Ec?v`k;!#KxG#(Nx5Qb5s&BfLqu~oy>#*$l`&NgSt zet+1Okd6)i2r0(anrO{tE=T^+)Ebp*Lx=WHjcM3&Qtywya~)&em9KNYzw`T^bH3;N zxHayXANPE5Cp>VvUt#_@l)d6D~d9Z=EQ}Jz##KWi+A4erRjbZpXYQis3JDs)t z`}j2dsLk%q%5e?-c1*(_oWXrqgrzmc`08^Y3QS0 zh0JL>ZG0HDlQXCzxQJauL2zOo1V@BnJuAE=TqqmCqkU1Z`$)Dg6zF6nEy5szX4o> z9@K;%pw526dL31|Wz>Rw&$*Yj6*ch?X5$Dd?>Cr*3#dF{d}_*HV%^h7{WUN^paREH z{a;auLYmwX=Am}975&(4eHZiSe~g;wJnB~8z+AkKsz7?PJFXc^>Gz}JBhA!bfy)F` zqJOOgEynOi&~%~B_CwU?Ifgp(pHO$>FVw=Ko@ZB>hf3Uq%KJX*a!#QZb_Mm`ZB)fV z13TRTxv0Q4>#L|gK>JY>9zmV?xb4qi0{v^~$2+KnM6|kQqyB`~pe}VAYT{m0oUUI6{rL)s9W5N+S!2ZA3;C;G1OhTh^oLm7UD8$o`PME zjyhm=(a=QuP@l;m)JjKD31(0Wn!`|BwEZPig<@WCcbJI<^h;0++=HrIKk5h%VkDkK zEqnrf`u@MAp^1J+E#x68LEMY3`RJuziz<0N>ZrP~8V699?=#fSW>FI_q87fk-Q8FY zYJoMV4erG(z6>)&LnRzVE#NEEif1tv7i@e9l{lh<2! zj>JzATkIen7!Uvd$FJM*Bqh|nWydM1>GWinn2MyBrci8@Sk$W6gwsKW89Q1d!|doE zR>XoC=AIB+a84zqd++fi+-XQj3EjH81vDHQCT9F~R^_QpPQ%|Humlc<8E-tI~mzCC*S2$ diff --git a/po/de.po b/po/de.po index ea42846..34d83e2 100644 --- a/po/de.po +++ b/po/de.po @@ -11,29 +11,29 @@ msgid "" msgstr "" "Project-Id-Version: elfutils VERSION\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2012-08-27 20:34+0200\n" +"POT-Creation-Date: 2014-08-27 11:26+0200\n" "PO-Revision-Date: 2009-06-29 15:15+0200\n" "Last-Translator: Michael Münch \n" "Language-Team: German\n" -"Language: \n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 0.3\n" -#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:2842 -#: src/readelf.c:3181 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3098 +#: src/readelf.c:3447 src/readelf.c:8018 src/unstrip.c:2115 src/unstrip.c:2323 #, c-format msgid "memory exhausted" msgstr "Kein Speicher mehr verfügbar" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:49 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:53 #: libelf/elf_error.c:60 msgid "no error" msgstr "kein Fehler" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:51 +#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:55 #: libelf/elf_error.c:91 msgid "out of memory" msgstr "nicht genügend Speicher" @@ -72,7 +72,7 @@ msgstr "Fehler bei Datenausgabe" msgid "no backend support available" msgstr "keine Backend-Unterstützung verfügbar" -#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:50 +#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:54 #: libelf/elf_error.c:63 msgid "unknown error" msgstr "unbekannter Fehler" @@ -169,7 +169,7 @@ msgstr "Ungültige DWARF Version" msgid "invalid directory index" msgstr "ungültiger Verzeichnisindex" -#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:70 +#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:74 msgid "address out of range" msgstr "Außerhalb des Adressbereiches" @@ -189,7 +189,7 @@ msgstr "Ungültiger Zeilenindex" msgid "invalid address range index" msgstr "Ungültiger Adressbereichs Index" -#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:71 +#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:75 msgid "no matching address range" msgstr "Kein passender Adressbereich" @@ -214,7 +214,7 @@ msgstr "ungültiger Abschnitt" msgid "no alternative debug link found" msgstr "" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdwfl/argp-std.c:46 src/unstrip.c:2265 msgid "Input selection options:" msgstr "Eingabeauswahloptionen:" @@ -248,139 +248,199 @@ msgstr "Kernel mit allen Modulen" msgid "Search path for separate debuginfo files" msgstr "Dateisuchpfad für separate Debug-Informationen" -#: libdwfl/argp-std.c:142 +#: libdwfl/argp-std.c:157 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:202 -#, c-format -msgid "cannot read ELF core file: %s" -msgstr "Konnte ELF Kerndatei %s nicht lesen" - -#: libdwfl/argp-std.c:220 -msgid "No modules recognized in core file" -msgstr "Keine Module in der Kerndatei gefunden" - -#: libdwfl/argp-std.c:232 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "Konnte Kernel Symbole nicht laden" -#: libdwfl/argp-std.c:236 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "Konnte Kernel Module nicht finden" -#: libdwfl/argp-std.c:250 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "Konnte Kernel oder Module nicht finden" -#: libdwfl/libdwflP.h:52 +#: 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:311 +msgid "No modules recognized in core file" +msgstr "Keine Module in der Kerndatei gefunden" + +#: libdwfl/libdwflP.h:56 msgid "See errno" msgstr "" -#: libdwfl/libdwflP.h:53 +#: libdwfl/libdwflP.h:57 msgid "See elf_errno" msgstr "" -#: libdwfl/libdwflP.h:54 +#: libdwfl/libdwflP.h:58 msgid "See dwarf_errno" msgstr "" -#: libdwfl/libdwflP.h:55 +#: libdwfl/libdwflP.h:59 msgid "See ebl_errno (XXX missing)" msgstr "" -#: libdwfl/libdwflP.h:56 +#: libdwfl/libdwflP.h:60 msgid "gzip decompression failed" msgstr "" -#: libdwfl/libdwflP.h:57 +#: libdwfl/libdwflP.h:61 msgid "bzip2 decompression failed" msgstr "" -#: libdwfl/libdwflP.h:58 +#: libdwfl/libdwflP.h:62 msgid "LZMA decompression failed" msgstr "" -#: libdwfl/libdwflP.h:59 +#: libdwfl/libdwflP.h:63 msgid "no support library found for machine" msgstr "" -#: libdwfl/libdwflP.h:60 +#: libdwfl/libdwflP.h:64 msgid "Callbacks missing for ET_REL file" msgstr "" -#: libdwfl/libdwflP.h:61 +#: libdwfl/libdwflP.h:65 msgid "Unsupported relocation type" msgstr "" -#: libdwfl/libdwflP.h:62 +#: libdwfl/libdwflP.h:66 msgid "r_offset is bogus" msgstr "" -#: libdwfl/libdwflP.h:63 libelf/elf_error.c:111 libelf/elf_error.c:171 +#: libdwfl/libdwflP.h:67 libelf/elf_error.c:111 libelf/elf_error.c:171 msgid "offset out of range" msgstr "Offset ausserhalb des Bereichs" -#: libdwfl/libdwflP.h:64 +#: libdwfl/libdwflP.h:68 #, fuzzy msgid "relocation refers to undefined symbol" msgstr "Zeige Grösse der definierten Symbole" -#: libdwfl/libdwflP.h:65 +#: libdwfl/libdwflP.h:69 msgid "Callback returned failure" msgstr "" -#: libdwfl/libdwflP.h:66 +#: libdwfl/libdwflP.h:70 #, fuzzy msgid "No DWARF information found" msgstr "keine DWARF Information" -#: libdwfl/libdwflP.h:67 +#: libdwfl/libdwflP.h:71 msgid "No symbol table found" msgstr "" -#: libdwfl/libdwflP.h:68 +#: libdwfl/libdwflP.h:72 #, fuzzy msgid "No ELF program headers" msgstr "Programm-Köpfe anzeigen" -#: libdwfl/libdwflP.h:69 +#: libdwfl/libdwflP.h:73 msgid "address range overlaps an existing module" msgstr "" -#: libdwfl/libdwflP.h:72 +#: libdwfl/libdwflP.h:76 msgid "image truncated" msgstr "" -#: libdwfl/libdwflP.h:73 +#: libdwfl/libdwflP.h:77 #, fuzzy msgid "ELF file opened" msgstr "keine ELF Datei" -#: libdwfl/libdwflP.h:74 +#: libdwfl/libdwflP.h:78 #, fuzzy msgid "not a valid ELF file" msgstr "Ungültige ELF Datei" -#: libdwfl/libdwflP.h:75 +#: libdwfl/libdwflP.h:79 #, fuzzy msgid "cannot handle DWARF type description" msgstr "konnte Elf-Deskriptor nicht erzeugen: %s" -#: libdwfl/libdwflP.h:76 +#: libdwfl/libdwflP.h:80 msgid "ELF file does not match build ID" msgstr "" -#: libdwfl/libdwflP.h:77 +#: libdwfl/libdwflP.h:81 #, fuzzy msgid "corrupt .gnu.prelink_undo section data" msgstr "konnte Abschnittsdaten nicht holen: %s" +#: libdwfl/libdwflP.h:82 +msgid "Internal error due to ebl" +msgstr "" + +#: libdwfl/libdwflP.h:83 +msgid "Missing data in core file" +msgstr "" + +#: libdwfl/libdwflP.h:84 +#, fuzzy +msgid "Invalid register" +msgstr "ungültiger Parameter" + +#: libdwfl/libdwflP.h:85 +msgid "Error reading process memory" +msgstr "" + +#: libdwfl/libdwflP.h:86 +msgid "Couldn't find architecture of any ELF" +msgstr "" + +#: libdwfl/libdwflP.h:87 +msgid "Error parsing /proc filesystem" +msgstr "" + +#: libdwfl/libdwflP.h:88 +#, fuzzy +msgid "Invalid DWARF" +msgstr "DWARF ungültig" + +#: libdwfl/libdwflP.h:89 +msgid "Unsupported DWARF" +msgstr "" + +#: libdwfl/libdwflP.h:90 +msgid "Unable to find more threads" +msgstr "" + +#: libdwfl/libdwflP.h:91 +msgid "Dwfl already has attached state" +msgstr "" + +#: libdwfl/libdwflP.h:92 +msgid "Dwfl has no attached state" +msgstr "" + +#: libdwfl/libdwflP.h:93 +msgid "Unwinding not supported for this architecture" +msgstr "" + +#: libdwfl/libdwflP.h:94 +#, fuzzy +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" -#: libebl/eblcorenotetypename.c:86 libebl/eblobjecttypename.c:57 +#: libebl/eblcorenotetypename.c:102 libebl/eblobjecttypename.c:57 #: libebl/eblobjnotetypename.c:73 libebl/eblosabiname.c:77 #: libebl/eblsectionname.c:89 libebl/eblsectiontypename.c:119 #: libebl/eblsegmenttypename.c:83 @@ -476,7 +536,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:4697 +#: libelf/elf_error.c:87 src/readelf.c:5190 #, c-format msgid "invalid encoding" msgstr "ungültige Kodierung" @@ -559,8 +619,8 @@ msgstr "data/scn Unterschied" msgid "invalid section header" msgstr "ungültiger Abschnitts-Header" -#: libelf/elf_error.c:187 src/readelf.c:6335 src/readelf.c:6780 -#: src/readelf.c:6881 src/readelf.c:7043 +#: libelf/elf_error.c:187 src/readelf.c:6980 src/readelf.c:7426 +#: src/readelf.c:7527 src/readelf.c:7689 #, c-format msgid "invalid data" msgstr "Ungültige Daten" @@ -623,31 +683,41 @@ msgid "Also show symbol or section names" msgstr "" #: src/addr2line.c:64 +msgid "Also show symbol and the section names" +msgstr "" + +#: src/addr2line.c:65 msgid "Also show line table flags" msgstr "" -#: src/addr2line.c:66 +#: src/addr2line.c:67 msgid "Treat addresses as offsets relative to NAME section." msgstr "" -#: src/addr2line.c:68 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 +#: src/addr2line.c:69 +msgid "" +"Show all source locations that caused inline expansion of subroutines at the " +"address." +msgstr "" + +#: src/addr2line.c:72 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 #: src/strings.c:75 msgid "Miscellaneous:" msgstr "Verschiedenes:" -#: src/addr2line.c:77 +#: src/addr2line.c:81 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" -#: src/addr2line.c:81 +#: src/addr2line.c:85 msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:181 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:231 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 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:460 src/size.c:211 src/strings.c:219 -#: src/strip.c:213 src/unstrip.c:226 +#: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -659,30 +729,30 @@ msgstr "" "GARANTIE,\n" "auch nicht für Marktgängigkeit oder Eignung für einen Bestimmten Zweck.\n" -#: src/addr2line.c:186 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:236 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 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:465 src/size.c:216 src/strings.c:224 -#: src/strip.c:218 src/unstrip.c:231 +#: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "Geschrieben von %s.\n" -#: src/addr2line.c:405 +#: src/addr2line.c:474 #, fuzzy, c-format msgid "Section syntax requires exactly one module" msgstr "Abschnitt syntax benötigt genau ein Modul" -#: src/addr2line.c:428 +#: src/addr2line.c:497 #, c-format msgid "offset %# lies outside section '%s'" msgstr "" -#: src/addr2line.c:469 +#: src/addr2line.c:563 #, c-format msgid "cannot find symbol '%s'" msgstr "Konnte Symbol '%s' nicht finden" -#: src/addr2line.c:474 +#: src/addr2line.c:568 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "" @@ -1121,8 +1191,8 @@ msgstr "" #: src/elfcmp.c:722 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:175 src/strip.c:450 src/strip.c:487 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1911 +#: src/unstrip.c:1940 #, c-format msgid "cannot open '%s'" msgstr "'%s' kann nicht geöffnet werden" @@ -1174,1596 +1244,1596 @@ msgstr "" msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "" -#: src/elflint.c:78 src/readelf.c:113 +#: src/elflint.c:78 src/readelf.c:123 msgid "FILE..." msgstr "DATEI..." -#: src/elflint.c:151 src/readelf.c:271 +#: src/elflint.c:155 src/readelf.c:292 #, c-format msgid "cannot open input file" msgstr "Kann Eingabedatei nicht öffnen" -#: src/elflint.c:158 +#: src/elflint.c:162 #, c-format msgid "cannot generate Elf descriptor: %s\n" msgstr "kann Elf-Deskriptor nicht erzeugen: %s\n" -#: src/elflint.c:177 +#: src/elflint.c:181 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/elflint.c:181 +#: src/elflint.c:185 msgid "No errors" msgstr "Keine Fehler" -#: src/elflint.c:215 src/readelf.c:434 +#: src/elflint.c:219 src/readelf.c:468 msgid "Missing file name.\n" msgstr "Dateiname fehlt.\n" -#: src/elflint.c:294 +#: src/elflint.c:298 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr "" -#: src/elflint.c:302 +#: src/elflint.c:306 #, fuzzy, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "Keine ELF-Datei - sie hat die falschen Magic Bytes am Anfang\n" -#: src/elflint.c:363 +#: src/elflint.c:371 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "" -#: src/elflint.c:368 +#: src/elflint.c:376 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "" -#: src/elflint.c:372 +#: src/elflint.c:380 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "" -#: src/elflint.c:378 +#: src/elflint.c:386 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "" -#: src/elflint.c:384 +#: src/elflint.c:392 #, c-format msgid "unsupport ABI version e_ident[%d] == %d\n" msgstr "" -#: src/elflint.c:389 +#: src/elflint.c:397 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] ist nicht null\n" -#: src/elflint.c:394 +#: src/elflint.c:402 #, c-format msgid "unknown object file type %d\n" msgstr "" -#: src/elflint.c:401 +#: src/elflint.c:409 #, c-format msgid "unknown machine type %d\n" msgstr "" -#: src/elflint.c:405 +#: src/elflint.c:413 #, c-format msgid "unknown object file version\n" msgstr "" -#: src/elflint.c:411 +#: src/elflint.c:419 #, c-format msgid "invalid program header offset\n" msgstr "" -#: src/elflint.c:413 +#: src/elflint.c:421 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" -#: src/elflint.c:417 +#: src/elflint.c:425 #, c-format msgid "invalid number of program header entries\n" msgstr "" -#: src/elflint.c:425 +#: src/elflint.c:433 #, c-format msgid "invalid section header table offset\n" msgstr "" -#: src/elflint.c:428 +#: src/elflint.c:436 #, c-format msgid "section header table must be present\n" msgstr "" -#: src/elflint.c:442 +#: src/elflint.c:450 #, c-format msgid "invalid number of section header table entries\n" msgstr "" -#: src/elflint.c:459 +#: src/elflint.c:467 #, c-format msgid "invalid section header index\n" msgstr "" -#: src/elflint.c:473 +#: src/elflint.c:481 #, fuzzy, c-format msgid "invalid number of program header table entries\n" msgstr "Ungültige Anzahl von Parametern.\n" -#: src/elflint.c:482 +#: src/elflint.c:490 #, c-format msgid "invalid machine flags: %s\n" msgstr "" -#: src/elflint.c:489 src/elflint.c:506 +#: src/elflint.c:497 src/elflint.c:514 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "" -#: src/elflint.c:492 src/elflint.c:509 +#: src/elflint.c:500 src/elflint.c:517 #, c-format msgid "invalid program header size: %hd\n" msgstr "" -#: src/elflint.c:495 src/elflint.c:512 +#: src/elflint.c:503 src/elflint.c:520 #, c-format msgid "invalid program header position or size\n" msgstr "" -#: src/elflint.c:498 src/elflint.c:515 +#: src/elflint.c:506 src/elflint.c:523 #, c-format msgid "invalid section header size: %hd\n" msgstr "" -#: src/elflint.c:501 src/elflint.c:518 +#: src/elflint.c:509 src/elflint.c:526 #, c-format msgid "invalid section header position or size\n" msgstr "" -#: src/elflint.c:562 +#: src/elflint.c:570 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " "group\n" msgstr "" -#: src/elflint.c:566 +#: src/elflint.c:574 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" msgstr "" -#: src/elflint.c:582 src/elflint.c:1426 src/elflint.c:1476 src/elflint.c:1581 -#: src/elflint.c:2166 src/elflint.c:2680 src/elflint.c:2841 src/elflint.c:2971 -#: src/elflint.c:3143 src/elflint.c:4045 +#: 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:595 src/elflint.c:1588 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " "type is not SHT_STRTAB\n" msgstr "" -#: src/elflint.c:618 +#: src/elflint.c:626 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " "section\n" msgstr "" -#: src/elflint.c:629 +#: src/elflint.c:638 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "" -#: src/elflint.c:638 +#: src/elflint.c:647 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "" -#: src/elflint.c:643 src/elflint.c:646 src/elflint.c:649 src/elflint.c:652 -#: src/elflint.c:655 src/elflint.c:658 +#: src/elflint.c:652 src/elflint.c:655 src/elflint.c:658 src/elflint.c:661 +#: src/elflint.c:664 src/elflint.c:667 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "" -#: src/elflint.c:661 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "" -#: src/elflint.c:671 +#: src/elflint.c:680 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "" -#: src/elflint.c:680 +#: src/elflint.c:689 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "" -#: src/elflint.c:694 +#: src/elflint.c:704 #, c-format msgid "" "section [%2d] '%s': symbol %zu: too large section index but no extended " "section index section\n" msgstr "" -#: src/elflint.c:700 +#: src/elflint.c:710 #, c-format msgid "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " "st_shndx (%)\n" msgstr "" -#: src/elflint.c:712 +#: src/elflint.c:722 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid section index\n" msgstr "" -#: src/elflint.c:720 +#: src/elflint.c:730 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown type\n" msgstr "" -#: src/elflint.c:726 +#: src/elflint.c:736 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" msgstr "" -#: src/elflint.c:731 +#: src/elflint.c:741 #, c-format msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" msgstr "" -#: src/elflint.c:739 +#: src/elflint.c:749 #, c-format msgid "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" msgstr "" -#: src/elflint.c:743 +#: src/elflint.c:753 #, c-format msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" msgstr "" -#: src/elflint.c:747 +#: src/elflint.c:757 #, c-format msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" msgstr "" -#: src/elflint.c:779 +#: src/elflint.c:804 #, c-format msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" msgstr "" -#: src/elflint.c:785 src/elflint.c:810 src/elflint.c:853 +#: 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:794 +#: 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:804 src/elflint.c:846 +#: 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:831 +#: 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:839 +#: 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:866 +#: 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:873 +#: 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:880 +#: src/elflint.c:905 #, c-format msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" msgstr "" -#: src/elflint.c:930 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " "[%2d]\n" msgstr "" -#: src/elflint.c:937 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " "'%s'\n" msgstr "" -#: src/elflint.c:953 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " "match %s section address %#\n" msgstr "" -#: src/elflint.c:960 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " "match %s section size %\n" msgstr "" -#: src/elflint.c:968 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " "section\n" msgstr "" -#: src/elflint.c:984 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " "segment address %#\n" msgstr "" -#: src/elflint.c:991 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " "segment size %\n" msgstr "" -#: src/elflint.c:1004 +#: 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:1008 +#: src/elflint.c:1033 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" msgstr "" -#: src/elflint.c:1053 +#: src/elflint.c:1082 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "" -#: src/elflint.c:1062 src/elflint.c:1114 +#: 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:1087 src/elflint.c:1139 +#: 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:1093 src/elflint.c:1145 +#: 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:1105 +#: src/elflint.c:1136 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "" -#: src/elflint.c:1187 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "" -#: src/elflint.c:1200 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "" -#: src/elflint.c:1208 +#: src/elflint.c:1238 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "" -#: src/elflint.c:1215 +#: src/elflint.c:1245 #, c-format msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" msgstr "" -#: src/elflint.c:1222 +#: src/elflint.c:1253 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" -#: src/elflint.c:1282 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" -#: src/elflint.c:1309 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "" -#: src/elflint.c:1317 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " "type\n" msgstr "" -#: src/elflint.c:1325 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "" -#: src/elflint.c:1343 +#: 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:1360 +#: src/elflint.c:1391 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "" -#: src/elflint.c:1375 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " "%s\n" msgstr "" -#: src/elflint.c:1396 +#: 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:1411 +#: src/elflint.c:1442 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" -#: src/elflint.c:1450 src/elflint.c:1500 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "" -#: src/elflint.c:1576 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "" -#: src/elflint.c:1594 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" -#: src/elflint.c:1599 src/elflint.c:1882 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "" -#: src/elflint.c:1609 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" -#: src/elflint.c:1617 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "" -#: src/elflint.c:1624 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "" -#: src/elflint.c:1635 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "" -#: src/elflint.c:1645 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "" -#: src/elflint.c:1663 +#: 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:1676 +#: 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:1719 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" -#: src/elflint.c:1734 +#: 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:1754 src/elflint.c:1782 +#: 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:1766 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "" -#: src/elflint.c:1775 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "" -#: src/elflint.c:1790 src/elflint.c:1797 +#: 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:1807 src/elflint.c:1811 +#: 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:1817 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" -#: src/elflint.c:1828 src/elflint.c:1832 src/elflint.c:1836 src/elflint.c:1840 +#: 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:1852 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" msgstr "" -#: src/elflint.c:1862 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" -#: src/elflint.c:1867 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "" -#: src/elflint.c:1870 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "" -#: src/elflint.c:1877 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" -#: src/elflint.c:1892 +#: 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:1903 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "" -#: src/elflint.c:1915 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "" -#: src/elflint.c:1920 +#: src/elflint.c:1962 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" -#: src/elflint.c:1936 src/elflint.c:1977 +#: 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:1948 src/elflint.c:1989 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "" -#: src/elflint.c:1957 src/elflint.c:1998 +#: 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:1963 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2004 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" -#: src/elflint.c:2019 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "" -#: src/elflint.c:2030 +#: src/elflint.c:2092 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" msgstr "" -#: src/elflint.c:2038 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" -#: src/elflint.c:2070 +#: 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:2091 +#: 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:2102 +#: 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:2133 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2138 +#: 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:2144 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" -#: src/elflint.c:2157 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" -#: src/elflint.c:2175 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" -#: src/elflint.c:2183 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "" -#: src/elflint.c:2188 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "" -#: src/elflint.c:2193 +#: 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:2241 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" -#: src/elflint.c:2319 src/elflint.c:2323 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "" -#: src/elflint.c:2330 +#: 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:2342 +#: 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:2358 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "" -#: src/elflint.c:2378 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" msgstr "" -#: src/elflint.c:2389 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "" -#: src/elflint.c:2394 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" -#: src/elflint.c:2400 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "" -#: src/elflint.c:2405 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "" -#: src/elflint.c:2412 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "" -#: src/elflint.c:2417 +#: src/elflint.c:2479 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "" -#: src/elflint.c:2423 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "" -#: src/elflint.c:2429 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "" -#: src/elflint.c:2438 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" -#: src/elflint.c:2443 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "" -#: src/elflint.c:2449 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "" -#: src/elflint.c:2453 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "" -#: src/elflint.c:2464 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "" -#: src/elflint.c:2476 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "" -#: src/elflint.c:2485 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" -#: src/elflint.c:2492 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "" -#: src/elflint.c:2498 +#: 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:2505 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "" -#: src/elflint.c:2694 +#: 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:2705 +#: 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:2721 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "" -#: src/elflint.c:2737 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" -#: src/elflint.c:2745 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "" -#: src/elflint.c:2759 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "" -#: src/elflint.c:2764 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" -#: src/elflint.c:2774 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" -#: src/elflint.c:2826 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "" -#: src/elflint.c:2834 src/elflint.c:2963 +#: 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:2857 src/elflint.c:3015 +#: 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:2863 src/elflint.c:3021 +#: 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:2871 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "" -#: src/elflint.c:2879 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "" -#: src/elflint.c:2891 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:2898 +#: 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:2905 +#: 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:2915 +#: 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:2926 +#: 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:2942 src/elflint.c:3100 +#: 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:2955 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "" -#: src/elflint.c:3000 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "" -#: src/elflint.c:3004 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" -#: src/elflint.c:3010 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:3034 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "" -#: src/elflint.c:3041 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" -#: src/elflint.c:3050 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "" -#: src/elflint.c:3069 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" msgstr "" -#: src/elflint.c:3084 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" -#: src/elflint.c:3106 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "" -#: src/elflint.c:3122 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "" -#: src/elflint.c:3135 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "" -#: src/elflint.c:3156 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "" -#: src/elflint.c:3172 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" -#: src/elflint.c:3181 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" -#: src/elflint.c:3193 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" -#: src/elflint.c:3210 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" -#: src/elflint.c:3219 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "" -#: src/elflint.c:3228 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" -#: src/elflint.c:3241 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" -#: src/elflint.c:3252 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" -#: src/elflint.c:3270 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" -#: src/elflint.c:3281 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" -#: src/elflint.c:3294 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" -#: src/elflint.c:3298 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" msgstr "" -#: src/elflint.c:3308 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "" -#: src/elflint.c:3314 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" -#: src/elflint.c:3403 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "" -#: src/elflint.c:3407 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "" -#: src/elflint.c:3409 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "" -#: src/elflint.c:3411 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "" -#: src/elflint.c:3413 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "" -#: src/elflint.c:3415 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "" -#: src/elflint.c:3417 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "" -#: src/elflint.c:3419 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "" -#: src/elflint.c:3422 +#: 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:3426 +#: 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:3430 +#: 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:3447 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "" -#: src/elflint.c:3456 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "" -#: src/elflint.c:3483 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3499 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3516 +#: 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:3534 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "" -#: src/elflint.c:3540 src/elflint.c:3572 +#: 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:3545 src/elflint.c:3577 +#: 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:3553 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" -#: src/elflint.c:3596 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" -#: src/elflint.c:3601 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "" -#: src/elflint.c:3611 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "" -#: src/elflint.c:3625 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" msgstr "" -#: src/elflint.c:3632 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "" -#: src/elflint.c:3640 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" -#: src/elflint.c:3648 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" -#: src/elflint.c:3653 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" -#: src/elflint.c:3660 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" -#: src/elflint.c:3665 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" -#: src/elflint.c:3683 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" -#: src/elflint.c:3692 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "" -#: src/elflint.c:3721 +#: 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:3729 +#: 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:3738 +#: 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:3749 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "" -#: src/elflint.c:3759 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" -#: src/elflint.c:3769 +#: 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:3775 +#: 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:3783 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" -#: src/elflint.c:3834 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "" -#: src/elflint.c:3857 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" -#: src/elflint.c:3868 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" -#: src/elflint.c:3874 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" -#: src/elflint.c:3885 +#: 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:3898 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "" -#: src/elflint.c:3912 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" -#: src/elflint.c:3961 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" -#: src/elflint.c:3965 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" msgstr "" -#: src/elflint.c:3988 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" msgstr "" -#: src/elflint.c:3992 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" msgstr "" -#: src/elflint.c:4009 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4028 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4031 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4052 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4059 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4062 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4080 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4095 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4104 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" -#: src/elflint.c:4115 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4123 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4130 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4144 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4147 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4157 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4178 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4181 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4189 src/elflint.c:4212 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4218 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4242 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4245 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4258 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4266 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4269 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4273 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4276 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4281 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4284 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4295 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4302 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4305 +#: 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:4318 +#: 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:4352 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4378 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3271,7 +3341,8 @@ msgstr "" msgid "Warning: size of `%s' changed from % in %s to % in %s" msgstr "" -#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:640 src/strip.c:562 +#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 +#: src/readelf.c:829 src/strip.c:563 #, c-format msgid "cannot determine number of sections: %s" msgstr "" @@ -3502,7 +3573,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:1818 #, c-format msgid "cannot update ELF header: %s" msgstr "" @@ -3670,7 +3741,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:2124 +#: src/strip.c:2155 #, c-format msgid "while closing '%s'" msgstr "beim Schliessen von '%s'" @@ -3714,17 +3785,17 @@ msgstr "%s%s%s: Dateiformat nicht erkannt" msgid "cannot create search tree" msgstr "Kann Suchbaum nicht erstellen" -#: src/nm.c:757 src/nm.c:1156 src/objdump.c:787 src/readelf.c:896 -#: src/readelf.c:1039 src/readelf.c:1187 src/readelf.c:1369 src/readelf.c:1569 -#: src/readelf.c:1755 src/readelf.c:1965 src/readelf.c:2219 src/readelf.c:2285 -#: src/readelf.c:2363 src/readelf.c:2861 src/readelf.c:2897 src/readelf.c:2959 -#: src/readelf.c:7270 src/readelf.c:8176 src/readelf.c:8323 src/readelf.c:8391 -#: src/size.c:417 src/size.c:491 src/strip.c:502 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 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:2196 src/readelf.c:2454 +#: src/readelf.c:2524 src/readelf.c:2606 src/readelf.c:3117 src/readelf.c:3153 +#: src/readelf.c:3216 src/readelf.c:7920 src/readelf.c:9002 src/readelf.c:9149 +#: src/readelf.c:9217 src/size.c:417 src/size.c:487 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "" -#: src/nm.c:782 +#: src/nm.c:784 #, c-format msgid "" "\n" @@ -3737,29 +3808,29 @@ msgstr "" "Symbole aus %s:\n" "\n" -#: src/nm.c:785 +#: src/nm.c:787 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" "\n" msgstr "" -#: src/nm.c:1166 +#: src/nm.c:1173 #, c-format msgid "%s: entry size in section `%s' is not what we expect" msgstr "%s: entry size in section `%s' is not what we expect" -#: src/nm.c:1170 +#: src/nm.c:1177 #, c-format msgid "%s: size of section `%s' is not multiple of entry size" msgstr "" -#: src/nm.c:1428 +#: src/nm.c:1435 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Ungültige Operation" -#: src/nm.c:1485 +#: src/nm.c:1492 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: keine Symbole" @@ -3793,7 +3864,7 @@ msgstr "" msgid "Show information from FILEs (a.out by default)." msgstr "" -#: src/objdump.c:236 src/readelf.c:439 +#: src/objdump.c:236 src/readelf.c:473 msgid "No operation specified.\n" msgstr "Keine Operation angegeben.\n" @@ -3802,11 +3873,11 @@ msgstr "Keine Operation angegeben.\n" msgid "while close `%s'" msgstr "" -#: src/objdump.c:379 src/readelf.c:1664 src/readelf.c:1838 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2069 msgid "INVALID SYMBOL" msgstr "" -#: src/objdump.c:394 src/readelf.c:1695 src/readelf.c:1871 +#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2102 msgid "INVALID SECTION" msgstr "" @@ -3860,388 +3931,435 @@ msgstr "'%s' ist kein Archiv" msgid "error while freeing sub-ELF descriptor: %s" msgstr "" -#: src/readelf.c:67 +#: src/readelf.c:71 +#, fuzzy +msgid "ELF input selection:" +msgstr "Eingabeauswahloptionen:" + +#: src/readelf.c:73 +msgid "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" +msgstr "" + +#: src/readelf.c:75 #, fuzzy msgid "ELF output selection:" msgstr "Eingabeauswahloptionen:" -#: src/readelf.c:69 +#: src/readelf.c:77 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "" -#: src/readelf.c:70 +#: src/readelf.c:78 msgid "Display the dynamic segment" msgstr "" -#: src/readelf.c:71 +#: src/readelf.c:79 msgid "Display the ELF file header" msgstr "" -#: src/readelf.c:73 +#: src/readelf.c:81 msgid "Display histogram of bucket list lengths" msgstr "" -#: src/readelf.c:74 +#: src/readelf.c:82 msgid "Display the program headers" msgstr "Programm-Köpfe anzeigen" -#: src/readelf.c:76 +#: src/readelf.c:84 msgid "Display relocations" msgstr "Relocations anzeigen" -#: src/readelf.c:77 +#: src/readelf.c:85 #, fuzzy msgid "Display the sections' headers" msgstr "Programm-Köpfe anzeigen" -#: src/readelf.c:79 +#: src/readelf.c:87 msgid "Display the symbol table" msgstr "Symboltabelle anzeigen" -#: src/readelf.c:80 +#: src/readelf.c:88 msgid "Display versioning information" msgstr "Versionierungsinformationen anzeigen" -#: src/readelf.c:81 +#: src/readelf.c:89 #, fuzzy msgid "Display the ELF notes" msgstr "Kernnotizen anzeigen" -#: src/readelf.c:83 +#: src/readelf.c:91 #, fuzzy msgid "Display architecture specific information, if any" msgstr "Architekturspezifische Informationen anzeigen (falls vorhanden)" -#: src/readelf.c:85 +#: src/readelf.c:93 msgid "Display sections for exception handling" msgstr "Abschnitte für Ausnahmebehandlung anzeigen" -#: src/readelf.c:87 +#: src/readelf.c:95 msgid "Additional output selection:" msgstr "" -#: src/readelf.c:89 +#: src/readelf.c:97 msgid "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" msgstr "" -#: src/readelf.c:93 +#: src/readelf.c:101 msgid "Dump the uninterpreted contents of SECTION, by number or name" msgstr "" -#: src/readelf.c:95 +#: src/readelf.c:103 msgid "Print string contents of sections" msgstr "" -#: src/readelf.c:98 +#: src/readelf.c:106 msgid "Display the symbol index of an archive" msgstr "Symbolindex des Archivs anzeigen" -#: src/readelf.c:100 +#: src/readelf.c:108 msgid "Output control:" msgstr "Ausgabekontrolle:" -#: src/readelf.c:102 +#: src/readelf.c:110 msgid "Do not find symbol names for addresses in DWARF data" msgstr "Keine symbolischen Namen für Adressen in DWARF-Daten suchen" -#: src/readelf.c:104 +#: src/readelf.c:112 +#, fuzzy +msgid "" +"Display just offsets instead of resolving values to addresses in DWARF data" +msgstr "Keine symbolischen Namen für Adressen in DWARF-Daten suchen" + +#: src/readelf.c:114 msgid "Ignored for compatibility (lines always wide)" msgstr "" -#: src/readelf.c:109 +#: src/readelf.c:119 msgid "Print information from ELF file in human-readable form." msgstr "Informationen aus der ELF-Datei in menschenlesbarer Form ausgeben." -#: src/readelf.c:410 +#: src/readelf.c:441 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "" -#: src/readelf.c:476 +#: src/readelf.c:520 src/readelf.c:631 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "konnte Elf-Deskriptor nicht erzeugen: %s" -#: src/readelf.c:488 +#: src/readelf.c:545 src/readelf.c:1099 src/readelf.c:1269 #, c-format -msgid "'%s' is not an archive, cannot print archive index" +msgid "cannot get section: %s" +msgstr "" + +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9169 +#: src/unstrip.c:352 src/unstrip.c:383 src/unstrip.c:432 src/unstrip.c:540 +#: src/unstrip.c:557 src/unstrip.c:593 src/unstrip.c:791 src/unstrip.c:1059 +#: src/unstrip.c:1250 src/unstrip.c:1310 src/unstrip.c:1431 src/unstrip.c:1484 +#: src/unstrip.c:1591 src/unstrip.c:1780 +#, c-format +msgid "cannot get section header: %s" msgstr "" -#: src/readelf.c:493 +#: src/readelf.c:562 +#, fuzzy, c-format +msgid "cannot get section name" +msgstr "konnte Abschnittsdaten nicht holen: %s" + +#: src/readelf.c:571 src/readelf.c:5221 src/readelf.c:7414 src/readelf.c:7516 +#: src/readelf.c:7674 +#, c-format +msgid "cannot get %s content: %s" +msgstr "" + +#: src/readelf.c:587 +#, fuzzy, c-format +msgid "cannot create temp file '%s'" +msgstr "neue Datei konnte nicht angelegt werden" + +#: src/readelf.c:596 +#, fuzzy, c-format +msgid "cannot write section data" +msgstr "konnte Abschnittsdaten nicht holen: %s" + +#: src/readelf.c:602 src/readelf.c:619 src/readelf.c:648 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "" -#: src/readelf.c:585 +#: src/readelf.c:609 +#, fuzzy, c-format +msgid "error while rewinding file descriptor" +msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" + +#: src/readelf.c:643 +#, c-format +msgid "'%s' is not an archive, cannot print archive index" +msgstr "" + +#: src/readelf.c:742 +#, fuzzy, c-format +msgid "No such section '%s' in '%s'" +msgstr "konnte Abschnittsdaten nicht holen: %s" + +#: src/readelf.c:769 #, c-format msgid "cannot stat input file" msgstr "" -#: src/readelf.c:587 +#: src/readelf.c:771 #, c-format msgid "input file is empty" msgstr "" -#: src/readelf.c:589 +#: src/readelf.c:773 #, c-format msgid "failed reading '%s': %s" msgstr "Konnte '%s' nicht lesen: %s" -#: src/readelf.c:625 +#: src/readelf.c:814 #, c-format msgid "cannot read ELF header: %s" msgstr "" -#: src/readelf.c:633 +#: src/readelf.c:822 #, c-format msgid "cannot create EBL handle" msgstr "" -#: src/readelf.c:646 +#: src/readelf.c:835 #, fuzzy, c-format msgid "cannot determine number of program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:732 +#: src/readelf.c:921 msgid "NONE (None)" msgstr "" -#: src/readelf.c:733 +#: src/readelf.c:922 msgid "REL (Relocatable file)" msgstr "" -#: src/readelf.c:734 +#: src/readelf.c:923 msgid "EXEC (Executable file)" msgstr "" -#: src/readelf.c:735 +#: src/readelf.c:924 msgid "DYN (Shared object file)" msgstr "" -#: src/readelf.c:736 +#: src/readelf.c:925 msgid "CORE (Core file)" msgstr "" -#: src/readelf.c:741 +#: src/readelf.c:930 #, c-format msgid "OS Specific: (%x)\n" msgstr "" -#: src/readelf.c:743 +#: src/readelf.c:932 #, c-format msgid "Processor Specific: (%x)\n" msgstr "" -#: src/readelf.c:753 +#: src/readelf.c:942 msgid "" "ELF Header:\n" " Magic: " msgstr "" -#: src/readelf.c:757 +#: src/readelf.c:946 #, c-format msgid "" "\n" " Class: %s\n" msgstr "" -#: src/readelf.c:762 +#: src/readelf.c:951 #, fuzzy, c-format msgid " Data: %s\n" msgstr " Daten: %s\n" -#: src/readelf.c:768 +#: src/readelf.c:957 #, c-format msgid " Ident Version: %hhd %s\n" msgstr "" -#: src/readelf.c:770 src/readelf.c:787 +#: src/readelf.c:959 src/readelf.c:976 msgid "(current)" msgstr "(aktuell)" -#: src/readelf.c:774 +#: src/readelf.c:963 #, c-format msgid " OS/ABI: %s\n" msgstr "" -#: src/readelf.c:777 +#: src/readelf.c:966 #, c-format msgid " ABI Version: %hhd\n" msgstr "" -#: src/readelf.c:780 +#: src/readelf.c:969 msgid " Type: " msgstr " Typ: " -#: src/readelf.c:783 +#: src/readelf.c:972 #, c-format msgid " Machine: %s\n" msgstr "" -#: src/readelf.c:785 +#: src/readelf.c:974 #, c-format msgid " Version: %d %s\n" msgstr "" -#: src/readelf.c:789 +#: src/readelf.c:978 #, c-format msgid " Entry point address: %#\n" msgstr "" -#: src/readelf.c:792 +#: src/readelf.c:981 #, c-format msgid " Start of program headers: % %s\n" msgstr "" -#: src/readelf.c:793 src/readelf.c:796 +#: src/readelf.c:982 src/readelf.c:985 msgid "(bytes into file)" msgstr "" -#: src/readelf.c:795 +#: src/readelf.c:984 #, c-format msgid " Start of section headers: % %s\n" msgstr "" -#: src/readelf.c:798 +#: src/readelf.c:987 #, c-format msgid " Flags: %s\n" msgstr "" -#: src/readelf.c:801 +#: src/readelf.c:990 #, c-format msgid " Size of this header: % %s\n" msgstr "" -#: src/readelf.c:802 src/readelf.c:805 src/readelf.c:822 +#: src/readelf.c:991 src/readelf.c:994 src/readelf.c:1011 msgid "(bytes)" msgstr "(Bytes)" -#: src/readelf.c:804 +#: src/readelf.c:993 #, c-format msgid " Size of program header entries: % %s\n" msgstr "" -#: src/readelf.c:807 +#: src/readelf.c:996 #, c-format msgid " Number of program headers entries: %" msgstr "" -#: src/readelf.c:814 +#: src/readelf.c:1003 #, c-format msgid " (% in [0].sh_info)" msgstr "" -#: src/readelf.c:817 src/readelf.c:834 src/readelf.c:848 +#: src/readelf.c:1006 src/readelf.c:1023 src/readelf.c:1037 msgid " ([0] not available)" msgstr "" -#: src/readelf.c:821 +#: src/readelf.c:1010 #, c-format msgid " Size of section header entries: % %s\n" msgstr "" -#: src/readelf.c:824 +#: src/readelf.c:1013 #, c-format msgid " Number of section headers entries: %" msgstr "" -#: src/readelf.c:831 +#: src/readelf.c:1020 #, c-format msgid " (% in [0].sh_size)" msgstr "" -#: src/readelf.c:844 +#: src/readelf.c:1033 #, c-format msgid " (% in [0].sh_link)" msgstr "" -#: src/readelf.c:852 +#: src/readelf.c:1041 #, c-format msgid "" " Section header string table index: XINDEX%s\n" "\n" msgstr "" -#: src/readelf.c:856 +#: src/readelf.c:1045 #, c-format msgid "" " Section header string table index: %\n" "\n" msgstr "" -#: src/readelf.c:888 +#: src/readelf.c:1077 #, c-format msgid "" "There are %d section headers, starting at offset %#:\n" "\n" msgstr "" -#: src/readelf.c:898 +#: src/readelf.c:1087 msgid "Section Headers:" msgstr "" -#: src/readelf.c:901 +#: src/readelf.c:1090 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" msgstr "" -#: src/readelf.c:903 +#: src/readelf.c:1092 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" msgstr "" -#: src/readelf.c:910 src/readelf.c:1063 -#, c-format -msgid "cannot get section: %s" -msgstr "" - -#: src/readelf.c:917 src/readelf.c:1071 src/readelf.c:8343 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 -#, c-format -msgid "cannot get section header: %s" -msgstr "" - -#: src/readelf.c:975 +#: src/readelf.c:1164 msgid "Program Headers:" msgstr "Programm-Köpfe:" -#: src/readelf.c:977 +#: src/readelf.c:1166 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" -#: src/readelf.c:980 +#: src/readelf.c:1169 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" msgstr "" -#: src/readelf.c:1020 +#: src/readelf.c:1226 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "" -#: src/readelf.c:1041 +#: src/readelf.c:1247 msgid "" "\n" " Section to Segment mapping:\n" " Segment Sections..." msgstr "" -#: src/readelf.c:1052 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1835 src/unstrip.c:1874 src/unstrip.c:1881 #, c-format msgid "cannot get program header: %s" msgstr "" -#: src/readelf.c:1193 +#: src/readelf.c:1401 #, c-format msgid "" "\n" @@ -4252,7 +4370,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1198 +#: src/readelf.c:1406 #, c-format msgid "" "\n" @@ -4263,15 +4381,21 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1206 +#: src/readelf.c:1414 msgid "" msgstr "" -#: src/readelf.c:1220 +#: src/readelf.c:1428 msgid "" msgstr "" -#: src/readelf.c:1371 +#: src/readelf.c:1585 src/readelf.c:2202 src/readelf.c:2460 src/readelf.c:2530 +#: src/readelf.c:2812 src/readelf.c:2885 src/readelf.c:4488 +#, fuzzy, c-format +msgid "invalid sh_link value in section %Zu" +msgstr "ungültige .debug_line Sektion" + +#: src/readelf.c:1588 #, c-format msgid "" "\n" @@ -4284,43 +4408,43 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1383 +#: src/readelf.c:1598 msgid " Type Value\n" msgstr "" -#: src/readelf.c:1407 +#: src/readelf.c:1622 #, c-format msgid "Shared library: [%s]\n" msgstr "" -#: src/readelf.c:1412 +#: src/readelf.c:1627 #, c-format msgid "Library soname: [%s]\n" msgstr "" -#: src/readelf.c:1417 +#: src/readelf.c:1632 #, c-format msgid "Library rpath: [%s]\n" msgstr "" -#: src/readelf.c:1422 +#: src/readelf.c:1637 #, c-format msgid "Library runpath: [%s]\n" msgstr "" -#: src/readelf.c:1442 +#: src/readelf.c:1657 #, c-format msgid "% (bytes)\n" msgstr "" -#: src/readelf.c:1554 src/readelf.c:1740 +#: src/readelf.c:1770 src/readelf.c:1957 #, c-format msgid "" "\n" "Invalid symbol table at offset %#0\n" msgstr "" -#: src/readelf.c:1572 src/readelf.c:1757 +#: src/readelf.c:1788 src/readelf.c:1975 #, c-format msgid "" "\n" @@ -4333,7 +4457,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1587 +#: src/readelf.c:1803 src/readelf.c:1990 #, c-format msgid "" "\n" @@ -4344,29 +4468,29 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1597 +#: src/readelf.c:1813 msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:1599 +#: src/readelf.c:1815 msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:1652 src/readelf.c:1663 src/readelf.c:1676 src/readelf.c:1694 -#: src/readelf.c:1706 src/readelf.c:1825 src/readelf.c:1837 src/readelf.c:1851 -#: src/readelf.c:1870 src/readelf.c:1883 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 +#: src/readelf.c:1922 src/readelf.c:2056 src/readelf.c:2068 src/readelf.c:2082 +#: src/readelf.c:2101 src/readelf.c:2114 msgid "" msgstr "" -#: src/readelf.c:1769 +#: src/readelf.c:2000 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:1771 +#: src/readelf.c:2002 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:1972 +#: src/readelf.c:2210 #, c-format msgid "" "\n" @@ -4377,40 +4501,40 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1978 +#: src/readelf.c:2215 #, 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:1988 +#: src/readelf.c:2223 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:1990 +#: src/readelf.c:2225 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2010 +#: src/readelf.c:2245 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "" -#: src/readelf.c:2098 +#: src/readelf.c:2333 #, c-format msgid "bad dynamic symbol" msgstr "" -#: src/readelf.c:2180 +#: src/readelf.c:2415 msgid "none" msgstr "keine" -#: src/readelf.c:2197 +#: src/readelf.c:2432 msgid "| " msgstr "| " -#: src/readelf.c:2222 +#: src/readelf.c:2463 #, c-format msgid "" "\n" @@ -4423,17 +4547,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2245 +#: src/readelf.c:2484 #, fuzzy, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Version: %hu Datei: %s Cnt: %hu\n" -#: src/readelf.c:2258 +#: src/readelf.c:2497 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Name: %s Flags: %s Version: %hu\n" -#: src/readelf.c:2289 +#: src/readelf.c:2534 #, c-format msgid "" "\n" @@ -4446,17 +4570,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2319 +#: src/readelf.c:2562 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" -#: src/readelf.c:2334 +#: src/readelf.c:2577 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr "" -#: src/readelf.c:2566 +#: src/readelf.c:2816 #, c-format msgid "" "\n" @@ -4469,15 +4593,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2596 +#: src/readelf.c:2844 msgid " 0 *local* " msgstr " 0 *lokal* " -#: src/readelf.c:2601 +#: src/readelf.c:2849 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:2632 +#: src/readelf.c:2890 #, c-format msgid "" "\n" @@ -4492,41 +4616,41 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2656 +#: src/readelf.c:2912 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr "" -#: src/readelf.c:2658 +#: src/readelf.c:2914 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:2665 +#: src/readelf.c:2921 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:2678 +#: src/readelf.c:2934 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" "\t\t\t unsuccessful lookup: %f\n" msgstr "" -#: src/readelf.c:2696 src/readelf.c:2738 src/readelf.c:2779 +#: src/readelf.c:2952 src/readelf.c:2994 src/readelf.c:3035 #, c-format msgid "cannot get data for section %d: %s" msgstr "" -#: src/readelf.c:2833 +#: src/readelf.c:3089 #, c-format msgid "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" msgstr "" -#: src/readelf.c:2907 +#: src/readelf.c:3164 #, c-format msgid "" "\n" @@ -4537,13 +4661,13 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2921 +#: src/readelf.c:3178 msgid "" " Library Time Stamp Checksum Version " "Flags" msgstr "" -#: src/readelf.c:2971 +#: src/readelf.c:3228 #, c-format msgid "" "\n" @@ -4551,135 +4675,140 @@ msgid "" "%#0:\n" msgstr "" -#: src/readelf.c:2987 +#: src/readelf.c:3244 msgid " Owner Size\n" msgstr "" -#: src/readelf.c:3013 +#: src/readelf.c:3270 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" -#: src/readelf.c:3045 +#: src/readelf.c:3302 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" -#: src/readelf.c:3050 +#: src/readelf.c:3307 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3085 +#: src/readelf.c:3342 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3088 +#: src/readelf.c:3345 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3091 +#: src/readelf.c:3348 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3098 +#: src/readelf.c:3355 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3101 +#: src/readelf.c:3358 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3137 +#: src/readelf.c:3403 #, c-format msgid "%s+%# <%s+%#>" msgstr "%s+%# <%s+%#>" -#: src/readelf.c:3140 +#: src/readelf.c:3406 #, c-format msgid "%s+%#0* <%s+%#>" msgstr "%s+%#0* <%s+%#>" -#: src/readelf.c:3145 +#: src/readelf.c:3411 #, c-format msgid "%# <%s+%#>" msgstr "%# <%s+%#>" -#: src/readelf.c:3148 +#: src/readelf.c:3414 #, c-format msgid "%#0* <%s+%#>" msgstr "%#0* <%s+%#>" -#: src/readelf.c:3154 +#: src/readelf.c:3420 #, c-format msgid "%s+%# <%s>" msgstr "%s+%# <%s>" -#: src/readelf.c:3157 +#: src/readelf.c:3423 #, c-format msgid "%s+%#0* <%s>" msgstr "%s+%#0* <%s>" -#: src/readelf.c:3161 +#: src/readelf.c:3427 #, c-format msgid "%# <%s>" msgstr "%# <%s>" -#: src/readelf.c:3164 +#: src/readelf.c:3430 #, c-format msgid "%#0* <%s>" msgstr "%#0* <%s>" -#: src/readelf.c:3169 +#: src/readelf.c:3435 #, c-format msgid "%s+%#" msgstr "%s+%#" -#: src/readelf.c:3172 +#: src/readelf.c:3438 #, c-format msgid "%s+%#0*" msgstr "%s+%#0*" -#: src/readelf.c:3554 +#: src/readelf.c:3820 msgid "empty block" msgstr "" -#: src/readelf.c:3557 +#: src/readelf.c:3823 #, c-format msgid "%zu byte block:" msgstr "" -#: src/readelf.c:3934 +#: src/readelf.c:4217 #, c-format msgid "%*s[%4] %s \n" msgstr "" -#: src/readelf.c:3970 +#: src/readelf.c:4274 #, c-format msgid "%s %# used with different address sizes" msgstr "" -#: src/readelf.c:3977 +#: src/readelf.c:4281 #, c-format msgid "%s %# used with different offset sizes" msgstr "" -#: src/readelf.c:4057 +#: src/readelf.c:4288 +#, c-format +msgid "%s %# used with different base addresses" +msgstr "" + +#: src/readelf.c:4370 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4065 +#: src/readelf.c:4378 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr "" -#: src/readelf.c:4087 +#: src/readelf.c:4404 #, c-format msgid "" "\n" @@ -4687,37 +4816,37 @@ msgid "" " [ Code]\n" msgstr "" -#: src/readelf.c:4095 +#: src/readelf.c:4412 #, c-format msgid "" "\n" "Abbreviation section at offset %:\n" msgstr "" -#: src/readelf.c:4108 +#: src/readelf.c:4425 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr "" -#: src/readelf.c:4124 +#: src/readelf.c:4441 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr "" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "yes" msgstr "ja" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "no" msgstr "nein" -#: src/readelf.c:4162 +#: src/readelf.c:4478 src/readelf.c:4551 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "" -#: src/readelf.c:4167 +#: src/readelf.c:4493 #, c-format msgid "" "\n" @@ -4728,123 +4857,189 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:4198 +#: src/readelf.c:4524 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4200 +#: src/readelf.c:4526 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" -#: src/readelf.c:4219 +#: src/readelf.c:4556 src/readelf.c:4710 src/readelf.c:5231 src/readelf.c:6145 +#: src/readelf.c:6646 src/readelf.c:6766 src/readelf.c:6922 src/readelf.c:7345 #, c-format -msgid "cannot get .debug_ranges content: %s" +msgid "" +"\n" +"DWARF section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:4224 src/readelf.c:4728 src/readelf.c:5505 src/readelf.c:6006 -#: src/readelf.c:6121 src/readelf.c:6277 src/readelf.c:6699 +#: src/readelf.c:4569 src/readelf.c:6171 #, c-format msgid "" "\n" -"DWARF section [%2zu] '%s' at offset %#:\n" +"Table at offset %Zu:\n" +msgstr "" + +#: src/readelf.c:4573 src/readelf.c:5255 src/readelf.c:6180 +#, c-format +msgid "invalid data in section [%zu] '%s'" msgstr "" -#: src/readelf.c:4248 src/readelf.c:6031 +#: src/readelf.c:4589 +#, fuzzy, c-format +msgid "" +"\n" +" Length: %6\n" +msgstr " %s: %\n" + +#: src/readelf.c:4601 +#, fuzzy, c-format +msgid " DWARF version: %6\n" +msgstr " %s: %\n" + +#: src/readelf.c:4605 +#, c-format +msgid "unsupported aranges version" +msgstr "" + +#: src/readelf.c:4616 +#, fuzzy, c-format +msgid " CU offset: %6\n" +msgstr " %s: %\n" + +#: src/readelf.c:4622 +#, c-format +msgid " Address size: %6\n" +msgstr "" + +#: src/readelf.c:4626 +#, fuzzy, c-format +msgid "unsupported address size" +msgstr "Kein Adress-Wert" + +#: src/readelf.c:4631 +#, c-format +msgid "" +" Segment size: %6\n" +"\n" +msgstr "" + +#: src/readelf.c:4635 +#, c-format +msgid "unsupported segment size" +msgstr "" + +#: src/readelf.c:4675 +#, fuzzy, c-format +msgid " %s..%s (%)\n" +msgstr " %s: %\n" + +#: src/readelf.c:4678 +#, fuzzy, c-format +msgid " %s..%s\n" +msgstr " [%6tx] %s..%s\n" + +#: src/readelf.c:4687 +#, c-format +msgid " %Zu padding bytes\n" +msgstr "" + +#: src/readelf.c:4705 +#, c-format +msgid "cannot get .debug_ranges content: %s" +msgstr "" + +#: src/readelf.c:4735 src/readelf.c:6673 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4270 src/readelf.c:6053 +#: src/readelf.c:4757 src/readelf.c:6695 #, c-format msgid " [%6tx] base address %s\n" msgstr "" -#: src/readelf.c:4276 src/readelf.c:6059 +#: src/readelf.c:4764 src/readelf.c:6702 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4285 +#: src/readelf.c:4775 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4287 +#: src/readelf.c:4777 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:4717 src/readelf.c:6768 src/readelf.c:6870 src/readelf.c:7028 -#, c-format -msgid "cannot get %s content: %s" -msgstr "" +#: src/readelf.c:5210 +#, fuzzy, c-format +msgid "cannot get ELF: %s" +msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:4724 +#: src/readelf.c:5227 #, c-format msgid "" "\n" "Call frame information section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:4752 src/readelf.c:5540 -#, c-format -msgid "invalid data in section [%zu] '%s'" -msgstr "" - -#: src/readelf.c:4774 +#: src/readelf.c:5277 #, c-format msgid "" "\n" " [%6tx] Zero terminator\n" msgstr "" -#: src/readelf.c:4859 +#: src/readelf.c:5362 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "ungültige Abschnittsausrichtung" -#: src/readelf.c:4871 +#: src/readelf.c:5374 msgid "FDE address encoding: " msgstr "" -#: src/readelf.c:4877 +#: src/readelf.c:5380 msgid "LSDA pointer encoding: " msgstr "" -#: src/readelf.c:4975 +#: src/readelf.c:5491 #, c-format msgid " (offset: %#)" msgstr "" -#: src/readelf.c:4982 +#: src/readelf.c:5498 #, c-format msgid " (end offset: %#)" msgstr "" -#: src/readelf.c:5009 +#: src/readelf.c:5525 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr "" -#: src/readelf.c:5060 +#: src/readelf.c:5577 #, c-format msgid "cannot get attribute code: %s" msgstr "" -#: src/readelf.c:5069 +#: src/readelf.c:5586 #, c-format msgid "cannot get attribute form: %s" msgstr "" -#: src/readelf.c:5084 +#: src/readelf.c:5601 #, c-format msgid "cannot get attribute value: %s" msgstr "" -#: src/readelf.c:5342 +#: src/readelf.c:5894 #, c-format msgid "" "\n" @@ -4852,7 +5047,7 @@ msgid "" " [Offset]\n" msgstr "" -#: src/readelf.c:5374 +#: src/readelf.c:5926 #, c-format msgid "" " Type unit at offset %:\n" @@ -4861,7 +5056,7 @@ msgid "" " Type signature: %#, Type offset: %#\n" msgstr "" -#: src/readelf.c:5383 +#: src/readelf.c:5935 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -4869,44 +5064,45 @@ msgid "" "%, Offset size: %\n" msgstr "" -#: src/readelf.c:5409 +#: src/readelf.c:5960 #, c-format msgid "cannot get DIE at offset % in section '%s': %s" msgstr "" -#: src/readelf.c:5421 +#: src/readelf.c:5974 #, c-format msgid "cannot get DIE offset: %s" msgstr "" -#: src/readelf.c:5430 +#: src/readelf.c:5983 #, c-format msgid "cannot get tag of DIE at offset % in section '%s': %s" msgstr "" -#: src/readelf.c:5461 +#: src/readelf.c:6015 #, c-format msgid "cannot get next DIE: %s\n" msgstr "" -#: src/readelf.c:5469 +#: src/readelf.c:6023 #, c-format msgid "cannot get next DIE: %s" msgstr "" -#: src/readelf.c:5518 +#: src/readelf.c:6059 #, c-format -msgid "cannot get line data section data: %s" +msgid "" +"\n" +"DWARF section [%2zu] '%s' at offset %#:\n" +"\n" msgstr "" -#: src/readelf.c:5531 +#: src/readelf.c:6158 #, c-format -msgid "" -"\n" -"Table at offset %Zu:\n" +msgid "cannot get line data section data: %s" msgstr "" -#: src/readelf.c:5586 +#: src/readelf.c:6226 #, c-format msgid "" "\n" @@ -4923,239 +5119,239 @@ msgid "" "Opcodes:\n" msgstr "" -#: src/readelf.c:5607 +#: src/readelf.c:6247 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "" -#: src/readelf.c:5622 +#: src/readelf.c:6262 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:5630 +#: src/readelf.c:6270 msgid "" "\n" "Directory table:" msgstr "" -#: src/readelf.c:5646 +#: src/readelf.c:6286 msgid "" "\n" "File name table:\n" " Entry Dir Time Size Name" msgstr "" -#: src/readelf.c:5675 +#: src/readelf.c:6315 msgid "" "\n" "Line number statements:" msgstr "" -#: src/readelf.c:5751 +#: src/readelf.c:6391 #, c-format msgid " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" msgstr "" -#: src/readelf.c:5756 +#: src/readelf.c:6396 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr "" -#: src/readelf.c:5776 +#: src/readelf.c:6416 #, c-format msgid " extended opcode %u: " msgstr "" -#: src/readelf.c:5781 +#: src/readelf.c:6421 msgid " end of sequence" msgstr "" -#: src/readelf.c:5798 +#: src/readelf.c:6438 #, c-format msgid " set address to %s\n" msgstr "" -#: src/readelf.c:5819 +#: src/readelf.c:6459 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" -#: src/readelf.c:5832 +#: src/readelf.c:6472 #, c-format msgid " set discriminator to %u\n" msgstr "" -#: src/readelf.c:5837 +#: src/readelf.c:6477 #, fuzzy msgid " unknown opcode" msgstr "unbekannter Typ" -#: src/readelf.c:5849 +#: src/readelf.c:6489 msgid " copy" msgstr "" -#: src/readelf.c:5860 +#: src/readelf.c:6500 #, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr "" -#: src/readelf.c:5864 +#: src/readelf.c:6504 #, c-format msgid " advance address by %u to %s\n" msgstr "" -#: src/readelf.c:5875 +#: src/readelf.c:6515 #, c-format msgid " advance line by constant %d to %\n" msgstr "" -#: src/readelf.c:5883 +#: src/readelf.c:6523 #, c-format msgid " set file to %\n" msgstr "" -#: src/readelf.c:5893 +#: src/readelf.c:6533 #, c-format msgid " set column to %\n" msgstr "" -#: src/readelf.c:5900 +#: src/readelf.c:6540 #, c-format msgid " set '%s' to %\n" msgstr "" -#: src/readelf.c:5906 +#: src/readelf.c:6546 msgid " set basic block flag" msgstr "" -#: src/readelf.c:5915 +#: src/readelf.c:6555 #, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr "" -#: src/readelf.c:5919 +#: src/readelf.c:6559 #, c-format msgid " advance address by constant %u to %s\n" msgstr "" -#: src/readelf.c:5937 +#: src/readelf.c:6577 #, c-format msgid " advance address by fixed value %u to %s\n" msgstr "" -#: src/readelf.c:5946 +#: src/readelf.c:6586 msgid " set prologue end flag" msgstr "" -#: src/readelf.c:5951 +#: src/readelf.c:6591 msgid " set epilogue begin flag" msgstr "" -#: src/readelf.c:5960 +#: src/readelf.c:6600 #, c-format msgid " set isa to %u\n" msgstr "" -#: src/readelf.c:5969 +#: src/readelf.c:6609 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:6001 +#: src/readelf.c:6641 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "" -#: src/readelf.c:6071 +#: src/readelf.c:6716 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6073 +#: src/readelf.c:6718 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6080 +#: src/readelf.c:6725 msgid " \n" msgstr "" -#: src/readelf.c:6132 src/readelf.c:6286 +#: src/readelf.c:6777 src/readelf.c:6931 #, c-format msgid "cannot get macro information section data: %s" msgstr "" -#: src/readelf.c:6211 +#: src/readelf.c:6856 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "" -#: src/readelf.c:6327 +#: src/readelf.c:6972 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " %s: %\n" -#: src/readelf.c:6339 +#: src/readelf.c:6984 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:6345 src/readelf.c:7055 +#: src/readelf.c:6990 src/readelf.c:7703 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:6352 +#: src/readelf.c:6997 #, fuzzy, c-format msgid " Flag: 0x%\n" msgstr " %s: %\n" -#: src/readelf.c:6355 +#: src/readelf.c:7000 #, c-format msgid " Offset length: %\n" msgstr "" -#: src/readelf.c:6363 +#: src/readelf.c:7008 #, c-format msgid " .debug_line offset: 0x%\n" msgstr "" -#: src/readelf.c:6375 +#: src/readelf.c:7021 #, c-format msgid " extension opcode table, % items:\n" msgstr "" -#: src/readelf.c:6382 +#: src/readelf.c:7028 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:6394 +#: src/readelf.c:7040 #, c-format msgid " % arguments:" msgstr "" -#: src/readelf.c:6422 +#: src/readelf.c:7068 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:6657 +#: src/readelf.c:7303 #, c-format msgid "vendor opcode not verified?" msgstr "" -#: src/readelf.c:6685 +#: src/readelf.c:7331 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" -#: src/readelf.c:6726 +#: src/readelf.c:7372 #, c-format msgid "" "\n" @@ -5163,47 +5359,47 @@ msgid "" " %*s String\n" msgstr "" -#: src/readelf.c:6740 +#: src/readelf.c:7386 #, c-format msgid " *** error while reading strings: %s\n" msgstr "" -#: src/readelf.c:6760 +#: src/readelf.c:7406 #, c-format msgid "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" msgstr "" -#: src/readelf.c:6862 +#: src/readelf.c:7508 #, c-format msgid "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" msgstr "" -#: src/readelf.c:6885 +#: src/readelf.c:7531 #, c-format msgid " LPStart encoding: %#x " msgstr "" -#: src/readelf.c:6897 +#: src/readelf.c:7543 #, c-format msgid " TType encoding: %#x " msgstr "" -#: src/readelf.c:6911 +#: src/readelf.c:7557 #, c-format msgid " Call site encoding: %#x " msgstr "" -#: src/readelf.c:6924 +#: src/readelf.c:7570 msgid "" "\n" " Call site table:" msgstr "" -#: src/readelf.c:6938 +#: src/readelf.c:7584 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5212,193 +5408,193 @@ msgid "" " Action: %u\n" msgstr "" -#: src/readelf.c:6998 +#: src/readelf.c:7644 #, c-format msgid "invalid TType encoding" msgstr "" -#: src/readelf.c:7019 +#: src/readelf.c:7665 #, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %# contains % bytes :\n" msgstr "" -#: src/readelf.c:7048 +#: src/readelf.c:7694 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:7064 +#: src/readelf.c:7712 #, c-format msgid " CU offset: %#\n" msgstr "" -#: src/readelf.c:7071 +#: src/readelf.c:7719 #, c-format msgid " TU offset: %#\n" msgstr "" -#: src/readelf.c:7078 +#: src/readelf.c:7726 #, c-format msgid " address offset: %#\n" msgstr "" -#: src/readelf.c:7085 +#: src/readelf.c:7733 #, c-format msgid " symbol offset: %#\n" msgstr "" -#: src/readelf.c:7092 +#: src/readelf.c:7740 #, c-format msgid " constant offset: %#\n" msgstr "" -#: src/readelf.c:7099 +#: src/readelf.c:7747 #, c-format msgid "" "\n" " CU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:7121 +#: src/readelf.c:7769 #, c-format msgid "" "\n" " TU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:7147 +#: src/readelf.c:7795 #, c-format msgid "" "\n" " Address list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:7174 +#: src/readelf.c:7824 #, c-format msgid "" "\n" " Symbol table at offset %# contains %zu slots:\n" msgstr "" -#: src/readelf.c:7259 +#: src/readelf.c:7909 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "" -#: src/readelf.c:7409 src/readelf.c:8010 +#: src/readelf.c:8069 src/readelf.c:8675 src/readelf.c:8786 src/readelf.c:8844 #, c-format msgid "cannot convert core note data: %s" msgstr "" -#: src/readelf.c:7750 +#: src/readelf.c:8416 #, c-format msgid "" "\n" "%*s... ..." msgstr "" -#: src/readelf.c:8109 +#: src/readelf.c:8919 msgid " Owner Data size Type\n" msgstr "" -#: src/readelf.c:8127 +#: src/readelf.c:8937 #, c-format msgid " %-13.*s %9 %s\n" msgstr "" -#: src/readelf.c:8161 +#: src/readelf.c:8987 #, c-format msgid "cannot get content of note section: %s" msgstr "" -#: src/readelf.c:8188 +#: src/readelf.c:9014 #, c-format msgid "" "\n" "Note section [%2zu] '%s' of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:8211 +#: src/readelf.c:9037 #, c-format msgid "" "\n" "Note segment of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:8257 +#: src/readelf.c:9083 #, c-format msgid "" "\n" "Section [%Zu] '%s' has no data to dump.\n" msgstr "" -#: src/readelf.c:8263 src/readelf.c:8286 +#: src/readelf.c:9089 src/readelf.c:9112 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "" -#: src/readelf.c:8267 +#: src/readelf.c:9093 #, c-format msgid "" "\n" "Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:8280 +#: src/readelf.c:9106 #, c-format msgid "" "\n" "Section [%Zu] '%s' has no strings to dump.\n" msgstr "" -#: src/readelf.c:8290 +#: src/readelf.c:9116 #, c-format msgid "" "\n" "String section [%Zu] '%s' contains % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:8338 +#: src/readelf.c:9164 #, c-format msgid "" "\n" "section [%lu] does not exist" msgstr "" -#: src/readelf.c:8367 +#: src/readelf.c:9193 #, c-format msgid "" "\n" "section '%s' does not exist" msgstr "" -#: src/readelf.c:8424 +#: src/readelf.c:9250 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "" -#: src/readelf.c:8427 +#: src/readelf.c:9253 #, c-format msgid "" "\n" "Archive '%s' has no symbol index\n" msgstr "" -#: src/readelf.c:8431 +#: src/readelf.c:9257 #, c-format msgid "" "\n" "Index of archive '%s' has %Zu entries:\n" msgstr "" -#: src/readelf.c:8449 +#: src/readelf.c:9275 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "" -#: src/readelf.c:8454 +#: src/readelf.c:9280 #, c-format msgid "Archive member '%s' contains:\n" msgstr "" @@ -5460,12 +5656,12 @@ msgstr "" msgid "%s: file format not recognized" msgstr "" -#: src/size.c:438 src/size.c:581 +#: src/size.c:438 src/size.c:571 #, c-format msgid " (ex %s)" msgstr "" -#: src/size.c:606 +#: src/size.c:596 msgid "(TOTALS)\n" msgstr "" @@ -5503,27 +5699,27 @@ msgstr "Alias für --radix=o" msgid "Print the strings of printable characters in files." msgstr "" -#: src/strings.c:260 src/strings.c:295 +#: src/strings.c:267 src/strings.c:302 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "" -#: src/strings.c:306 +#: src/strings.c:313 #, c-format msgid "invalid minimum length of matched string size" msgstr "" -#: src/strings.c:591 +#: src/strings.c:596 #, c-format msgid "lseek64 failed" msgstr "lseek64 fehlgeschlagen" -#: src/strings.c:608 src/strings.c:672 +#: src/strings.c:613 src/strings.c:677 #, c-format msgid "re-mmap failed" msgstr "re-mmap fehlgeschlagen" -#: src/strings.c:645 +#: src/strings.c:650 #, c-format msgid "mprotect failed" msgstr "mprotect fehlgeschlagen" @@ -5591,7 +5787,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 "" @@ -5616,87 +5812,87 @@ msgstr "" msgid "%s: cannot use -o or -f when stripping archive" msgstr "" -#: src/strip.c:467 +#: src/strip.c:468 #, c-format msgid "cannot open EBL backend" msgstr "" -#: src/strip.c:517 src/strip.c:541 +#: src/strip.c:518 src/strip.c:542 #, c-format msgid "cannot create new file '%s': %s" msgstr "" -#: src/strip.c:601 +#: src/strip.c:608 #, c-format msgid "illformed file '%s'" msgstr "" -#: src/strip.c:905 src/strip.c:994 +#: src/strip.c:930 src/strip.c:1019 #, c-format msgid "while generating output file: %s" msgstr "" -#: src/strip.c:967 src/strip.c:1929 +#: src/strip.c:992 src/strip.c:1957 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "" -#: src/strip.c:981 +#: src/strip.c:1006 #, c-format msgid "while preparing output for '%s'" msgstr "" -#: src/strip.c:1032 src/strip.c:1088 +#: src/strip.c:1057 src/strip.c:1114 #, c-format msgid "while create section header section: %s" msgstr "" -#: src/strip.c:1038 +#: src/strip.c:1063 #, c-format msgid "cannot allocate section data: %s" msgstr "" -#: src/strip.c:1097 +#: src/strip.c:1123 #, c-format msgid "while create section header string table: %s" msgstr "" -#: src/strip.c:1724 +#: src/strip.c:1752 #, fuzzy, c-format msgid "bad relocation" msgstr "Relocations anzeigen" -#: src/strip.c:1841 src/strip.c:1951 +#: src/strip.c:1869 src/strip.c:1979 #, c-format msgid "while writing '%s': %s" msgstr "" -#: src/strip.c:1852 +#: src/strip.c:1880 #, c-format msgid "while creating '%s'" msgstr "" -#: src/strip.c:1874 +#: src/strip.c:1902 #, c-format msgid "while computing checksum for debug information" msgstr "" -#: src/strip.c:1937 +#: src/strip.c:1965 #, c-format msgid "%s: error while reading the file: %s" msgstr "" -#: src/strip.c:1976 src/strip.c:1996 +#: src/strip.c:2004 src/strip.c:2024 #, fuzzy, c-format msgid "while writing '%s'" msgstr "beim Schliessen von '%s'" -#: src/strip.c:2030 src/strip.c:2037 +#: src/strip.c:2061 src/strip.c:2068 #, c-format msgid "error while finishing '%s': %s" msgstr "" -#: src/strip.c:2060 src/strip.c:2117 +#: src/strip.c:2091 src/strip.c:2148 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "" @@ -5733,265 +5929,288 @@ 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:263 src/unstrip.c:1828 #, c-format msgid "cannot create program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:262 +#: src/unstrip.c:269 #, c-format msgid "cannot copy program header: %s" msgstr "konnte Programm-Kopf nicht kopieren: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:279 #, c-format msgid "cannot copy section header: %s" msgstr "" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:282 src/unstrip.c:1509 #, 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:284 src/unstrip.c:1511 #, c-format msgid "cannot copy section data: %s" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:308 #, 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:348 src/unstrip.c:765 src/unstrip.c:1543 #, 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:364 src/unstrip.c:582 src/unstrip.c:603 src/unstrip.c:615 +#: src/unstrip.c:1564 src/unstrip.c:1694 src/unstrip.c:1718 #, c-format msgid "cannot update symbol table: %s" msgstr "konnte Symboltabelle nicht aktualisieren: %s" -#: src/unstrip.c:367 +#: src/unstrip.c:374 #, c-format msgid "cannot update section header: %s" msgstr "" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:413 src/unstrip.c:424 #, c-format msgid "cannot update relocation: %s" msgstr "" -#: src/unstrip.c:504 +#: src/unstrip.c:511 #, c-format msgid "cannot get symbol version: %s" msgstr "" -#: src/unstrip.c:516 +#: src/unstrip.c:523 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:764 +#: src/unstrip.c:771 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:913 src/unstrip.c:1254 #, 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:954 src/unstrip.c:973 src/unstrip.c:1006 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:987 +#: src/unstrip.c:994 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1049 src/unstrip.c:1374 #, 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:1174 src/unstrip.c:1189 src/unstrip.c:1455 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1190 +#: src/unstrip.c:1198 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1225 src/unstrip.c:1229 #, 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:1233 src/unstrip.c:1237 src/unstrip.c:1470 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1232 +#: src/unstrip.c:1240 #, 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:1299 src/unstrip.c:1389 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1441 +#: src/unstrip.c:1449 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1543 +#: src/unstrip.c:1551 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "" -#: src/unstrip.c:1781 +#: src/unstrip.c:1789 #, fuzzy, c-format msgid "cannot read section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1810 #, c-format msgid "cannot get ELF header: %s" msgstr "" -#: src/unstrip.c:1830 +#: src/unstrip.c:1838 #, 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:1843 src/unstrip.c:1922 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:1883 +#: src/unstrip.c:1891 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:1886 +#: src/unstrip.c:1894 #, 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:1913 src/unstrip.c:1964 src/unstrip.c:1976 src/unstrip.c:2062 #, 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:1955 +msgid "WARNING: " +msgstr "" + +#: src/unstrip.c:1957 +msgid ", use --force" +msgstr "" + +#: src/unstrip.c:1980 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1983 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1986 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:1989 +msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:2019 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:1998 +#: src/unstrip.c:2023 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2013 +#: src/unstrip.c:2038 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2017 +#: src/unstrip.c:2042 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2030 +#: src/unstrip.c:2055 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2061 +#: src/unstrip.c:2086 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2194 +#: src/unstrip.c:2219 #, c-format msgid "no matching modules found" msgstr "kein passendes Modul gefunden" -#: src/unstrip.c:2203 +#: src/unstrip.c:2228 #, c-format msgid "matched more than one module" msgstr "mehr als ein passendes Modul" -#: src/unstrip.c:2250 +#: src/unstrip.c:2275 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2251 +#: src/unstrip.c:2276 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" @@ -6018,6 +6237,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" diff --git a/po/elfutils.pot b/po/elfutils.pot index 1697c8a..cb904cb 100644 --- a/po/elfutils.pot +++ b/po/elfutils.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: elfutils 0.155\n" +"Project-Id-Version: elfutils 0.160\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2012-08-27 20:34+0200\n" +"POT-Creation-Date: 2014-08-27 11:26+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,18 +18,18 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:2842 -#: src/readelf.c:3181 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3098 +#: src/readelf.c:3447 src/readelf.c:8018 src/unstrip.c:2115 src/unstrip.c:2323 #, c-format msgid "memory exhausted" msgstr "" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:49 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:53 #: libelf/elf_error.c:60 msgid "no error" msgstr "" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:51 +#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:55 #: libelf/elf_error.c:91 msgid "out of memory" msgstr "" @@ -68,7 +68,7 @@ msgstr "" msgid "no backend support available" msgstr "" -#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:50 +#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:54 #: libelf/elf_error.c:63 msgid "unknown error" msgstr "" @@ -165,7 +165,7 @@ msgstr "" msgid "invalid directory index" msgstr "" -#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:70 +#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:74 msgid "address out of range" msgstr "" @@ -185,7 +185,7 @@ msgstr "" msgid "invalid address range index" msgstr "" -#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:71 +#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:75 msgid "no matching address range" msgstr "" @@ -209,7 +209,7 @@ msgstr "" msgid "no alternative debug link found" msgstr "" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdwfl/argp-std.c:46 src/unstrip.c:2265 msgid "Input selection options:" msgstr "" @@ -243,132 +243,188 @@ msgstr "" msgid "Search path for separate debuginfo files" msgstr "" -#: libdwfl/argp-std.c:142 +#: libdwfl/argp-std.c:157 msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "" -#: libdwfl/argp-std.c:202 -#, c-format -msgid "cannot read ELF core file: %s" +#: libdwfl/argp-std.c:230 +msgid "cannot load kernel symbols" msgstr "" -#: libdwfl/argp-std.c:220 -msgid "No modules recognized in core file" +#: libdwfl/argp-std.c:234 +msgid "cannot find kernel modules" msgstr "" -#: libdwfl/argp-std.c:232 -msgid "cannot load kernel symbols" +#: libdwfl/argp-std.c:251 +msgid "cannot find kernel or modules" msgstr "" -#: libdwfl/argp-std.c:236 -msgid "cannot find kernel modules" +#: libdwfl/argp-std.c:290 +#, c-format +msgid "cannot read ELF core file: %s" msgstr "" -#: libdwfl/argp-std.c:250 -msgid "cannot find kernel or modules" +#: libdwfl/argp-std.c:311 +msgid "No modules recognized in core file" msgstr "" -#: libdwfl/libdwflP.h:52 +#: libdwfl/libdwflP.h:56 msgid "See errno" msgstr "" -#: libdwfl/libdwflP.h:53 +#: libdwfl/libdwflP.h:57 msgid "See elf_errno" msgstr "" -#: libdwfl/libdwflP.h:54 +#: libdwfl/libdwflP.h:58 msgid "See dwarf_errno" msgstr "" -#: libdwfl/libdwflP.h:55 +#: libdwfl/libdwflP.h:59 msgid "See ebl_errno (XXX missing)" msgstr "" -#: libdwfl/libdwflP.h:56 +#: libdwfl/libdwflP.h:60 msgid "gzip decompression failed" msgstr "" -#: libdwfl/libdwflP.h:57 +#: libdwfl/libdwflP.h:61 msgid "bzip2 decompression failed" msgstr "" -#: libdwfl/libdwflP.h:58 +#: libdwfl/libdwflP.h:62 msgid "LZMA decompression failed" msgstr "" -#: libdwfl/libdwflP.h:59 +#: libdwfl/libdwflP.h:63 msgid "no support library found for machine" msgstr "" -#: libdwfl/libdwflP.h:60 +#: libdwfl/libdwflP.h:64 msgid "Callbacks missing for ET_REL file" msgstr "" -#: libdwfl/libdwflP.h:61 +#: libdwfl/libdwflP.h:65 msgid "Unsupported relocation type" msgstr "" -#: libdwfl/libdwflP.h:62 +#: libdwfl/libdwflP.h:66 msgid "r_offset is bogus" msgstr "" -#: libdwfl/libdwflP.h:63 libelf/elf_error.c:111 libelf/elf_error.c:171 +#: libdwfl/libdwflP.h:67 libelf/elf_error.c:111 libelf/elf_error.c:171 msgid "offset out of range" msgstr "" -#: libdwfl/libdwflP.h:64 +#: libdwfl/libdwflP.h:68 msgid "relocation refers to undefined symbol" msgstr "" -#: libdwfl/libdwflP.h:65 +#: libdwfl/libdwflP.h:69 msgid "Callback returned failure" msgstr "" -#: libdwfl/libdwflP.h:66 +#: libdwfl/libdwflP.h:70 msgid "No DWARF information found" msgstr "" -#: libdwfl/libdwflP.h:67 +#: libdwfl/libdwflP.h:71 msgid "No symbol table found" msgstr "" -#: libdwfl/libdwflP.h:68 +#: libdwfl/libdwflP.h:72 msgid "No ELF program headers" msgstr "" -#: libdwfl/libdwflP.h:69 +#: libdwfl/libdwflP.h:73 msgid "address range overlaps an existing module" msgstr "" -#: libdwfl/libdwflP.h:72 +#: libdwfl/libdwflP.h:76 msgid "image truncated" msgstr "" -#: libdwfl/libdwflP.h:73 +#: libdwfl/libdwflP.h:77 msgid "ELF file opened" msgstr "" -#: libdwfl/libdwflP.h:74 +#: libdwfl/libdwflP.h:78 msgid "not a valid ELF file" msgstr "" -#: libdwfl/libdwflP.h:75 +#: libdwfl/libdwflP.h:79 msgid "cannot handle DWARF type description" msgstr "" -#: libdwfl/libdwflP.h:76 +#: libdwfl/libdwflP.h:80 msgid "ELF file does not match build ID" msgstr "" -#: libdwfl/libdwflP.h:77 +#: libdwfl/libdwflP.h:81 msgid "corrupt .gnu.prelink_undo section data" msgstr "" +#: libdwfl/libdwflP.h:82 +msgid "Internal error due to ebl" +msgstr "" + +#: libdwfl/libdwflP.h:83 +msgid "Missing data in core file" +msgstr "" + +#: libdwfl/libdwflP.h:84 +msgid "Invalid register" +msgstr "" + +#: libdwfl/libdwflP.h:85 +msgid "Error reading process memory" +msgstr "" + +#: libdwfl/libdwflP.h:86 +msgid "Couldn't find architecture of any ELF" +msgstr "" + +#: libdwfl/libdwflP.h:87 +msgid "Error parsing /proc filesystem" +msgstr "" + +#: libdwfl/libdwflP.h:88 +msgid "Invalid DWARF" +msgstr "" + +#: libdwfl/libdwflP.h:89 +msgid "Unsupported DWARF" +msgstr "" + +#: libdwfl/libdwflP.h:90 +msgid "Unable to find more threads" +msgstr "" + +#: libdwfl/libdwflP.h:91 +msgid "Dwfl already has attached state" +msgstr "" + +#: libdwfl/libdwflP.h:92 +msgid "Dwfl has no attached state" +msgstr "" + +#: libdwfl/libdwflP.h:93 +msgid "Unwinding not supported for this architecture" +msgstr "" + +#: libdwfl/libdwflP.h:94 +msgid "Invalid argument" +msgstr "" + +#: libdwfl/libdwflP.h:95 +msgid "Not an ET_CORE ELF file" +msgstr "" + #: libebl/eblbackendname.c:42 msgid "No backend" msgstr "" -#: libebl/eblcorenotetypename.c:86 libebl/eblobjecttypename.c:57 +#: libebl/eblcorenotetypename.c:102 libebl/eblobjecttypename.c:57 #: libebl/eblobjnotetypename.c:73 libebl/eblosabiname.c:77 #: libebl/eblsectionname.c:89 libebl/eblsectiontypename.c:119 #: libebl/eblsegmenttypename.c:83 @@ -464,7 +520,7 @@ msgstr "" msgid "invalid size of destination operand" msgstr "" -#: libelf/elf_error.c:87 src/readelf.c:4697 +#: libelf/elf_error.c:87 src/readelf.c:5190 #, c-format msgid "invalid encoding" msgstr "" @@ -545,8 +601,8 @@ msgstr "" msgid "invalid section header" msgstr "" -#: libelf/elf_error.c:187 src/readelf.c:6335 src/readelf.c:6780 -#: src/readelf.c:6881 src/readelf.c:7043 +#: libelf/elf_error.c:187 src/readelf.c:6980 src/readelf.c:7426 +#: src/readelf.c:7527 src/readelf.c:7689 #, c-format msgid "invalid data" msgstr "" @@ -609,31 +665,41 @@ msgid "Also show symbol or section names" msgstr "" #: src/addr2line.c:64 +msgid "Also show symbol and the section names" +msgstr "" + +#: src/addr2line.c:65 msgid "Also show line table flags" msgstr "" -#: src/addr2line.c:66 +#: src/addr2line.c:67 msgid "Treat addresses as offsets relative to NAME section." msgstr "" -#: src/addr2line.c:68 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 +#: src/addr2line.c:69 +msgid "" +"Show all source locations that caused inline expansion of subroutines at the " +"address." +msgstr "" + +#: src/addr2line.c:72 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 #: src/strings.c:75 msgid "Miscellaneous:" msgstr "" -#: src/addr2line.c:77 +#: src/addr2line.c:81 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" -#: src/addr2line.c:81 +#: src/addr2line.c:85 msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:181 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:231 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 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:460 src/size.c:211 src/strings.c:219 -#: src/strip.c:213 src/unstrip.c:226 +#: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -641,30 +707,30 @@ msgid "" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" msgstr "" -#: src/addr2line.c:186 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:236 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 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:465 src/size.c:216 src/strings.c:224 -#: src/strip.c:218 src/unstrip.c:231 +#: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "" -#: src/addr2line.c:405 +#: src/addr2line.c:474 #, c-format msgid "Section syntax requires exactly one module" msgstr "" -#: src/addr2line.c:428 +#: src/addr2line.c:497 #, c-format msgid "offset %# lies outside section '%s'" msgstr "" -#: src/addr2line.c:469 +#: src/addr2line.c:563 #, c-format msgid "cannot find symbol '%s'" msgstr "" -#: src/addr2line.c:474 +#: src/addr2line.c:568 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "" @@ -1101,8 +1167,8 @@ msgstr "" #: src/elfcmp.c:722 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:175 src/strip.c:450 src/strip.c:487 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1911 +#: src/unstrip.c:1940 #, c-format msgid "cannot open '%s'" msgstr "" @@ -1154,1596 +1220,1596 @@ msgstr "" msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "" -#: src/elflint.c:78 src/readelf.c:113 +#: src/elflint.c:78 src/readelf.c:123 msgid "FILE..." msgstr "" -#: src/elflint.c:151 src/readelf.c:271 +#: src/elflint.c:155 src/readelf.c:292 #, c-format msgid "cannot open input file" msgstr "" -#: src/elflint.c:158 +#: src/elflint.c:162 #, c-format msgid "cannot generate Elf descriptor: %s\n" msgstr "" -#: src/elflint.c:177 +#: src/elflint.c:181 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "" -#: src/elflint.c:181 +#: src/elflint.c:185 msgid "No errors" msgstr "" -#: src/elflint.c:215 src/readelf.c:434 +#: src/elflint.c:219 src/readelf.c:468 msgid "Missing file name.\n" msgstr "" -#: src/elflint.c:294 +#: src/elflint.c:298 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr "" -#: src/elflint.c:302 +#: src/elflint.c:306 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "" -#: src/elflint.c:363 +#: src/elflint.c:371 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "" -#: src/elflint.c:368 +#: src/elflint.c:376 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "" -#: src/elflint.c:372 +#: src/elflint.c:380 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "" -#: src/elflint.c:378 +#: src/elflint.c:386 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "" -#: src/elflint.c:384 +#: src/elflint.c:392 #, c-format msgid "unsupport ABI version e_ident[%d] == %d\n" msgstr "" -#: src/elflint.c:389 +#: src/elflint.c:397 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "" -#: src/elflint.c:394 +#: src/elflint.c:402 #, c-format msgid "unknown object file type %d\n" msgstr "" -#: src/elflint.c:401 +#: src/elflint.c:409 #, c-format msgid "unknown machine type %d\n" msgstr "" -#: src/elflint.c:405 +#: src/elflint.c:413 #, c-format msgid "unknown object file version\n" msgstr "" -#: src/elflint.c:411 +#: src/elflint.c:419 #, c-format msgid "invalid program header offset\n" msgstr "" -#: src/elflint.c:413 +#: src/elflint.c:421 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" -#: src/elflint.c:417 +#: src/elflint.c:425 #, c-format msgid "invalid number of program header entries\n" msgstr "" -#: src/elflint.c:425 +#: src/elflint.c:433 #, c-format msgid "invalid section header table offset\n" msgstr "" -#: src/elflint.c:428 +#: src/elflint.c:436 #, c-format msgid "section header table must be present\n" msgstr "" -#: src/elflint.c:442 +#: src/elflint.c:450 #, c-format msgid "invalid number of section header table entries\n" msgstr "" -#: src/elflint.c:459 +#: src/elflint.c:467 #, c-format msgid "invalid section header index\n" msgstr "" -#: src/elflint.c:473 +#: src/elflint.c:481 #, c-format msgid "invalid number of program header table entries\n" msgstr "" -#: src/elflint.c:482 +#: src/elflint.c:490 #, c-format msgid "invalid machine flags: %s\n" msgstr "" -#: src/elflint.c:489 src/elflint.c:506 +#: src/elflint.c:497 src/elflint.c:514 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "" -#: src/elflint.c:492 src/elflint.c:509 +#: src/elflint.c:500 src/elflint.c:517 #, c-format msgid "invalid program header size: %hd\n" msgstr "" -#: src/elflint.c:495 src/elflint.c:512 +#: src/elflint.c:503 src/elflint.c:520 #, c-format msgid "invalid program header position or size\n" msgstr "" -#: src/elflint.c:498 src/elflint.c:515 +#: src/elflint.c:506 src/elflint.c:523 #, c-format msgid "invalid section header size: %hd\n" msgstr "" -#: src/elflint.c:501 src/elflint.c:518 +#: src/elflint.c:509 src/elflint.c:526 #, c-format msgid "invalid section header position or size\n" msgstr "" -#: src/elflint.c:562 +#: src/elflint.c:570 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " "group\n" msgstr "" -#: src/elflint.c:566 +#: src/elflint.c:574 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" msgstr "" -#: src/elflint.c:582 src/elflint.c:1426 src/elflint.c:1476 src/elflint.c:1581 -#: src/elflint.c:2166 src/elflint.c:2680 src/elflint.c:2841 src/elflint.c:2971 -#: src/elflint.c:3143 src/elflint.c:4045 +#: 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:595 src/elflint.c:1588 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " "type is not SHT_STRTAB\n" msgstr "" -#: src/elflint.c:618 +#: src/elflint.c:626 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " "section\n" msgstr "" -#: src/elflint.c:629 +#: src/elflint.c:638 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "" -#: src/elflint.c:638 +#: src/elflint.c:647 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "" -#: src/elflint.c:643 src/elflint.c:646 src/elflint.c:649 src/elflint.c:652 -#: src/elflint.c:655 src/elflint.c:658 +#: src/elflint.c:652 src/elflint.c:655 src/elflint.c:658 src/elflint.c:661 +#: src/elflint.c:664 src/elflint.c:667 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "" -#: src/elflint.c:661 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "" -#: src/elflint.c:671 +#: src/elflint.c:680 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "" -#: src/elflint.c:680 +#: src/elflint.c:689 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "" -#: src/elflint.c:694 +#: src/elflint.c:704 #, c-format msgid "" "section [%2d] '%s': symbol %zu: too large section index but no extended " "section index section\n" msgstr "" -#: src/elflint.c:700 +#: src/elflint.c:710 #, c-format msgid "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " "st_shndx (%)\n" msgstr "" -#: src/elflint.c:712 +#: src/elflint.c:722 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid section index\n" msgstr "" -#: src/elflint.c:720 +#: src/elflint.c:730 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown type\n" msgstr "" -#: src/elflint.c:726 +#: src/elflint.c:736 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" msgstr "" -#: src/elflint.c:731 +#: src/elflint.c:741 #, c-format msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" msgstr "" -#: src/elflint.c:739 +#: src/elflint.c:749 #, c-format msgid "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" msgstr "" -#: src/elflint.c:743 +#: src/elflint.c:753 #, c-format msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" msgstr "" -#: src/elflint.c:747 +#: src/elflint.c:757 #, c-format msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" msgstr "" -#: src/elflint.c:779 +#: src/elflint.c:804 #, c-format msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" msgstr "" -#: src/elflint.c:785 src/elflint.c:810 src/elflint.c:853 +#: 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:794 +#: 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:804 src/elflint.c:846 +#: 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:831 +#: 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:839 +#: 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:866 +#: 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:873 +#: 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:880 +#: src/elflint.c:905 #, c-format msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" msgstr "" -#: src/elflint.c:930 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " "[%2d]\n" msgstr "" -#: src/elflint.c:937 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " "'%s'\n" msgstr "" -#: src/elflint.c:953 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " "match %s section address %#\n" msgstr "" -#: src/elflint.c:960 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " "match %s section size %\n" msgstr "" -#: src/elflint.c:968 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " "section\n" msgstr "" -#: src/elflint.c:984 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " "segment address %#\n" msgstr "" -#: src/elflint.c:991 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " "segment size %\n" msgstr "" -#: src/elflint.c:1004 +#: 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:1008 +#: src/elflint.c:1033 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" msgstr "" -#: src/elflint.c:1053 +#: src/elflint.c:1082 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "" -#: src/elflint.c:1062 src/elflint.c:1114 +#: 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:1087 src/elflint.c:1139 +#: 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:1093 src/elflint.c:1145 +#: 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:1105 +#: src/elflint.c:1136 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "" -#: src/elflint.c:1187 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "" -#: src/elflint.c:1200 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "" -#: src/elflint.c:1208 +#: src/elflint.c:1238 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "" -#: src/elflint.c:1215 +#: src/elflint.c:1245 #, c-format msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" msgstr "" -#: src/elflint.c:1222 +#: src/elflint.c:1253 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "" -#: src/elflint.c:1282 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" -#: src/elflint.c:1309 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "" -#: src/elflint.c:1317 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " "type\n" msgstr "" -#: src/elflint.c:1325 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "" -#: src/elflint.c:1343 +#: 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:1360 +#: src/elflint.c:1391 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "" -#: src/elflint.c:1375 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " "%s\n" msgstr "" -#: src/elflint.c:1396 +#: 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:1411 +#: src/elflint.c:1442 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "" -#: src/elflint.c:1450 src/elflint.c:1500 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "" -#: src/elflint.c:1576 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "" -#: src/elflint.c:1594 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" -#: src/elflint.c:1599 src/elflint.c:1882 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "" -#: src/elflint.c:1609 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" -#: src/elflint.c:1617 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "" -#: src/elflint.c:1624 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "" -#: src/elflint.c:1635 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "" -#: src/elflint.c:1645 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "" -#: src/elflint.c:1663 +#: 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:1676 +#: 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:1719 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" -#: src/elflint.c:1734 +#: 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:1754 src/elflint.c:1782 +#: 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:1766 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "" -#: src/elflint.c:1775 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "" -#: src/elflint.c:1790 src/elflint.c:1797 +#: 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:1807 src/elflint.c:1811 +#: 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:1817 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" -#: src/elflint.c:1828 src/elflint.c:1832 src/elflint.c:1836 src/elflint.c:1840 +#: 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:1852 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" msgstr "" -#: src/elflint.c:1862 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" -#: src/elflint.c:1867 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "" -#: src/elflint.c:1870 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "" -#: src/elflint.c:1877 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" -#: src/elflint.c:1892 +#: 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:1903 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "" -#: src/elflint.c:1915 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "" -#: src/elflint.c:1920 +#: src/elflint.c:1962 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" -#: src/elflint.c:1936 src/elflint.c:1977 +#: 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:1948 src/elflint.c:1989 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "" -#: src/elflint.c:1957 src/elflint.c:1998 +#: 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:1963 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2004 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" -#: src/elflint.c:2019 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "" -#: src/elflint.c:2030 +#: src/elflint.c:2092 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" msgstr "" -#: src/elflint.c:2038 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" -#: src/elflint.c:2070 +#: 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:2091 +#: 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:2102 +#: 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:2133 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2138 +#: 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:2144 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" -#: src/elflint.c:2157 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" -#: src/elflint.c:2175 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" -#: src/elflint.c:2183 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "" -#: src/elflint.c:2188 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "" -#: src/elflint.c:2193 +#: 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:2241 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" -#: src/elflint.c:2319 src/elflint.c:2323 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "" -#: src/elflint.c:2330 +#: 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:2342 +#: 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:2358 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "" -#: src/elflint.c:2378 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" msgstr "" -#: src/elflint.c:2389 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "" -#: src/elflint.c:2394 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" -#: src/elflint.c:2400 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "" -#: src/elflint.c:2405 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "" -#: src/elflint.c:2412 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "" -#: src/elflint.c:2417 +#: src/elflint.c:2479 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "" -#: src/elflint.c:2423 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "" -#: src/elflint.c:2429 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "" -#: src/elflint.c:2438 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" -#: src/elflint.c:2443 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "" -#: src/elflint.c:2449 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "" -#: src/elflint.c:2453 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "" -#: src/elflint.c:2464 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "" -#: src/elflint.c:2476 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "" -#: src/elflint.c:2485 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" -#: src/elflint.c:2492 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "" -#: src/elflint.c:2498 +#: 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:2505 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "" -#: src/elflint.c:2694 +#: 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:2705 +#: 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:2721 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "" -#: src/elflint.c:2737 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" -#: src/elflint.c:2745 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "" -#: src/elflint.c:2759 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "" -#: src/elflint.c:2764 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" -#: src/elflint.c:2774 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" -#: src/elflint.c:2826 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "" -#: src/elflint.c:2834 src/elflint.c:2963 +#: 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:2857 src/elflint.c:3015 +#: 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:2863 src/elflint.c:3021 +#: 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:2871 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "" -#: src/elflint.c:2879 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "" -#: src/elflint.c:2891 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:2898 +#: 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:2905 +#: 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:2915 +#: 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:2926 +#: 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:2942 src/elflint.c:3100 +#: 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:2955 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "" -#: src/elflint.c:3000 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "" -#: src/elflint.c:3004 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" -#: src/elflint.c:3010 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:3034 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "" -#: src/elflint.c:3041 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" -#: src/elflint.c:3050 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "" -#: src/elflint.c:3069 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" msgstr "" -#: src/elflint.c:3084 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" -#: src/elflint.c:3106 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "" -#: src/elflint.c:3122 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "" -#: src/elflint.c:3135 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "" -#: src/elflint.c:3156 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "" -#: src/elflint.c:3172 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" -#: src/elflint.c:3181 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" -#: src/elflint.c:3193 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" -#: src/elflint.c:3210 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" -#: src/elflint.c:3219 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "" -#: src/elflint.c:3228 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" -#: src/elflint.c:3241 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" -#: src/elflint.c:3252 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" -#: src/elflint.c:3270 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" -#: src/elflint.c:3281 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" -#: src/elflint.c:3294 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" -#: src/elflint.c:3298 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" msgstr "" -#: src/elflint.c:3308 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "" -#: src/elflint.c:3314 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" -#: src/elflint.c:3403 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "" -#: src/elflint.c:3407 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "" -#: src/elflint.c:3409 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "" -#: src/elflint.c:3411 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "" -#: src/elflint.c:3413 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "" -#: src/elflint.c:3415 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "" -#: src/elflint.c:3417 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "" -#: src/elflint.c:3419 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "" -#: src/elflint.c:3422 +#: 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:3426 +#: 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:3430 +#: 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:3447 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "" -#: src/elflint.c:3456 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "" -#: src/elflint.c:3483 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3499 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3516 +#: 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:3534 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "" -#: src/elflint.c:3540 src/elflint.c:3572 +#: 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:3545 src/elflint.c:3577 +#: 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:3553 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" -#: src/elflint.c:3596 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" -#: src/elflint.c:3601 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "" -#: src/elflint.c:3611 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "" -#: src/elflint.c:3625 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" msgstr "" -#: src/elflint.c:3632 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "" -#: src/elflint.c:3640 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" -#: src/elflint.c:3648 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" -#: src/elflint.c:3653 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" -#: src/elflint.c:3660 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" -#: src/elflint.c:3665 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" -#: src/elflint.c:3683 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" -#: src/elflint.c:3692 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "" -#: src/elflint.c:3721 +#: 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:3729 +#: 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:3738 +#: 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:3749 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "" -#: src/elflint.c:3759 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" -#: src/elflint.c:3769 +#: 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:3775 +#: 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:3783 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" -#: src/elflint.c:3834 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "" -#: src/elflint.c:3857 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" -#: src/elflint.c:3868 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" -#: src/elflint.c:3874 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" -#: src/elflint.c:3885 +#: 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:3898 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "" -#: src/elflint.c:3912 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" -#: src/elflint.c:3961 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" -#: src/elflint.c:3965 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" msgstr "" -#: src/elflint.c:3988 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" msgstr "" -#: src/elflint.c:3992 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" msgstr "" -#: src/elflint.c:4009 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4028 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4031 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4052 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4059 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4062 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4080 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4095 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4104 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" -#: src/elflint.c:4115 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4123 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4130 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4144 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4147 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4157 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4178 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4181 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4189 src/elflint.c:4212 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4218 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4242 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4245 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4258 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4266 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4269 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4273 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4276 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4281 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4284 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4295 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4302 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4305 +#: 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:4318 +#: 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:4352 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4378 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3251,7 +3317,8 @@ msgstr "" msgid "Warning: size of `%s' changed from % in %s to % in %s" msgstr "" -#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:640 src/strip.c:562 +#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 +#: src/readelf.c:829 src/strip.c:563 #, c-format msgid "cannot determine number of sections: %s" msgstr "" @@ -3482,7 +3549,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:1818 #, c-format msgid "cannot update ELF header: %s" msgstr "" @@ -3644,7 +3711,7 @@ msgid "%s: INTERNAL ERROR %d (%s-%s): %s" msgstr "" #: src/nm.c:398 src/nm.c:410 src/size.c:309 src/size.c:318 src/size.c:329 -#: src/strip.c:2124 +#: src/strip.c:2155 #, c-format msgid "while closing '%s'" msgstr "" @@ -3685,17 +3752,17 @@ msgstr "" msgid "cannot create search tree" msgstr "" -#: src/nm.c:757 src/nm.c:1156 src/objdump.c:787 src/readelf.c:896 -#: src/readelf.c:1039 src/readelf.c:1187 src/readelf.c:1369 src/readelf.c:1569 -#: src/readelf.c:1755 src/readelf.c:1965 src/readelf.c:2219 src/readelf.c:2285 -#: src/readelf.c:2363 src/readelf.c:2861 src/readelf.c:2897 src/readelf.c:2959 -#: src/readelf.c:7270 src/readelf.c:8176 src/readelf.c:8323 src/readelf.c:8391 -#: src/size.c:417 src/size.c:491 src/strip.c:502 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 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:2196 src/readelf.c:2454 +#: src/readelf.c:2524 src/readelf.c:2606 src/readelf.c:3117 src/readelf.c:3153 +#: src/readelf.c:3216 src/readelf.c:7920 src/readelf.c:9002 src/readelf.c:9149 +#: src/readelf.c:9217 src/size.c:417 src/size.c:487 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "" -#: src/nm.c:782 +#: src/nm.c:784 #, c-format msgid "" "\n" @@ -3704,29 +3771,29 @@ msgid "" "\n" msgstr "" -#: src/nm.c:785 +#: src/nm.c:787 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" "\n" msgstr "" -#: src/nm.c:1166 +#: src/nm.c:1173 #, c-format msgid "%s: entry size in section `%s' is not what we expect" msgstr "" -#: src/nm.c:1170 +#: src/nm.c:1177 #, c-format msgid "%s: size of section `%s' is not multiple of entry size" msgstr "" -#: src/nm.c:1428 +#: src/nm.c:1435 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "" -#: src/nm.c:1485 +#: src/nm.c:1492 #, c-format msgid "%s%s%s: no symbols" msgstr "" @@ -3759,7 +3826,7 @@ msgstr "" msgid "Show information from FILEs (a.out by default)." msgstr "" -#: src/objdump.c:236 src/readelf.c:439 +#: src/objdump.c:236 src/readelf.c:473 msgid "No operation specified.\n" msgstr "" @@ -3768,11 +3835,11 @@ msgstr "" msgid "while close `%s'" msgstr "" -#: src/objdump.c:379 src/readelf.c:1664 src/readelf.c:1838 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2069 msgid "INVALID SYMBOL" msgstr "" -#: src/objdump.c:394 src/readelf.c:1695 src/readelf.c:1871 +#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2102 msgid "INVALID SECTION" msgstr "" @@ -3826,384 +3893,429 @@ msgstr "" msgid "error while freeing sub-ELF descriptor: %s" msgstr "" -#: src/readelf.c:67 +#: src/readelf.c:71 +msgid "ELF input selection:" +msgstr "" + +#: src/readelf.c:73 +msgid "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" +msgstr "" + +#: src/readelf.c:75 msgid "ELF output selection:" msgstr "" -#: src/readelf.c:69 +#: src/readelf.c:77 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "" -#: src/readelf.c:70 +#: src/readelf.c:78 msgid "Display the dynamic segment" msgstr "" -#: src/readelf.c:71 +#: src/readelf.c:79 msgid "Display the ELF file header" msgstr "" -#: src/readelf.c:73 +#: src/readelf.c:81 msgid "Display histogram of bucket list lengths" msgstr "" -#: src/readelf.c:74 +#: src/readelf.c:82 msgid "Display the program headers" msgstr "" -#: src/readelf.c:76 +#: src/readelf.c:84 msgid "Display relocations" msgstr "" -#: src/readelf.c:77 +#: src/readelf.c:85 msgid "Display the sections' headers" msgstr "" -#: src/readelf.c:79 +#: src/readelf.c:87 msgid "Display the symbol table" msgstr "" -#: src/readelf.c:80 +#: src/readelf.c:88 msgid "Display versioning information" msgstr "" -#: src/readelf.c:81 +#: src/readelf.c:89 msgid "Display the ELF notes" msgstr "" -#: src/readelf.c:83 +#: src/readelf.c:91 msgid "Display architecture specific information, if any" msgstr "" -#: src/readelf.c:85 +#: src/readelf.c:93 msgid "Display sections for exception handling" msgstr "" -#: src/readelf.c:87 +#: src/readelf.c:95 msgid "Additional output selection:" msgstr "" -#: src/readelf.c:89 +#: src/readelf.c:97 msgid "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" msgstr "" -#: src/readelf.c:93 +#: src/readelf.c:101 msgid "Dump the uninterpreted contents of SECTION, by number or name" msgstr "" -#: src/readelf.c:95 +#: src/readelf.c:103 msgid "Print string contents of sections" msgstr "" -#: src/readelf.c:98 +#: src/readelf.c:106 msgid "Display the symbol index of an archive" msgstr "" -#: src/readelf.c:100 +#: src/readelf.c:108 msgid "Output control:" msgstr "" -#: src/readelf.c:102 +#: src/readelf.c:110 msgid "Do not find symbol names for addresses in DWARF data" msgstr "" -#: src/readelf.c:104 +#: src/readelf.c:112 +msgid "" +"Display just offsets instead of resolving values to addresses in DWARF data" +msgstr "" + +#: src/readelf.c:114 msgid "Ignored for compatibility (lines always wide)" msgstr "" -#: src/readelf.c:109 +#: src/readelf.c:119 msgid "Print information from ELF file in human-readable form." msgstr "" -#: src/readelf.c:410 +#: src/readelf.c:441 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "" -#: src/readelf.c:476 +#: src/readelf.c:520 src/readelf.c:631 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "" -#: src/readelf.c:488 +#: src/readelf.c:545 src/readelf.c:1099 src/readelf.c:1269 #, c-format -msgid "'%s' is not an archive, cannot print archive index" +msgid "cannot get section: %s" +msgstr "" + +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9169 +#: src/unstrip.c:352 src/unstrip.c:383 src/unstrip.c:432 src/unstrip.c:540 +#: src/unstrip.c:557 src/unstrip.c:593 src/unstrip.c:791 src/unstrip.c:1059 +#: src/unstrip.c:1250 src/unstrip.c:1310 src/unstrip.c:1431 src/unstrip.c:1484 +#: src/unstrip.c:1591 src/unstrip.c:1780 +#, c-format +msgid "cannot get section header: %s" +msgstr "" + +#: src/readelf.c:562 +#, c-format +msgid "cannot get section name" +msgstr "" + +#: src/readelf.c:571 src/readelf.c:5221 src/readelf.c:7414 src/readelf.c:7516 +#: src/readelf.c:7674 +#, c-format +msgid "cannot get %s content: %s" +msgstr "" + +#: src/readelf.c:587 +#, c-format +msgid "cannot create temp file '%s'" +msgstr "" + +#: src/readelf.c:596 +#, c-format +msgid "cannot write section data" msgstr "" -#: src/readelf.c:493 +#: src/readelf.c:602 src/readelf.c:619 src/readelf.c:648 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "" -#: src/readelf.c:585 +#: src/readelf.c:609 +#, c-format +msgid "error while rewinding file descriptor" +msgstr "" + +#: src/readelf.c:643 +#, c-format +msgid "'%s' is not an archive, cannot print archive index" +msgstr "" + +#: src/readelf.c:742 +#, c-format +msgid "No such section '%s' in '%s'" +msgstr "" + +#: src/readelf.c:769 #, c-format msgid "cannot stat input file" msgstr "" -#: src/readelf.c:587 +#: src/readelf.c:771 #, c-format msgid "input file is empty" msgstr "" -#: src/readelf.c:589 +#: src/readelf.c:773 #, c-format msgid "failed reading '%s': %s" msgstr "" -#: src/readelf.c:625 +#: src/readelf.c:814 #, c-format msgid "cannot read ELF header: %s" msgstr "" -#: src/readelf.c:633 +#: src/readelf.c:822 #, c-format msgid "cannot create EBL handle" msgstr "" -#: src/readelf.c:646 +#: src/readelf.c:835 #, c-format msgid "cannot determine number of program headers: %s" msgstr "" -#: src/readelf.c:732 +#: src/readelf.c:921 msgid "NONE (None)" msgstr "" -#: src/readelf.c:733 +#: src/readelf.c:922 msgid "REL (Relocatable file)" msgstr "" -#: src/readelf.c:734 +#: src/readelf.c:923 msgid "EXEC (Executable file)" msgstr "" -#: src/readelf.c:735 +#: src/readelf.c:924 msgid "DYN (Shared object file)" msgstr "" -#: src/readelf.c:736 +#: src/readelf.c:925 msgid "CORE (Core file)" msgstr "" -#: src/readelf.c:741 +#: src/readelf.c:930 #, c-format msgid "OS Specific: (%x)\n" msgstr "" -#: src/readelf.c:743 +#: src/readelf.c:932 #, c-format msgid "Processor Specific: (%x)\n" msgstr "" -#: src/readelf.c:753 +#: src/readelf.c:942 msgid "" "ELF Header:\n" " Magic: " msgstr "" -#: src/readelf.c:757 +#: src/readelf.c:946 #, c-format msgid "" "\n" " Class: %s\n" msgstr "" -#: src/readelf.c:762 +#: src/readelf.c:951 #, c-format msgid " Data: %s\n" msgstr "" -#: src/readelf.c:768 +#: src/readelf.c:957 #, c-format msgid " Ident Version: %hhd %s\n" msgstr "" -#: src/readelf.c:770 src/readelf.c:787 +#: src/readelf.c:959 src/readelf.c:976 msgid "(current)" msgstr "" -#: src/readelf.c:774 +#: src/readelf.c:963 #, c-format msgid " OS/ABI: %s\n" msgstr "" -#: src/readelf.c:777 +#: src/readelf.c:966 #, c-format msgid " ABI Version: %hhd\n" msgstr "" -#: src/readelf.c:780 +#: src/readelf.c:969 msgid " Type: " msgstr "" -#: src/readelf.c:783 +#: src/readelf.c:972 #, c-format msgid " Machine: %s\n" msgstr "" -#: src/readelf.c:785 +#: src/readelf.c:974 #, c-format msgid " Version: %d %s\n" msgstr "" -#: src/readelf.c:789 +#: src/readelf.c:978 #, c-format msgid " Entry point address: %#\n" msgstr "" -#: src/readelf.c:792 +#: src/readelf.c:981 #, c-format msgid " Start of program headers: % %s\n" msgstr "" -#: src/readelf.c:793 src/readelf.c:796 +#: src/readelf.c:982 src/readelf.c:985 msgid "(bytes into file)" msgstr "" -#: src/readelf.c:795 +#: src/readelf.c:984 #, c-format msgid " Start of section headers: % %s\n" msgstr "" -#: src/readelf.c:798 +#: src/readelf.c:987 #, c-format msgid " Flags: %s\n" msgstr "" -#: src/readelf.c:801 +#: src/readelf.c:990 #, c-format msgid " Size of this header: % %s\n" msgstr "" -#: src/readelf.c:802 src/readelf.c:805 src/readelf.c:822 +#: src/readelf.c:991 src/readelf.c:994 src/readelf.c:1011 msgid "(bytes)" msgstr "" -#: src/readelf.c:804 +#: src/readelf.c:993 #, c-format msgid " Size of program header entries: % %s\n" msgstr "" -#: src/readelf.c:807 +#: src/readelf.c:996 #, c-format msgid " Number of program headers entries: %" msgstr "" -#: src/readelf.c:814 +#: src/readelf.c:1003 #, c-format msgid " (% in [0].sh_info)" msgstr "" -#: src/readelf.c:817 src/readelf.c:834 src/readelf.c:848 +#: src/readelf.c:1006 src/readelf.c:1023 src/readelf.c:1037 msgid " ([0] not available)" msgstr "" -#: src/readelf.c:821 +#: src/readelf.c:1010 #, c-format msgid " Size of section header entries: % %s\n" msgstr "" -#: src/readelf.c:824 +#: src/readelf.c:1013 #, c-format msgid " Number of section headers entries: %" msgstr "" -#: src/readelf.c:831 +#: src/readelf.c:1020 #, c-format msgid " (% in [0].sh_size)" msgstr "" -#: src/readelf.c:844 +#: src/readelf.c:1033 #, c-format msgid " (% in [0].sh_link)" msgstr "" -#: src/readelf.c:852 +#: src/readelf.c:1041 #, c-format msgid "" " Section header string table index: XINDEX%s\n" "\n" msgstr "" -#: src/readelf.c:856 +#: src/readelf.c:1045 #, c-format msgid "" " Section header string table index: %\n" "\n" msgstr "" -#: src/readelf.c:888 +#: src/readelf.c:1077 #, c-format msgid "" "There are %d section headers, starting at offset %#:\n" "\n" msgstr "" -#: src/readelf.c:898 +#: src/readelf.c:1087 msgid "Section Headers:" msgstr "" -#: src/readelf.c:901 +#: src/readelf.c:1090 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" msgstr "" -#: src/readelf.c:903 +#: src/readelf.c:1092 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" msgstr "" -#: src/readelf.c:910 src/readelf.c:1063 -#, c-format -msgid "cannot get section: %s" -msgstr "" - -#: src/readelf.c:917 src/readelf.c:1071 src/readelf.c:8343 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 -#, c-format -msgid "cannot get section header: %s" -msgstr "" - -#: src/readelf.c:975 +#: src/readelf.c:1164 msgid "Program Headers:" msgstr "" -#: src/readelf.c:977 +#: src/readelf.c:1166 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" -#: src/readelf.c:980 +#: src/readelf.c:1169 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" msgstr "" -#: src/readelf.c:1020 +#: src/readelf.c:1226 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "" -#: src/readelf.c:1041 +#: src/readelf.c:1247 msgid "" "\n" " Section to Segment mapping:\n" " Segment Sections..." msgstr "" -#: src/readelf.c:1052 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1835 src/unstrip.c:1874 src/unstrip.c:1881 #, c-format msgid "cannot get program header: %s" msgstr "" -#: src/readelf.c:1193 +#: src/readelf.c:1401 #, c-format msgid "" "\n" @@ -4214,7 +4326,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1198 +#: src/readelf.c:1406 #, c-format msgid "" "\n" @@ -4225,15 +4337,21 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1206 +#: src/readelf.c:1414 msgid "" msgstr "" -#: src/readelf.c:1220 +#: src/readelf.c:1428 msgid "" msgstr "" -#: src/readelf.c:1371 +#: src/readelf.c:1585 src/readelf.c:2202 src/readelf.c:2460 src/readelf.c:2530 +#: src/readelf.c:2812 src/readelf.c:2885 src/readelf.c:4488 +#, c-format +msgid "invalid sh_link value in section %Zu" +msgstr "" + +#: src/readelf.c:1588 #, c-format msgid "" "\n" @@ -4246,43 +4364,43 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1383 +#: src/readelf.c:1598 msgid " Type Value\n" msgstr "" -#: src/readelf.c:1407 +#: src/readelf.c:1622 #, c-format msgid "Shared library: [%s]\n" msgstr "" -#: src/readelf.c:1412 +#: src/readelf.c:1627 #, c-format msgid "Library soname: [%s]\n" msgstr "" -#: src/readelf.c:1417 +#: src/readelf.c:1632 #, c-format msgid "Library rpath: [%s]\n" msgstr "" -#: src/readelf.c:1422 +#: src/readelf.c:1637 #, c-format msgid "Library runpath: [%s]\n" msgstr "" -#: src/readelf.c:1442 +#: src/readelf.c:1657 #, c-format msgid "% (bytes)\n" msgstr "" -#: src/readelf.c:1554 src/readelf.c:1740 +#: src/readelf.c:1770 src/readelf.c:1957 #, c-format msgid "" "\n" "Invalid symbol table at offset %#0\n" msgstr "" -#: src/readelf.c:1572 src/readelf.c:1757 +#: src/readelf.c:1788 src/readelf.c:1975 #, c-format msgid "" "\n" @@ -4295,7 +4413,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1587 +#: src/readelf.c:1803 src/readelf.c:1990 #, c-format msgid "" "\n" @@ -4306,29 +4424,29 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1597 +#: src/readelf.c:1813 msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:1599 +#: src/readelf.c:1815 msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:1652 src/readelf.c:1663 src/readelf.c:1676 src/readelf.c:1694 -#: src/readelf.c:1706 src/readelf.c:1825 src/readelf.c:1837 src/readelf.c:1851 -#: src/readelf.c:1870 src/readelf.c:1883 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 +#: src/readelf.c:1922 src/readelf.c:2056 src/readelf.c:2068 src/readelf.c:2082 +#: src/readelf.c:2101 src/readelf.c:2114 msgid "" msgstr "" -#: src/readelf.c:1769 +#: src/readelf.c:2000 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:1771 +#: src/readelf.c:2002 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:1972 +#: src/readelf.c:2210 #, c-format msgid "" "\n" @@ -4339,40 +4457,40 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1978 +#: src/readelf.c:2215 #, 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:1988 +#: src/readelf.c:2223 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:1990 +#: src/readelf.c:2225 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2010 +#: src/readelf.c:2245 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "" -#: src/readelf.c:2098 +#: src/readelf.c:2333 #, c-format msgid "bad dynamic symbol" msgstr "" -#: src/readelf.c:2180 +#: src/readelf.c:2415 msgid "none" msgstr "" -#: src/readelf.c:2197 +#: src/readelf.c:2432 msgid "| " msgstr "" -#: src/readelf.c:2222 +#: src/readelf.c:2463 #, c-format msgid "" "\n" @@ -4385,17 +4503,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2245 +#: src/readelf.c:2484 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr "" -#: src/readelf.c:2258 +#: src/readelf.c:2497 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr "" -#: src/readelf.c:2289 +#: src/readelf.c:2534 #, c-format msgid "" "\n" @@ -4408,17 +4526,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2319 +#: src/readelf.c:2562 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" -#: src/readelf.c:2334 +#: src/readelf.c:2577 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr "" -#: src/readelf.c:2566 +#: src/readelf.c:2816 #, c-format msgid "" "\n" @@ -4431,15 +4549,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2596 +#: src/readelf.c:2844 msgid " 0 *local* " msgstr "" -#: src/readelf.c:2601 +#: src/readelf.c:2849 msgid " 1 *global* " msgstr "" -#: src/readelf.c:2632 +#: src/readelf.c:2890 #, c-format msgid "" "\n" @@ -4454,41 +4572,41 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2656 +#: src/readelf.c:2912 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr "" -#: src/readelf.c:2658 +#: src/readelf.c:2914 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr "" -#: src/readelf.c:2665 +#: src/readelf.c:2921 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "" -#: src/readelf.c:2678 +#: src/readelf.c:2934 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" "\t\t\t unsuccessful lookup: %f\n" msgstr "" -#: src/readelf.c:2696 src/readelf.c:2738 src/readelf.c:2779 +#: src/readelf.c:2952 src/readelf.c:2994 src/readelf.c:3035 #, c-format msgid "cannot get data for section %d: %s" msgstr "" -#: src/readelf.c:2833 +#: src/readelf.c:3089 #, c-format msgid "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" msgstr "" -#: src/readelf.c:2907 +#: src/readelf.c:3164 #, c-format msgid "" "\n" @@ -4499,13 +4617,13 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2921 +#: src/readelf.c:3178 msgid "" " Library Time Stamp Checksum Version " "Flags" msgstr "" -#: src/readelf.c:2971 +#: src/readelf.c:3228 #, c-format msgid "" "\n" @@ -4513,135 +4631,140 @@ msgid "" "%#0:\n" msgstr "" -#: src/readelf.c:2987 +#: src/readelf.c:3244 msgid " Owner Size\n" msgstr "" -#: src/readelf.c:3013 +#: src/readelf.c:3270 #, c-format msgid " %-13s %4\n" msgstr "" -#: src/readelf.c:3045 +#: src/readelf.c:3302 #, c-format msgid " %-4u %12\n" msgstr "" -#: src/readelf.c:3050 +#: src/readelf.c:3307 #, c-format msgid " File: %11\n" msgstr "" -#: src/readelf.c:3085 +#: src/readelf.c:3342 #, c-format msgid " %s: %, %s\n" msgstr "" -#: src/readelf.c:3088 +#: src/readelf.c:3345 #, c-format msgid " %s: %\n" msgstr "" -#: src/readelf.c:3091 +#: src/readelf.c:3348 #, c-format msgid " %s: %s\n" msgstr "" -#: src/readelf.c:3098 +#: src/readelf.c:3355 #, c-format msgid " %u: %\n" msgstr "" -#: src/readelf.c:3101 +#: src/readelf.c:3358 #, c-format msgid " %u: %s\n" msgstr "" -#: src/readelf.c:3137 +#: src/readelf.c:3403 #, c-format msgid "%s+%# <%s+%#>" msgstr "" -#: src/readelf.c:3140 +#: src/readelf.c:3406 #, c-format msgid "%s+%#0* <%s+%#>" msgstr "" -#: src/readelf.c:3145 +#: src/readelf.c:3411 #, c-format msgid "%# <%s+%#>" msgstr "" -#: src/readelf.c:3148 +#: src/readelf.c:3414 #, c-format msgid "%#0* <%s+%#>" msgstr "" -#: src/readelf.c:3154 +#: src/readelf.c:3420 #, c-format msgid "%s+%# <%s>" msgstr "" -#: src/readelf.c:3157 +#: src/readelf.c:3423 #, c-format msgid "%s+%#0* <%s>" msgstr "" -#: src/readelf.c:3161 +#: src/readelf.c:3427 #, c-format msgid "%# <%s>" msgstr "" -#: src/readelf.c:3164 +#: src/readelf.c:3430 #, c-format msgid "%#0* <%s>" msgstr "" -#: src/readelf.c:3169 +#: src/readelf.c:3435 #, c-format msgid "%s+%#" msgstr "" -#: src/readelf.c:3172 +#: src/readelf.c:3438 #, c-format msgid "%s+%#0*" msgstr "" -#: src/readelf.c:3554 +#: src/readelf.c:3820 msgid "empty block" msgstr "" -#: src/readelf.c:3557 +#: src/readelf.c:3823 #, c-format msgid "%zu byte block:" msgstr "" -#: src/readelf.c:3934 +#: src/readelf.c:4217 #, c-format msgid "%*s[%4] %s \n" msgstr "" -#: src/readelf.c:3970 +#: src/readelf.c:4274 #, c-format msgid "%s %# used with different address sizes" msgstr "" -#: src/readelf.c:3977 +#: src/readelf.c:4281 #, c-format msgid "%s %# used with different offset sizes" msgstr "" -#: src/readelf.c:4057 +#: src/readelf.c:4288 +#, c-format +msgid "%s %# used with different base addresses" +msgstr "" + +#: src/readelf.c:4370 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4065 +#: src/readelf.c:4378 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr "" -#: src/readelf.c:4087 +#: src/readelf.c:4404 #, c-format msgid "" "\n" @@ -4649,37 +4772,37 @@ msgid "" " [ Code]\n" msgstr "" -#: src/readelf.c:4095 +#: src/readelf.c:4412 #, c-format msgid "" "\n" "Abbreviation section at offset %:\n" msgstr "" -#: src/readelf.c:4108 +#: src/readelf.c:4425 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr "" -#: src/readelf.c:4124 +#: src/readelf.c:4441 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr "" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "yes" msgstr "" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "no" msgstr "" -#: src/readelf.c:4162 +#: src/readelf.c:4478 src/readelf.c:4551 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "" -#: src/readelf.c:4167 +#: src/readelf.c:4493 #, c-format msgid "" "\n" @@ -4690,123 +4813,189 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:4198 +#: src/readelf.c:4524 #, c-format msgid " [%*zu] ???\n" msgstr "" -#: src/readelf.c:4200 +#: src/readelf.c:4526 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" -#: src/readelf.c:4219 +#: src/readelf.c:4556 src/readelf.c:4710 src/readelf.c:5231 src/readelf.c:6145 +#: src/readelf.c:6646 src/readelf.c:6766 src/readelf.c:6922 src/readelf.c:7345 #, c-format -msgid "cannot get .debug_ranges content: %s" +msgid "" +"\n" +"DWARF section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:4224 src/readelf.c:4728 src/readelf.c:5505 src/readelf.c:6006 -#: src/readelf.c:6121 src/readelf.c:6277 src/readelf.c:6699 +#: src/readelf.c:4569 src/readelf.c:6171 #, c-format msgid "" "\n" -"DWARF section [%2zu] '%s' at offset %#:\n" +"Table at offset %Zu:\n" msgstr "" -#: src/readelf.c:4248 src/readelf.c:6031 +#: src/readelf.c:4573 src/readelf.c:5255 src/readelf.c:6180 +#, c-format +msgid "invalid data in section [%zu] '%s'" +msgstr "" + +#: src/readelf.c:4589 +#, c-format +msgid "" +"\n" +" Length: %6\n" +msgstr "" + +#: src/readelf.c:4601 +#, c-format +msgid " DWARF version: %6\n" +msgstr "" + +#: src/readelf.c:4605 +#, c-format +msgid "unsupported aranges version" +msgstr "" + +#: src/readelf.c:4616 +#, c-format +msgid " CU offset: %6\n" +msgstr "" + +#: src/readelf.c:4622 +#, c-format +msgid " Address size: %6\n" +msgstr "" + +#: src/readelf.c:4626 +#, c-format +msgid "unsupported address size" +msgstr "" + +#: src/readelf.c:4631 +#, c-format +msgid "" +" Segment size: %6\n" +"\n" +msgstr "" + +#: src/readelf.c:4635 +#, c-format +msgid "unsupported segment size" +msgstr "" + +#: src/readelf.c:4675 +#, c-format +msgid " %s..%s (%)\n" +msgstr "" + +#: src/readelf.c:4678 +#, c-format +msgid " %s..%s\n" +msgstr "" + +#: src/readelf.c:4687 +#, c-format +msgid " %Zu padding bytes\n" +msgstr "" + +#: src/readelf.c:4705 +#, c-format +msgid "cannot get .debug_ranges content: %s" +msgstr "" + +#: src/readelf.c:4735 src/readelf.c:6673 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4270 src/readelf.c:6053 +#: src/readelf.c:4757 src/readelf.c:6695 #, c-format msgid " [%6tx] base address %s\n" msgstr "" -#: src/readelf.c:4276 src/readelf.c:6059 +#: src/readelf.c:4764 src/readelf.c:6702 #, c-format msgid " [%6tx] empty list\n" msgstr "" -#: src/readelf.c:4285 +#: src/readelf.c:4775 #, c-format msgid " [%6tx] %s..%s\n" msgstr "" -#: src/readelf.c:4287 +#: src/readelf.c:4777 #, c-format msgid " %s..%s\n" msgstr "" -#: src/readelf.c:4717 src/readelf.c:6768 src/readelf.c:6870 src/readelf.c:7028 +#: src/readelf.c:5210 #, c-format -msgid "cannot get %s content: %s" +msgid "cannot get ELF: %s" msgstr "" -#: src/readelf.c:4724 +#: src/readelf.c:5227 #, c-format msgid "" "\n" "Call frame information section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:4752 src/readelf.c:5540 -#, c-format -msgid "invalid data in section [%zu] '%s'" -msgstr "" - -#: src/readelf.c:4774 +#: src/readelf.c:5277 #, c-format msgid "" "\n" " [%6tx] Zero terminator\n" msgstr "" -#: src/readelf.c:4859 +#: src/readelf.c:5362 #, c-format msgid "invalid augmentation length" msgstr "" -#: src/readelf.c:4871 +#: src/readelf.c:5374 msgid "FDE address encoding: " msgstr "" -#: src/readelf.c:4877 +#: src/readelf.c:5380 msgid "LSDA pointer encoding: " msgstr "" -#: src/readelf.c:4975 +#: src/readelf.c:5491 #, c-format msgid " (offset: %#)" msgstr "" -#: src/readelf.c:4982 +#: src/readelf.c:5498 #, c-format msgid " (end offset: %#)" msgstr "" -#: src/readelf.c:5009 +#: src/readelf.c:5525 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr "" -#: src/readelf.c:5060 +#: src/readelf.c:5577 #, c-format msgid "cannot get attribute code: %s" msgstr "" -#: src/readelf.c:5069 +#: src/readelf.c:5586 #, c-format msgid "cannot get attribute form: %s" msgstr "" -#: src/readelf.c:5084 +#: src/readelf.c:5601 #, c-format msgid "cannot get attribute value: %s" msgstr "" -#: src/readelf.c:5342 +#: src/readelf.c:5894 #, c-format msgid "" "\n" @@ -4814,7 +5003,7 @@ msgid "" " [Offset]\n" msgstr "" -#: src/readelf.c:5374 +#: src/readelf.c:5926 #, c-format msgid "" " Type unit at offset %:\n" @@ -4823,7 +5012,7 @@ msgid "" " Type signature: %#, Type offset: %#\n" msgstr "" -#: src/readelf.c:5383 +#: src/readelf.c:5935 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -4831,44 +5020,45 @@ msgid "" "%, Offset size: %\n" msgstr "" -#: src/readelf.c:5409 +#: src/readelf.c:5960 #, c-format msgid "cannot get DIE at offset % in section '%s': %s" msgstr "" -#: src/readelf.c:5421 +#: src/readelf.c:5974 #, c-format msgid "cannot get DIE offset: %s" msgstr "" -#: src/readelf.c:5430 +#: src/readelf.c:5983 #, c-format msgid "cannot get tag of DIE at offset % in section '%s': %s" msgstr "" -#: src/readelf.c:5461 +#: src/readelf.c:6015 #, c-format msgid "cannot get next DIE: %s\n" msgstr "" -#: src/readelf.c:5469 +#: src/readelf.c:6023 #, c-format msgid "cannot get next DIE: %s" msgstr "" -#: src/readelf.c:5518 +#: src/readelf.c:6059 #, c-format -msgid "cannot get line data section data: %s" +msgid "" +"\n" +"DWARF section [%2zu] '%s' at offset %#:\n" +"\n" msgstr "" -#: src/readelf.c:5531 +#: src/readelf.c:6158 #, c-format -msgid "" -"\n" -"Table at offset %Zu:\n" +msgid "cannot get line data section data: %s" msgstr "" -#: src/readelf.c:5586 +#: src/readelf.c:6226 #, c-format msgid "" "\n" @@ -4885,238 +5075,238 @@ msgid "" "Opcodes:\n" msgstr "" -#: src/readelf.c:5607 +#: src/readelf.c:6247 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "" -#: src/readelf.c:5622 +#: src/readelf.c:6262 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:5630 +#: src/readelf.c:6270 msgid "" "\n" "Directory table:" msgstr "" -#: src/readelf.c:5646 +#: src/readelf.c:6286 msgid "" "\n" "File name table:\n" " Entry Dir Time Size Name" msgstr "" -#: src/readelf.c:5675 +#: src/readelf.c:6315 msgid "" "\n" "Line number statements:" msgstr "" -#: src/readelf.c:5751 +#: src/readelf.c:6391 #, c-format msgid " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" msgstr "" -#: src/readelf.c:5756 +#: src/readelf.c:6396 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr "" -#: src/readelf.c:5776 +#: src/readelf.c:6416 #, c-format msgid " extended opcode %u: " msgstr "" -#: src/readelf.c:5781 +#: src/readelf.c:6421 msgid " end of sequence" msgstr "" -#: src/readelf.c:5798 +#: src/readelf.c:6438 #, c-format msgid " set address to %s\n" msgstr "" -#: src/readelf.c:5819 +#: src/readelf.c:6459 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" -#: src/readelf.c:5832 +#: src/readelf.c:6472 #, c-format msgid " set discriminator to %u\n" msgstr "" -#: src/readelf.c:5837 +#: src/readelf.c:6477 msgid " unknown opcode" msgstr "" -#: src/readelf.c:5849 +#: src/readelf.c:6489 msgid " copy" msgstr "" -#: src/readelf.c:5860 +#: src/readelf.c:6500 #, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr "" -#: src/readelf.c:5864 +#: src/readelf.c:6504 #, c-format msgid " advance address by %u to %s\n" msgstr "" -#: src/readelf.c:5875 +#: src/readelf.c:6515 #, c-format msgid " advance line by constant %d to %\n" msgstr "" -#: src/readelf.c:5883 +#: src/readelf.c:6523 #, c-format msgid " set file to %\n" msgstr "" -#: src/readelf.c:5893 +#: src/readelf.c:6533 #, c-format msgid " set column to %\n" msgstr "" -#: src/readelf.c:5900 +#: src/readelf.c:6540 #, c-format msgid " set '%s' to %\n" msgstr "" -#: src/readelf.c:5906 +#: src/readelf.c:6546 msgid " set basic block flag" msgstr "" -#: src/readelf.c:5915 +#: src/readelf.c:6555 #, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr "" -#: src/readelf.c:5919 +#: src/readelf.c:6559 #, c-format msgid " advance address by constant %u to %s\n" msgstr "" -#: src/readelf.c:5937 +#: src/readelf.c:6577 #, c-format msgid " advance address by fixed value %u to %s\n" msgstr "" -#: src/readelf.c:5946 +#: src/readelf.c:6586 msgid " set prologue end flag" msgstr "" -#: src/readelf.c:5951 +#: src/readelf.c:6591 msgid " set epilogue begin flag" msgstr "" -#: src/readelf.c:5960 +#: src/readelf.c:6600 #, c-format msgid " set isa to %u\n" msgstr "" -#: src/readelf.c:5969 +#: src/readelf.c:6609 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:6001 +#: src/readelf.c:6641 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "" -#: src/readelf.c:6071 +#: src/readelf.c:6716 #, c-format msgid " [%6tx] %s..%s" msgstr "" -#: src/readelf.c:6073 +#: src/readelf.c:6718 #, c-format msgid " %s..%s" msgstr "" -#: src/readelf.c:6080 +#: src/readelf.c:6725 msgid " \n" msgstr "" -#: src/readelf.c:6132 src/readelf.c:6286 +#: src/readelf.c:6777 src/readelf.c:6931 #, c-format msgid "cannot get macro information section data: %s" msgstr "" -#: src/readelf.c:6211 +#: src/readelf.c:6856 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "" -#: src/readelf.c:6327 +#: src/readelf.c:6972 #, c-format msgid " Offset: 0x%\n" msgstr "" -#: src/readelf.c:6339 +#: src/readelf.c:6984 #, c-format msgid " Version: %\n" msgstr "" -#: src/readelf.c:6345 src/readelf.c:7055 +#: src/readelf.c:6990 src/readelf.c:7703 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:6352 +#: src/readelf.c:6997 #, c-format msgid " Flag: 0x%\n" msgstr "" -#: src/readelf.c:6355 +#: src/readelf.c:7000 #, c-format msgid " Offset length: %\n" msgstr "" -#: src/readelf.c:6363 +#: src/readelf.c:7008 #, c-format msgid " .debug_line offset: 0x%\n" msgstr "" -#: src/readelf.c:6375 +#: src/readelf.c:7021 #, c-format msgid " extension opcode table, % items:\n" msgstr "" -#: src/readelf.c:6382 +#: src/readelf.c:7028 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:6394 +#: src/readelf.c:7040 #, c-format msgid " % arguments:" msgstr "" -#: src/readelf.c:6422 +#: src/readelf.c:7068 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:6657 +#: src/readelf.c:7303 #, c-format msgid "vendor opcode not verified?" msgstr "" -#: src/readelf.c:6685 +#: src/readelf.c:7331 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" -#: src/readelf.c:6726 +#: src/readelf.c:7372 #, c-format msgid "" "\n" @@ -5124,47 +5314,47 @@ msgid "" " %*s String\n" msgstr "" -#: src/readelf.c:6740 +#: src/readelf.c:7386 #, c-format msgid " *** error while reading strings: %s\n" msgstr "" -#: src/readelf.c:6760 +#: src/readelf.c:7406 #, c-format msgid "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" msgstr "" -#: src/readelf.c:6862 +#: src/readelf.c:7508 #, c-format msgid "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" msgstr "" -#: src/readelf.c:6885 +#: src/readelf.c:7531 #, c-format msgid " LPStart encoding: %#x " msgstr "" -#: src/readelf.c:6897 +#: src/readelf.c:7543 #, c-format msgid " TType encoding: %#x " msgstr "" -#: src/readelf.c:6911 +#: src/readelf.c:7557 #, c-format msgid " Call site encoding: %#x " msgstr "" -#: src/readelf.c:6924 +#: src/readelf.c:7570 msgid "" "\n" " Call site table:" msgstr "" -#: src/readelf.c:6938 +#: src/readelf.c:7584 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5173,193 +5363,193 @@ msgid "" " Action: %u\n" msgstr "" -#: src/readelf.c:6998 +#: src/readelf.c:7644 #, c-format msgid "invalid TType encoding" msgstr "" -#: src/readelf.c:7019 +#: src/readelf.c:7665 #, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %# contains % bytes :\n" msgstr "" -#: src/readelf.c:7048 +#: src/readelf.c:7694 #, c-format msgid " Version: %\n" msgstr "" -#: src/readelf.c:7064 +#: src/readelf.c:7712 #, c-format msgid " CU offset: %#\n" msgstr "" -#: src/readelf.c:7071 +#: src/readelf.c:7719 #, c-format msgid " TU offset: %#\n" msgstr "" -#: src/readelf.c:7078 +#: src/readelf.c:7726 #, c-format msgid " address offset: %#\n" msgstr "" -#: src/readelf.c:7085 +#: src/readelf.c:7733 #, c-format msgid " symbol offset: %#\n" msgstr "" -#: src/readelf.c:7092 +#: src/readelf.c:7740 #, c-format msgid " constant offset: %#\n" msgstr "" -#: src/readelf.c:7099 +#: src/readelf.c:7747 #, c-format msgid "" "\n" " CU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:7121 +#: src/readelf.c:7769 #, c-format msgid "" "\n" " TU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:7147 +#: src/readelf.c:7795 #, c-format msgid "" "\n" " Address list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:7174 +#: src/readelf.c:7824 #, c-format msgid "" "\n" " Symbol table at offset %# contains %zu slots:\n" msgstr "" -#: src/readelf.c:7259 +#: src/readelf.c:7909 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "" -#: src/readelf.c:7409 src/readelf.c:8010 +#: src/readelf.c:8069 src/readelf.c:8675 src/readelf.c:8786 src/readelf.c:8844 #, c-format msgid "cannot convert core note data: %s" msgstr "" -#: src/readelf.c:7750 +#: src/readelf.c:8416 #, c-format msgid "" "\n" "%*s... ..." msgstr "" -#: src/readelf.c:8109 +#: src/readelf.c:8919 msgid " Owner Data size Type\n" msgstr "" -#: src/readelf.c:8127 +#: src/readelf.c:8937 #, c-format msgid " %-13.*s %9 %s\n" msgstr "" -#: src/readelf.c:8161 +#: src/readelf.c:8987 #, c-format msgid "cannot get content of note section: %s" msgstr "" -#: src/readelf.c:8188 +#: src/readelf.c:9014 #, c-format msgid "" "\n" "Note section [%2zu] '%s' of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:8211 +#: src/readelf.c:9037 #, c-format msgid "" "\n" "Note segment of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:8257 +#: src/readelf.c:9083 #, c-format msgid "" "\n" "Section [%Zu] '%s' has no data to dump.\n" msgstr "" -#: src/readelf.c:8263 src/readelf.c:8286 +#: src/readelf.c:9089 src/readelf.c:9112 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "" -#: src/readelf.c:8267 +#: src/readelf.c:9093 #, c-format msgid "" "\n" "Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:8280 +#: src/readelf.c:9106 #, c-format msgid "" "\n" "Section [%Zu] '%s' has no strings to dump.\n" msgstr "" -#: src/readelf.c:8290 +#: src/readelf.c:9116 #, c-format msgid "" "\n" "String section [%Zu] '%s' contains % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:8338 +#: src/readelf.c:9164 #, c-format msgid "" "\n" "section [%lu] does not exist" msgstr "" -#: src/readelf.c:8367 +#: src/readelf.c:9193 #, c-format msgid "" "\n" "section '%s' does not exist" msgstr "" -#: src/readelf.c:8424 +#: src/readelf.c:9250 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "" -#: src/readelf.c:8427 +#: src/readelf.c:9253 #, c-format msgid "" "\n" "Archive '%s' has no symbol index\n" msgstr "" -#: src/readelf.c:8431 +#: src/readelf.c:9257 #, c-format msgid "" "\n" "Index of archive '%s' has %Zu entries:\n" msgstr "" -#: src/readelf.c:8449 +#: src/readelf.c:9275 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "" -#: src/readelf.c:8454 +#: src/readelf.c:9280 #, c-format msgid "Archive member '%s' contains:\n" msgstr "" @@ -5421,12 +5611,12 @@ msgstr "" msgid "%s: file format not recognized" msgstr "" -#: src/size.c:438 src/size.c:581 +#: src/size.c:438 src/size.c:571 #, c-format msgid " (ex %s)" msgstr "" -#: src/size.c:606 +#: src/size.c:596 msgid "(TOTALS)\n" msgstr "" @@ -5464,27 +5654,27 @@ msgstr "" msgid "Print the strings of printable characters in files." msgstr "" -#: src/strings.c:260 src/strings.c:295 +#: src/strings.c:267 src/strings.c:302 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "" -#: src/strings.c:306 +#: src/strings.c:313 #, c-format msgid "invalid minimum length of matched string size" msgstr "" -#: src/strings.c:591 +#: src/strings.c:596 #, c-format msgid "lseek64 failed" msgstr "" -#: src/strings.c:608 src/strings.c:672 +#: src/strings.c:613 src/strings.c:677 #, c-format msgid "re-mmap failed" msgstr "" -#: src/strings.c:645 +#: src/strings.c:650 #, c-format msgid "mprotect failed" msgstr "" @@ -5552,7 +5742,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 "" @@ -5577,87 +5767,87 @@ msgstr "" msgid "%s: cannot use -o or -f when stripping archive" msgstr "" -#: src/strip.c:467 +#: src/strip.c:468 #, c-format msgid "cannot open EBL backend" msgstr "" -#: src/strip.c:517 src/strip.c:541 +#: src/strip.c:518 src/strip.c:542 #, c-format msgid "cannot create new file '%s': %s" msgstr "" -#: src/strip.c:601 +#: src/strip.c:608 #, c-format msgid "illformed file '%s'" msgstr "" -#: src/strip.c:905 src/strip.c:994 +#: src/strip.c:930 src/strip.c:1019 #, c-format msgid "while generating output file: %s" msgstr "" -#: src/strip.c:967 src/strip.c:1929 +#: src/strip.c:992 src/strip.c:1957 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "" -#: src/strip.c:981 +#: src/strip.c:1006 #, c-format msgid "while preparing output for '%s'" msgstr "" -#: src/strip.c:1032 src/strip.c:1088 +#: src/strip.c:1057 src/strip.c:1114 #, c-format msgid "while create section header section: %s" msgstr "" -#: src/strip.c:1038 +#: src/strip.c:1063 #, c-format msgid "cannot allocate section data: %s" msgstr "" -#: src/strip.c:1097 +#: src/strip.c:1123 #, c-format msgid "while create section header string table: %s" msgstr "" -#: src/strip.c:1724 +#: src/strip.c:1752 #, c-format msgid "bad relocation" msgstr "" -#: src/strip.c:1841 src/strip.c:1951 +#: src/strip.c:1869 src/strip.c:1979 #, c-format msgid "while writing '%s': %s" msgstr "" -#: src/strip.c:1852 +#: src/strip.c:1880 #, c-format msgid "while creating '%s'" msgstr "" -#: src/strip.c:1874 +#: src/strip.c:1902 #, c-format msgid "while computing checksum for debug information" msgstr "" -#: src/strip.c:1937 +#: src/strip.c:1965 #, c-format msgid "%s: error while reading the file: %s" msgstr "" -#: src/strip.c:1976 src/strip.c:1996 +#: src/strip.c:2004 src/strip.c:2024 #, c-format msgid "while writing '%s'" msgstr "" -#: src/strip.c:2030 src/strip.c:2037 +#: src/strip.c:2061 src/strip.c:2068 #, c-format msgid "error while finishing '%s': %s" msgstr "" -#: src/strip.c:2060 src/strip.c:2117 +#: src/strip.c:2091 src/strip.c:2148 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "" @@ -5694,265 +5884,288 @@ 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:263 src/unstrip.c:1828 #, c-format msgid "cannot create program headers: %s" msgstr "" -#: src/unstrip.c:262 +#: src/unstrip.c:269 #, c-format msgid "cannot copy program header: %s" msgstr "" -#: src/unstrip.c:272 +#: src/unstrip.c:279 #, c-format msgid "cannot copy section header: %s" msgstr "" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:282 src/unstrip.c:1509 #, c-format msgid "cannot get section data: %s" msgstr "" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:284 src/unstrip.c:1511 #, c-format msgid "cannot copy section data: %s" msgstr "" -#: src/unstrip.c:301 +#: src/unstrip.c:308 #, c-format msgid "cannot create directory '%s'" msgstr "" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:348 src/unstrip.c:765 src/unstrip.c:1543 #, 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:364 src/unstrip.c:582 src/unstrip.c:603 src/unstrip.c:615 +#: src/unstrip.c:1564 src/unstrip.c:1694 src/unstrip.c:1718 #, c-format msgid "cannot update symbol table: %s" msgstr "" -#: src/unstrip.c:367 +#: src/unstrip.c:374 #, c-format msgid "cannot update section header: %s" msgstr "" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:413 src/unstrip.c:424 #, c-format msgid "cannot update relocation: %s" msgstr "" -#: src/unstrip.c:504 +#: src/unstrip.c:511 #, c-format msgid "cannot get symbol version: %s" msgstr "" -#: src/unstrip.c:516 +#: src/unstrip.c:523 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:764 +#: src/unstrip.c:771 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:913 src/unstrip.c:1254 #, 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:954 src/unstrip.c:973 src/unstrip.c:1006 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:987 +#: src/unstrip.c:994 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1049 src/unstrip.c:1374 #, 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:1174 src/unstrip.c:1189 src/unstrip.c:1455 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1190 +#: src/unstrip.c:1198 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1225 src/unstrip.c:1229 #, 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:1233 src/unstrip.c:1237 src/unstrip.c:1470 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1232 +#: src/unstrip.c:1240 #, 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:1299 src/unstrip.c:1389 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1441 +#: src/unstrip.c:1449 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1543 +#: src/unstrip.c:1551 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "" -#: src/unstrip.c:1781 +#: src/unstrip.c:1789 #, c-format msgid "cannot read section data: %s" msgstr "" -#: src/unstrip.c:1802 +#: src/unstrip.c:1810 #, c-format msgid "cannot get ELF header: %s" msgstr "" -#: src/unstrip.c:1830 +#: src/unstrip.c:1838 #, c-format msgid "cannot update program header: %s" msgstr "" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1843 src/unstrip.c:1922 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:1883 +#: src/unstrip.c:1891 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:1886 +#: src/unstrip.c:1894 #, 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:1913 src/unstrip.c:1964 src/unstrip.c:1976 src/unstrip.c:2062 #, 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:1955 +msgid "WARNING: " +msgstr "" + +#: src/unstrip.c:1957 +msgid ", use --force" +msgstr "" + +#: src/unstrip.c:1980 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1983 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1986 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:1989 +msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:2019 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:1998 +#: src/unstrip.c:2023 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2013 +#: src/unstrip.c:2038 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2017 +#: src/unstrip.c:2042 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2030 +#: src/unstrip.c:2055 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2061 +#: src/unstrip.c:2086 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2194 +#: src/unstrip.c:2219 #, c-format msgid "no matching modules found" msgstr "" -#: src/unstrip.c:2203 +#: src/unstrip.c:2228 #, c-format msgid "matched more than one module" msgstr "" -#: src/unstrip.c:2250 +#: src/unstrip.c:2275 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2251 +#: src/unstrip.c:2276 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" diff --git a/po/en@boldquot.gmo b/po/en@boldquot.gmo index a1aa1b575a9e80306b8c8819d4f6ff6747d55cd3..5f177e7dda70c3b79db0d3cf019bde2ba195f275 100644 GIT binary patch delta 33290 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 delta 29648 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�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

gbd+DfpX?xIY+V7^%yw3j`g%wRKEGMNBh+8A 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 lies outside section '%s'" msgstr "offset %# lies outside section ‘%s’" -#: src/addr2line.c:469 +#: src/addr2line.c:563 #, c-format msgid "cannot find symbol '%s'" msgstr "cannot find symbol ‘%s’" -#: src/addr2line.c:474 +#: src/addr2line.c:568 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "offset %# lies outside contents of ‘%s’" @@ -1136,8 +1204,8 @@ msgstr "Invalid value ‘%s’ for --gaps parameter." #: src/elfcmp.c:722 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:175 src/strip.c:450 src/strip.c:487 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1911 +#: src/unstrip.c:1940 #, c-format msgid "cannot open '%s'" msgstr "cannot open ‘%s’" @@ -1191,159 +1259,159 @@ msgstr "" msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "Pedantic checking of ELF files compliance with gABI/psABI spec." -#: src/elflint.c:78 src/readelf.c:113 +#: src/elflint.c:78 src/readelf.c:123 msgid "FILE..." msgstr "FILE..." -#: src/elflint.c:151 src/readelf.c:271 +#: src/elflint.c:155 src/readelf.c:292 #, c-format msgid "cannot open input file" msgstr "cannot open input file" -#: src/elflint.c:158 +#: src/elflint.c:162 #, c-format msgid "cannot generate Elf descriptor: %s\n" msgstr "cannot generate Elf descriptor: %s\n" -#: src/elflint.c:177 +#: src/elflint.c:181 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "error while closing Elf descriptor: %s\n" -#: src/elflint.c:181 +#: src/elflint.c:185 msgid "No errors" msgstr "No errors" -#: src/elflint.c:215 src/readelf.c:434 +#: src/elflint.c:219 src/readelf.c:468 msgid "Missing file name.\n" msgstr "Missing file name.\n" -#: src/elflint.c:294 +#: src/elflint.c:298 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr " error while freeing sub-ELF descriptor: %s\n" -#: src/elflint.c:302 +#: src/elflint.c:306 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "Not an ELF file - it has the wrong magic bytes at the start\n" -#: src/elflint.c:363 +#: src/elflint.c:371 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d is no known class\n" -#: src/elflint.c:368 +#: src/elflint.c:376 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d is no known data encoding\n" -#: src/elflint.c:372 +#: src/elflint.c:380 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "unknown ELF header version number e_ident[%d] == %d\n" -#: src/elflint.c:378 +#: src/elflint.c:386 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "unsupported OS ABI e_ident[%d] == ‘%s’\n" -#: src/elflint.c:384 +#: src/elflint.c:392 #, c-format msgid "unsupport ABI version e_ident[%d] == %d\n" msgstr "unsupport ABI version e_ident[%d] == %d\n" -#: src/elflint.c:389 +#: src/elflint.c:397 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] is not zero\n" -#: src/elflint.c:394 +#: src/elflint.c:402 #, c-format msgid "unknown object file type %d\n" msgstr "unknown object file type %d\n" -#: src/elflint.c:401 +#: src/elflint.c:409 #, c-format msgid "unknown machine type %d\n" msgstr "unknown machine type %d\n" -#: src/elflint.c:405 +#: src/elflint.c:413 #, c-format msgid "unknown object file version\n" msgstr "unknown object file version\n" -#: src/elflint.c:411 +#: src/elflint.c:419 #, c-format msgid "invalid program header offset\n" msgstr "invalid program header offset\n" -#: src/elflint.c:413 +#: src/elflint.c:421 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "executables and DSOs cannot have zero program header offset\n" -#: src/elflint.c:417 +#: src/elflint.c:425 #, c-format msgid "invalid number of program header entries\n" msgstr "invalid number of program header entries\n" -#: src/elflint.c:425 +#: src/elflint.c:433 #, c-format msgid "invalid section header table offset\n" msgstr "invalid section header table offset\n" -#: src/elflint.c:428 +#: src/elflint.c:436 #, c-format msgid "section header table must be present\n" msgstr "section header table must be present\n" -#: src/elflint.c:442 +#: src/elflint.c:450 #, c-format msgid "invalid number of section header table entries\n" msgstr "invalid number of section header table entries\n" -#: src/elflint.c:459 +#: src/elflint.c:467 #, c-format msgid "invalid section header index\n" msgstr "invalid section header index\n" -#: src/elflint.c:473 +#: src/elflint.c:481 #, c-format msgid "invalid number of program header table entries\n" msgstr "invalid number of program header table entries\n" -#: src/elflint.c:482 +#: src/elflint.c:490 #, c-format msgid "invalid machine flags: %s\n" msgstr "invalid machine flags: %s\n" -#: src/elflint.c:489 src/elflint.c:506 +#: src/elflint.c:497 src/elflint.c:514 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "invalid ELF header size: %hd\n" -#: src/elflint.c:492 src/elflint.c:509 +#: src/elflint.c:500 src/elflint.c:517 #, c-format msgid "invalid program header size: %hd\n" msgstr "invalid program header size: %hd\n" -#: src/elflint.c:495 src/elflint.c:512 +#: src/elflint.c:503 src/elflint.c:520 #, c-format msgid "invalid program header position or size\n" msgstr "invalid program header position or size\n" -#: src/elflint.c:498 src/elflint.c:515 +#: src/elflint.c:506 src/elflint.c:523 #, c-format msgid "invalid section header size: %hd\n" msgstr "invalid section header size: %hd\n" -#: src/elflint.c:501 src/elflint.c:518 +#: src/elflint.c:509 src/elflint.c:526 #, c-format msgid "invalid section header position or size\n" msgstr "invalid section header position or size\n" -#: src/elflint.c:562 +#: src/elflint.c:570 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1352,7 +1420,7 @@ msgstr "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " "group\n" -#: src/elflint.c:566 +#: src/elflint.c:574 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" @@ -1360,14 +1428,14 @@ msgstr "" "section [%2d] '%s': section group [%2zu] ‘%s’ does not precede group " "member\n" -#: src/elflint.c:582 src/elflint.c:1426 src/elflint.c:1476 src/elflint.c:1581 -#: src/elflint.c:2166 src/elflint.c:2680 src/elflint.c:2841 src/elflint.c:2971 -#: src/elflint.c:3143 src/elflint.c:4045 +#: 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 "section [%2d] '%s': cannot get section data\n" -#: src/elflint.c:595 src/elflint.c:1588 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1376,7 +1444,7 @@ msgstr "" "section [%2d] '%s': referenced as string table for section [%2d] ‘%s’ " "but type is not SHT_STRTAB\n" -#: src/elflint.c:618 +#: src/elflint.c:626 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1385,38 +1453,38 @@ msgstr "" "section [%2d] '%s': symbol table cannot have more than one extended index " "section\n" -#: src/elflint.c:629 +#: src/elflint.c:638 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" -#: src/elflint.c:638 +#: src/elflint.c:647 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "section [%2d] '%s': cannot get symbol %d: %s\n" -#: src/elflint.c:643 src/elflint.c:646 src/elflint.c:649 src/elflint.c:652 -#: src/elflint.c:655 src/elflint.c:658 +#: src/elflint.c:652 src/elflint.c:655 src/elflint.c:658 src/elflint.c:661 +#: src/elflint.c:664 src/elflint.c:667 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "section [%2d] '%s': ‘%s’ in zeroth entry not zero\n" -#: src/elflint.c:661 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "section [%2d] '%s': XINDEX for zeroth entry not zero\n" -#: src/elflint.c:671 +#: src/elflint.c:680 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "section [%2d] '%s': cannot get symbol %zu: %s\n" -#: src/elflint.c:680 +#: src/elflint.c:689 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "section [%2d] '%s': symbol %zu: invalid name value\n" -#: src/elflint.c:694 +#: src/elflint.c:704 #, c-format msgid "" "section [%2d] '%s': symbol %zu: too large section index but no extended " @@ -1425,7 +1493,7 @@ msgstr "" "section [%2d] '%s': symbol %zu: too large section index but no extended " "section index section\n" -#: src/elflint.c:700 +#: src/elflint.c:710 #, c-format msgid "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " @@ -1434,51 +1502,51 @@ msgstr "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " "st_shndx (%)\n" -#: src/elflint.c:712 +#: src/elflint.c:722 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid section index\n" msgstr "section [%2d] '%s': symbol %zu: invalid section index\n" -#: src/elflint.c:720 +#: src/elflint.c:730 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown type\n" msgstr "section [%2d] '%s': symbol %zu: unknown type\n" -#: src/elflint.c:726 +#: src/elflint.c:736 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" msgstr "section [%2d] '%s': symbol %zu: unknown symbol binding\n" -#: src/elflint.c:731 +#: src/elflint.c:741 #, c-format msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" msgstr "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" -#: src/elflint.c:739 +#: src/elflint.c:749 #, c-format msgid "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" msgstr "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" -#: src/elflint.c:743 +#: src/elflint.c:753 #, c-format msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" msgstr "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" -#: src/elflint.c:747 +#: src/elflint.c:757 #, c-format msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" msgstr "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" -#: src/elflint.c:779 +#: src/elflint.c:804 #, c-format msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" msgstr "section [%2d] '%s': symbol %zu: st_value out of bounds\n" -#: src/elflint.c:785 src/elflint.c:810 src/elflint.c:853 +#: 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 " @@ -1487,7 +1555,7 @@ msgstr "" "section [%2d] '%s': symbol %zu does not fit completely in referenced section " "[%2d] ‘%s’\n" -#: src/elflint.c:794 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1496,7 +1564,7 @@ msgstr "" "section [%2d] '%s': symbol %zu: referenced section [%2d] ‘%s’ does not " "have SHF_TLS flag set\n" -#: src/elflint.c:804 src/elflint.c:846 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1505,14 +1573,14 @@ msgstr "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " "[%2d] ‘%s’\n" -#: src/elflint.c:831 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" msgstr "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" -#: src/elflint.c:839 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1521,7 +1589,7 @@ msgstr "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " "‘%s’\n" -#: src/elflint.c:866 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1530,7 +1598,7 @@ msgstr "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " "sh_info\n" -#: src/elflint.c:873 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1539,12 +1607,12 @@ msgstr "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " "sh_info\n" -#: src/elflint.c:880 +#: src/elflint.c:905 #, c-format msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" msgstr "section [%2d] '%s': symbol %zu: non-local section symbol\n" -#: src/elflint.c:930 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1553,7 +1621,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " "[%2d]\n" -#: src/elflint.c:937 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1562,7 +1630,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] ‘" "%s’\n" -#: src/elflint.c:953 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -1571,7 +1639,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " "match %s section address %#\n" -#: src/elflint.c:960 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -1580,7 +1648,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " "match %s section size %\n" -#: src/elflint.c:968 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1589,7 +1657,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " "section\n" -#: src/elflint.c:984 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -1598,7 +1666,7 @@ msgstr "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " "segment address %#\n" -#: src/elflint.c:991 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -1607,7 +1675,7 @@ msgstr "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " "segment size %\n" -#: src/elflint.c:1004 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1616,22 +1684,22 @@ msgstr "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" "default visibility\n" -#: src/elflint.c:1008 +#: src/elflint.c:1033 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" msgstr "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" -#: src/elflint.c:1053 +#: src/elflint.c:1082 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" -#: src/elflint.c:1062 src/elflint.c:1114 +#: 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 "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" -#: src/elflint.c:1087 src/elflint.c:1139 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1640,7 +1708,7 @@ msgstr "" "section [%2d] '%s': relative relocations after index %d as specified by " "DT_RELCOUNT\n" -#: src/elflint.c:1093 src/elflint.c:1145 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1649,47 +1717,47 @@ msgstr "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " "specified %d relative relocations\n" -#: src/elflint.c:1105 +#: src/elflint.c:1136 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" -#: src/elflint.c:1187 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "section [%2d] '%s': invalid destination section index\n" -#: src/elflint.c:1200 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "section [%2d] '%s': invalid destination section type\n" -#: src/elflint.c:1208 +#: src/elflint.c:1238 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "section [%2d] '%s': sh_info should be zero\n" -#: src/elflint.c:1215 +#: src/elflint.c:1245 #, c-format msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" msgstr "section [%2d] '%s': no relocations for merge-able sections possible\n" -#: src/elflint.c:1222 +#: src/elflint.c:1253 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" -#: src/elflint.c:1282 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "text relocation flag set but there is no read-only segment\n" -#: src/elflint.c:1309 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "section [%2d] '%s': relocation %zu: invalid type\n" -#: src/elflint.c:1317 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1698,26 +1766,26 @@ msgstr "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " "type\n" -#: src/elflint.c:1325 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "section [%2d] '%s': relocation %zu: invalid symbol index\n" -#: src/elflint.c:1343 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " "be used with %s\n" msgstr "" -"section [%2d] '%s': relocation %zu: only symbol ‘_GLOBAL_OFFSET_TABLE_" -"[0m’ can be used with %s\n" +"section [%2d] '%s': relocation %zu: only symbol " +"‘_GLOBAL_OFFSET_TABLE_’ can be used with %s\n" -#: src/elflint.c:1360 +#: src/elflint.c:1391 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "section [%2d] '%s': relocation %zu: offset out of bounds\n" -#: src/elflint.c:1375 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1726,7 +1794,7 @@ msgstr "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " "%s\n" -#: src/elflint.c:1396 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1735,64 +1803,64 @@ msgstr "" "section [%2d] '%s': relocation %zu: read-only section modified but text " "relocation flag not set\n" -#: src/elflint.c:1411 +#: src/elflint.c:1442 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "section [%2d] '%s': relocations are against loaded and unloaded data\n" -#: src/elflint.c:1450 src/elflint.c:1500 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "section [%2d] '%s': cannot get relocation %zu: %s\n" -#: src/elflint.c:1576 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "more than one dynamic section present\n" -#: src/elflint.c:1594 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" -#: src/elflint.c:1599 src/elflint.c:1882 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "section [%2d] '%s': sh_info not zero\n" -#: src/elflint.c:1609 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" -#: src/elflint.c:1617 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" -#: src/elflint.c:1624 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "section [%2d] '%s': entry %zu: unknown tag\n" -#: src/elflint.c:1635 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" -#: src/elflint.c:1645 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "section [%2d] '%s': entry %zu: level 2 tag %s used\n" -#: src/elflint.c:1663 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" msgstr "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" -#: src/elflint.c:1676 +#: src/elflint.c:1710 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -1801,14 +1869,14 @@ msgstr "" "section [%2d] '%s': entry %zu: pointer does not match address of section " "[%2d] ‘%s’ referenced by sh_link\n" -#: src/elflint.c:1719 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" -#: src/elflint.c:1734 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -1817,71 +1885,71 @@ msgstr "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " "[%2d] ‘%s’\n" -#: src/elflint.c:1754 src/elflint.c:1782 +#: src/elflint.c:1788 src/elflint.c:1816 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "section [%2d] '%s': contains %s entry but not %s\n" -#: src/elflint.c:1766 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "section [%2d] '%s': mandatory tag %s not present\n" -#: src/elflint.c:1775 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "section [%2d] '%s': no hash section present\n" -#: src/elflint.c:1790 src/elflint.c:1797 +#: 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 "section [%2d] '%s': not all of %s, %s, and %s are present\n" -#: src/elflint.c:1807 src/elflint.c:1811 +#: src/elflint.c:1841 src/elflint.c:1845 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" -#: src/elflint.c:1817 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" -#: src/elflint.c:1828 src/elflint.c:1832 src/elflint.c:1836 src/elflint.c:1840 +#: 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 "section [%2d] '%s': %s tag missing in prelinked executable\n" -#: src/elflint.c:1852 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" msgstr "" "section [%2d] '%s': only relocatable files can have extended section index\n" -#: src/elflint.c:1862 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" "section [%2d] '%s': extended section index section not for symbol table\n" -#: src/elflint.c:1867 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "cannot get data for symbol section\n" -#: src/elflint.c:1870 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "section [%2d] '%s': entry size does not match Elf32_Word\n" -#: src/elflint.c:1877 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "section [%2d] '%s': extended index table too small for symbol table\n" -#: src/elflint.c:1892 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -1890,75 +1958,75 @@ msgstr "" "section [%2d] '%s': extended section index in section [%2zu] ‘%s’ " "refers to same symbol table\n" -#: src/elflint.c:1903 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "symbol 0 should have zero extended section index\n" -#: src/elflint.c:1915 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "cannot get data for symbol %zu\n" -#: src/elflint.c:1920 +#: src/elflint.c:1962 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "extended section index is % but symbol index is not XINDEX\n" -#: src/elflint.c:1936 src/elflint.c:1977 +#: 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 "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" -#: src/elflint.c:1948 src/elflint.c:1989 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "section [%2d] '%s': chain array too large\n" -#: src/elflint.c:1957 src/elflint.c:1998 +#: src/elflint.c:2004 src/elflint.c:2055 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "section [%2d] '%s': hash bucket reference %zu out of bounds\n" -#: src/elflint.c:1963 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "section [%2d] '%s': hash chain reference %zu out of bounds\n" -#: src/elflint.c:2004 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "section [%2d] '%s': hash chain reference % out of bounds\n" -#: src/elflint.c:2019 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "section [%2d] '%s': bitmask size not power of 2: %u\n" -#: src/elflint.c:2030 +#: src/elflint.c:2092 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" msgstr "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" -#: src/elflint.c:2038 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "section [%2d] '%s': 2nd hash function shift too big: %u\n" -#: src/elflint.c:2070 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" msgstr "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" -#: src/elflint.c:2091 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -1967,51 +2035,51 @@ msgstr "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " "undefined\n" -#: src/elflint.c:2102 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" msgstr "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" -#: src/elflint.c:2133 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" -#: src/elflint.c:2138 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" msgstr "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" -#: src/elflint.c:2144 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "section [%2d] '%s': bitmask does not match names in the hash table\n" -#: src/elflint.c:2157 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "section [%2d] '%s': relocatable files cannot have hash tables\n" -#: src/elflint.c:2175 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "section [%2d] '%s': hash table not for dynamic symbol table\n" -#: src/elflint.c:2183 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "section [%2d] '%s': hash table entry size incorrect\n" -#: src/elflint.c:2188 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "section [%2d] '%s': not marked to be allocated\n" -#: src/elflint.c:2193 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2020,19 +2088,19 @@ msgstr "" "section [%2d] '%s': hash table has not even room for initial administrative " "entries\n" -#: src/elflint.c:2241 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" "sh_link in hash sections [%2zu] ‘%s’ and [%2zu] ‘%s’ not " "identical\n" -#: src/elflint.c:2319 src/elflint.c:2323 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "section [%2zu] '%s': reference to symbol index 0\n" -#: src/elflint.c:2330 +#: src/elflint.c:2392 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2041,7 +2109,7 @@ msgstr "" "symbol %d referenced in new hash table in [%2zu] ‘%s’ but not in old " "hash table in [%2zu] ‘%s’\n" -#: src/elflint.c:2342 +#: src/elflint.c:2404 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2050,100 +2118,100 @@ msgstr "" "symbol %d referenced in old hash table in [%2zu] ‘%s’ but not in new " "hash table in [%2zu] ‘%s’\n" -#: src/elflint.c:2358 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "section [%2d] '%s': nonzero sh_%s for NULL section\n" -#: src/elflint.c:2378 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" msgstr "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" -#: src/elflint.c:2389 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "section [%2d] '%s': cannot get symbol table: %s\n" -#: src/elflint.c:2394 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "section [%2d] '%s': section reference in sh_link is no symbol table\n" -#: src/elflint.c:2400 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "section [%2d] '%s': invalid symbol index in sh_info\n" -#: src/elflint.c:2405 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "section [%2d] '%s': sh_flags not zero\n" -#: src/elflint.c:2412 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "section [%2d] '%s': cannot get symbol for signature\n" -#: src/elflint.c:2417 +#: src/elflint.c:2479 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "section [%2d] '%s': signature symbol cannot be empty string\n" -#: src/elflint.c:2423 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "section [%2d] '%s': sh_flags not set correctly\n" -#: src/elflint.c:2429 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "section [%2d] '%s': cannot get data: %s\n" -#: src/elflint.c:2438 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" -#: src/elflint.c:2443 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "section [%2d] '%s': section group without flags word\n" -#: src/elflint.c:2449 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "section [%2d] '%s': section group without member\n" -#: src/elflint.c:2453 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "section [%2d] '%s': section group with only one member\n" -#: src/elflint.c:2464 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "section [%2d] '%s': unknown section group flags\n" -#: src/elflint.c:2476 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "section [%2d] '%s': section index %Zu out of range\n" -#: src/elflint.c:2485 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "section [%2d] '%s': cannot get section header for element %zu: %s\n" -#: src/elflint.c:2492 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "" "section [%2d] '%s': section group contains another group [%2d] ‘%s’\n" -#: src/elflint.c:2498 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " @@ -2152,12 +2220,12 @@ msgstr "" "section [%2d] '%s': element %Zu references section [%2d] ‘%s’ without " "SHF_GROUP flag set\n" -#: src/elflint.c:2505 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "section [%2d] ‘%s’ is contained in more than one section group\n" -#: src/elflint.c:2694 +#: src/elflint.c:2756 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2166,7 +2234,7 @@ msgstr "" "section [%2d] ‘%s’ refers in sh_link to section [%2d] ‘%s’ which " "is no dynamic symbol table\n" -#: src/elflint.c:2705 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2175,76 +2243,76 @@ msgstr "" "section [%2d] ‘%s’ has different number of entries than symbol table " "[%2d] ‘%s’\n" -#: src/elflint.c:2721 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "section [%2d] '%s': symbol %d: cannot read version data\n" -#: src/elflint.c:2737 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "section [%2d] '%s': symbol %d: local symbol with global scope\n" -#: src/elflint.c:2745 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "section [%2d] '%s': symbol %d: local symbol with version\n" -#: src/elflint.c:2759 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "section [%2d] '%s': symbol %d: invalid version index %d\n" -#: src/elflint.c:2764 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" -#: src/elflint.c:2774 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" -#: src/elflint.c:2826 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "more than one version reference section present\n" -#: src/elflint.c:2834 src/elflint.c:2963 +#: src/elflint.c:2897 src/elflint.c:3026 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "section [%2d] '%s': sh_link does not link to string table\n" -#: src/elflint.c:2857 src/elflint.c:3015 +#: src/elflint.c:2920 src/elflint.c:3078 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "section [%2d] '%s': entry %d has wrong version %d\n" -#: src/elflint.c:2863 src/elflint.c:3021 +#: src/elflint.c:2926 src/elflint.c:3084 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" -#: src/elflint.c:2871 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "section [%2d] '%s': entry %d has invalid file reference\n" -#: src/elflint.c:2879 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "section [%2d] '%s': entry %d references unknown dependency\n" -#: src/elflint.c:2891 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" -#: src/elflint.c:2898 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2253,7 +2321,7 @@ msgstr "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " "reference\n" -#: src/elflint.c:2905 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2262,7 +2330,7 @@ msgstr "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " "%#x, expected %#x\n" -#: src/elflint.c:2915 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2271,210 +2339,210 @@ msgstr "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " "name ‘%s’\n" -#: src/elflint.c:2926 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" msgstr "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" -#: src/elflint.c:2942 src/elflint.c:3100 +#: src/elflint.c:3005 src/elflint.c:3163 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "section [%2d] '%s': entry %d has invalid offset to next entry\n" -#: src/elflint.c:2955 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "more than one version definition section present\n" -#: src/elflint.c:3000 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "section [%2d] '%s': more than one BASE definition\n" -#: src/elflint.c:3004 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" -#: src/elflint.c:3010 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "section [%2d] '%s': entry %d has unknown flag\n" -#: src/elflint.c:3034 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "section [%2d] '%s': entry %d has invalid name reference\n" -#: src/elflint.c:3041 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" -#: src/elflint.c:3050 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "section [%2d] '%s': entry %d has duplicate version name ‘%s’\n" -#: src/elflint.c:3069 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" msgstr "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" -#: src/elflint.c:3084 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" -#: src/elflint.c:3106 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "section [%2d] '%s': no BASE definition\n" -#: src/elflint.c:3122 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "section [%2d] '%s': unknown parent version ‘%s’\n" -#: src/elflint.c:3135 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "section [%2d] '%s': empty object attributes section\n" -#: src/elflint.c:3156 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "section [%2d] '%s': unrecognized attribute format\n" -#: src/elflint.c:3172 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" -#: src/elflint.c:3181 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "section [%2d] '%s': offset %zu: invalid length in attribute section\n" -#: src/elflint.c:3193 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "section [%2d] '%s': offset %zu: unterminated vendor name string\n" -#: src/elflint.c:3210 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" -#: src/elflint.c:3219 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "section [%2d] '%s': offset %zu: truncated attribute section\n" -#: src/elflint.c:3228 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" -#: src/elflint.c:3241 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" -#: src/elflint.c:3252 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" -#: src/elflint.c:3270 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" -#: src/elflint.c:3281 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "section [%2d] '%s': offset %zu: unterminated string in attribute\n" -#: src/elflint.c:3294 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" -#: src/elflint.c:3298 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" msgstr "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" -#: src/elflint.c:3308 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "section [%2d] '%s': offset %zu: vendor ‘%s’ unknown\n" -#: src/elflint.c:3314 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" -#: src/elflint.c:3403 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "cannot get section header of zeroth section\n" -#: src/elflint.c:3407 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "zeroth section has nonzero name\n" -#: src/elflint.c:3409 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "zeroth section has nonzero type\n" -#: src/elflint.c:3411 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "zeroth section has nonzero flags\n" -#: src/elflint.c:3413 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "zeroth section has nonzero address\n" -#: src/elflint.c:3415 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "zeroth section has nonzero offset\n" -#: src/elflint.c:3417 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "zeroth section has nonzero align value\n" -#: src/elflint.c:3419 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "zeroth section has nonzero entry size value\n" -#: src/elflint.c:3422 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2483,7 +2551,7 @@ msgstr "" "zeroth section has nonzero size value while ELF header has nonzero shnum " "value\n" -#: src/elflint.c:3426 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2492,7 +2560,7 @@ msgstr "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in shstrndx\n" -#: src/elflint.c:3430 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2501,27 +2569,27 @@ msgstr "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in phnum\n" -#: src/elflint.c:3447 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "cannot get section header for section [%2zu] '%s': %s\n" -#: src/elflint.c:3456 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "section [%2zu]: invalid name\n" -#: src/elflint.c:3483 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "section [%2d] ‘%s’ has wrong type: expected %s, is %s\n" -#: src/elflint.c:3499 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "section [%2zu] ‘%s’ has wrong flags: expected %s, is %s\n" -#: src/elflint.c:3516 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -2529,12 +2597,12 @@ msgstr "" "section [%2zu] ‘%s’ has wrong flags: expected %s and possibly %s, is " "%s\n" -#: src/elflint.c:3534 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "section [%2zu] ‘%s’ present in object file\n" -#: src/elflint.c:3540 src/elflint.c:3572 +#: 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" @@ -2542,7 +2610,7 @@ msgstr "" "section [%2zu] ‘%s’ has SHF_ALLOC flag set but there is no loadable " "segment\n" -#: src/elflint.c:3545 src/elflint.c:3577 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -2551,7 +2619,7 @@ msgstr "" "section [%2zu] ‘%s’ has SHF_ALLOC flag not set but there are loadable " "segments\n" -#: src/elflint.c:3553 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -2559,22 +2627,22 @@ msgstr "" "section [%2zu] ‘%s’ is extension section index table in non-object " "file\n" -#: src/elflint.c:3596 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "section [%2zu] '%s': size not multiple of entry size\n" -#: src/elflint.c:3601 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "cannot get section header\n" -#: src/elflint.c:3611 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "section [%2zu] ‘%s’ has unsupported type %d\n" -#: src/elflint.c:3625 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" @@ -2582,48 +2650,48 @@ msgstr "" "section [%2zu] ‘%s’ contains invalid processor-specific flag(s) " "%#\n" -#: src/elflint.c:3632 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "section [%2zu] ‘%s’ contains unknown flag(s) %#\n" -#: src/elflint.c:3640 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "section [%2zu] '%s': thread-local data sections address not zero\n" -#: src/elflint.c:3648 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "section [%2zu] '%s': invalid section reference in link value\n" -#: src/elflint.c:3653 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "section [%2zu] '%s': invalid section reference in info value\n" -#: src/elflint.c:3660 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "section [%2zu] '%s': strings flag set without merge flag\n" -#: src/elflint.c:3665 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "section [%2zu] '%s': merge flag set but entry size is zero\n" -#: src/elflint.c:3683 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" "section [%2zu] ‘%s’ has unexpected type %d for an executable section\n" -#: src/elflint.c:3692 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "section [%2zu] ‘%s’ is both executable and writable\n" -#: src/elflint.c:3721 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -2632,7 +2700,7 @@ msgstr "" "section [%2zu] ‘%s’ not fully contained in segment of program header " "entry %d\n" -#: src/elflint.c:3729 +#: src/elflint.c:3792 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -2641,7 +2709,7 @@ msgstr "" "section [%2zu] ‘%s’ has type NOBITS but is read from the file in " "segment of program header entry %d\n" -#: src/elflint.c:3738 +#: src/elflint.c:3801 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -2650,24 +2718,24 @@ msgstr "" "section [%2zu] ‘%s’ has not type NOBITS but is not read from the file " "in segment of program header entry %d\n" -#: src/elflint.c:3749 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "section [%2zu] ‘%s’ is executable in nonexecutable segment %d\n" -#: src/elflint.c:3759 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "section [%2zu] ‘%s’ is writable in unwritable segment %d\n" -#: src/elflint.c:3769 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" msgstr "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" -#: src/elflint.c:3775 +#: src/elflint.c:3838 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -2676,36 +2744,36 @@ msgstr "" "section [%2zu] '%s': ELF header says this is the section header string table " "but type is not SHT_TYPE\n" -#: src/elflint.c:3783 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" -#: src/elflint.c:3834 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "more than one version symbol table present\n" -#: src/elflint.c:3857 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "INTERP program header entry but no .interp section\n" -#: src/elflint.c:3868 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" "loadable segment [%u] is executable but contains no executable sections\n" -#: src/elflint.c:3874 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "loadable segment [%u] is writable but contains no writable sections\n" -#: src/elflint.c:3885 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -2714,194 +2782,194 @@ msgstr "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " "exist\n" -#: src/elflint.c:3898 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "duplicate version index %d\n" -#: src/elflint.c:3912 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" -#: src/elflint.c:3961 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "phdr[%d]: unknown core file note type % at offset %\n" -#: src/elflint.c:3965 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" msgstr "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" -#: src/elflint.c:3988 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" msgstr "phdr[%d]: unknown object file note type % at offset %Zu\n" -#: src/elflint.c:3992 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" msgstr "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" -#: src/elflint.c:4009 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: no note entries defined for the type of file\n" -#: src/elflint.c:4028 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: cannot get content of note section: %s\n" -#: src/elflint.c:4031 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: extra % bytes after last note\n" -#: src/elflint.c:4052 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "section [%2d] '%s': no note entries defined for the type of file\n" -#: src/elflint.c:4059 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "section [%2d] '%s': cannot get content of note section\n" -#: src/elflint.c:4062 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "section [%2d] '%s': extra % bytes after last note\n" -#: src/elflint.c:4080 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" "only executables, shared objects, and core files can have program headers\n" -#: src/elflint.c:4095 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "cannot get program header entry %d: %s\n" -#: src/elflint.c:4104 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "program header entry %d: unknown program header entry type %#\n" -#: src/elflint.c:4115 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "more than one INTERP entry in program header\n" -#: src/elflint.c:4123 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "more than one TLS entry in program header\n" -#: src/elflint.c:4130 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "static executable cannot have dynamic sections\n" -#: src/elflint.c:4144 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "dynamic section reference in program header has wrong offset\n" -#: src/elflint.c:4147 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "dynamic section size mismatch in program and section header\n" -#: src/elflint.c:4157 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "more than one GNU_RELRO entry in program header\n" -#: src/elflint.c:4178 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "loadable segment GNU_RELRO applies to is not writable\n" -#: src/elflint.c:4181 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" -#: src/elflint.c:4189 src/elflint.c:4212 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "%s segment not contained in a loaded segment\n" -#: src/elflint.c:4218 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "program header offset in ELF header and PHDR entry do not match" -#: src/elflint.c:4242 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "call frame search table reference in program header has wrong offset\n" -#: src/elflint.c:4245 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "call frame search table size mismatch in program and section header\n" -#: src/elflint.c:4258 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" -#: src/elflint.c:4266 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "call frame search table must be allocated\n" -#: src/elflint.c:4269 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "section [%2zu] ‘%s’ must be allocated\n" -#: src/elflint.c:4273 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "call frame search table must not be writable\n" -#: src/elflint.c:4276 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "section [%2zu] ‘%s’ must not be writable\n" -#: src/elflint.c:4281 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "call frame search table must not be executable\n" -#: src/elflint.c:4284 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "section [%2zu] ‘%s’ must not be executable\n" -#: src/elflint.c:4295 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "program header entry %d: file size greater than memory size\n" -#: src/elflint.c:4302 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "program header entry %d: alignment not a power of 2\n" -#: src/elflint.c:4305 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -2910,7 +2978,7 @@ msgstr "" "program header entry %d: file offset and virtual address not module of " "alignment\n" -#: src/elflint.c:4318 +#: src/elflint.c:4381 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -2919,12 +2987,12 @@ msgstr "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " "program header entry" -#: src/elflint.c:4352 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "cannot read ELF header: %s\n" -#: src/elflint.c:4378 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "text relocation flag set but not needed\n" @@ -3441,7 +3509,8 @@ msgid "Warning: size of `%s' changed from % in %s to % in %s" msgstr "" "Warning: size of ‘%s’ changed from % in %s to % in %s" -#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:640 src/strip.c:562 +#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 +#: src/readelf.c:829 src/strip.c:563 #, c-format msgid "cannot determine number of sections: %s" msgstr "cannot determine number of sections: %s" @@ -3677,7 +3746,7 @@ msgstr "internal error: non-nobits section follows nobits section" msgid "cannot get header of 0th section: %s" msgstr "cannot get header of 0th section: %s" -#: src/ldgeneric.c:6930 src/unstrip.c:1810 +#: src/ldgeneric.c:6930 src/unstrip.c:1818 #, c-format msgid "cannot update ELF header: %s" msgstr "cannot update ELF header: %s" @@ -3843,7 +3912,7 @@ msgid "%s: INTERNAL ERROR %d (%s-%s): %s" msgstr "%s: INTERNAL ERROR %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:2124 +#: src/strip.c:2155 #, c-format msgid "while closing '%s'" msgstr "while closing ‘%s’" @@ -3886,17 +3955,17 @@ msgstr "%s%s%s: file format not recognized" msgid "cannot create search tree" msgstr "cannot create search tree" -#: src/nm.c:757 src/nm.c:1156 src/objdump.c:787 src/readelf.c:896 -#: src/readelf.c:1039 src/readelf.c:1187 src/readelf.c:1369 src/readelf.c:1569 -#: src/readelf.c:1755 src/readelf.c:1965 src/readelf.c:2219 src/readelf.c:2285 -#: src/readelf.c:2363 src/readelf.c:2861 src/readelf.c:2897 src/readelf.c:2959 -#: src/readelf.c:7270 src/readelf.c:8176 src/readelf.c:8323 src/readelf.c:8391 -#: src/size.c:417 src/size.c:491 src/strip.c:502 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 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:2196 src/readelf.c:2454 +#: src/readelf.c:2524 src/readelf.c:2606 src/readelf.c:3117 src/readelf.c:3153 +#: src/readelf.c:3216 src/readelf.c:7920 src/readelf.c:9002 src/readelf.c:9149 +#: src/readelf.c:9217 src/size.c:417 src/size.c:487 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "cannot get section header string table index" -#: src/nm.c:782 +#: src/nm.c:784 #, c-format msgid "" "\n" @@ -3909,7 +3978,7 @@ msgstr "" "Symbols from %s:\n" "\n" -#: src/nm.c:785 +#: src/nm.c:787 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3918,22 +3987,22 @@ msgstr "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" "\n" -#: src/nm.c:1166 +#: src/nm.c:1173 #, c-format msgid "%s: entry size in section `%s' is not what we expect" msgstr "%s: entry size in section ‘%s’ is not what we expect" -#: src/nm.c:1170 +#: src/nm.c:1177 #, c-format msgid "%s: size of section `%s' is not multiple of entry size" msgstr "%s: size of section ‘%s’ is not multiple of entry size" -#: src/nm.c:1428 +#: src/nm.c:1435 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Invalid operation" -#: src/nm.c:1485 +#: src/nm.c:1492 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: no symbols" @@ -3966,7 +4035,7 @@ msgstr "Only display information for section NAME." msgid "Show information from FILEs (a.out by default)." msgstr "Show information from FILEs (a.out by default)." -#: src/objdump.c:236 src/readelf.c:439 +#: src/objdump.c:236 src/readelf.c:473 msgid "No operation specified.\n" msgstr "No operation specified.\n" @@ -3975,11 +4044,11 @@ msgstr "No operation specified.\n" msgid "while close `%s'" msgstr "while close ‘%s’" -#: src/objdump.c:379 src/readelf.c:1664 src/readelf.c:1838 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2069 msgid "INVALID SYMBOL" msgstr "INVALID SYMBOL" -#: src/objdump.c:394 src/readelf.c:1695 src/readelf.c:1871 +#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2102 msgid "INVALID SECTION" msgstr "INVALID SECTION" @@ -4036,181 +4105,242 @@ msgstr "‘%s’ is no archive" msgid "error while freeing sub-ELF descriptor: %s" msgstr "error while freeing sub-ELF descriptor: %s" -#: src/readelf.c:67 +#: src/readelf.c:71 +msgid "ELF input selection:" +msgstr "ELF input selection:" + +#: src/readelf.c:73 +msgid "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" +msgstr "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" + +#: src/readelf.c:75 msgid "ELF output selection:" msgstr "ELF output selection:" -#: src/readelf.c:69 +#: src/readelf.c:77 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "All these plus -p .strtab -p .dynstr -p .comment" -#: src/readelf.c:70 +#: src/readelf.c:78 msgid "Display the dynamic segment" msgstr "Display the dynamic segment" -#: src/readelf.c:71 +#: src/readelf.c:79 msgid "Display the ELF file header" msgstr "Display the ELF file header" -#: src/readelf.c:73 +#: src/readelf.c:81 msgid "Display histogram of bucket list lengths" msgstr "Display histogram of bucket list lengths" -#: src/readelf.c:74 +#: src/readelf.c:82 msgid "Display the program headers" msgstr "Display the program headers" -#: src/readelf.c:76 +#: src/readelf.c:84 msgid "Display relocations" msgstr "Display relocations" -#: src/readelf.c:77 +#: src/readelf.c:85 msgid "Display the sections' headers" msgstr "Display the sections' headers" -#: src/readelf.c:79 +#: src/readelf.c:87 msgid "Display the symbol table" msgstr "Display the symbol table" -#: src/readelf.c:80 +#: src/readelf.c:88 msgid "Display versioning information" msgstr "Display versioning information" -#: src/readelf.c:81 +#: src/readelf.c:89 msgid "Display the ELF notes" msgstr "Display the ELF notes" -#: src/readelf.c:83 +#: src/readelf.c:91 msgid "Display architecture specific information, if any" msgstr "Display architecture specific information, if any" -#: src/readelf.c:85 +#: src/readelf.c:93 msgid "Display sections for exception handling" msgstr "Display sections for exception handling" -#: src/readelf.c:87 +#: src/readelf.c:95 msgid "Additional output selection:" msgstr "Additional output selection:" -#: src/readelf.c:89 +#: src/readelf.c:97 msgid "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" msgstr "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" -#: src/readelf.c:93 +#: src/readelf.c:101 msgid "Dump the uninterpreted contents of SECTION, by number or name" msgstr "Dump the uninterpreted contents of SECTION, by number or name" -#: src/readelf.c:95 +#: src/readelf.c:103 msgid "Print string contents of sections" msgstr "Print string contents of sections" -#: src/readelf.c:98 +#: src/readelf.c:106 msgid "Display the symbol index of an archive" msgstr "Display the symbol index of an archive" -#: src/readelf.c:100 +#: src/readelf.c:108 msgid "Output control:" msgstr "Output control:" -#: src/readelf.c:102 +#: src/readelf.c:110 msgid "Do not find symbol names for addresses in DWARF data" msgstr "Do not find symbol names for addresses in DWARF data" -#: src/readelf.c:104 +#: src/readelf.c:112 +msgid "" +"Display just offsets instead of resolving values to addresses in DWARF data" +msgstr "" +"Display just offsets instead of resolving values to addresses in DWARF data" + +#: src/readelf.c:114 msgid "Ignored for compatibility (lines always wide)" msgstr "Ignored for compatibility (lines always wide)" -#: src/readelf.c:109 +#: src/readelf.c:119 msgid "Print information from ELF file in human-readable form." msgstr "Print information from ELF file in human-readable form." -#: src/readelf.c:410 +#: src/readelf.c:441 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "Unknown DWARF debug section ‘%s’.\n" -#: src/readelf.c:476 +#: src/readelf.c:520 src/readelf.c:631 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "cannot generate Elf descriptor: %s" -#: src/readelf.c:488 +#: src/readelf.c:545 src/readelf.c:1099 src/readelf.c:1269 #, c-format -msgid "'%s' is not an archive, cannot print archive index" -msgstr "‘%s’ is not an archive, cannot print archive index" +msgid "cannot get section: %s" +msgstr "cannot get section: %s" + +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9169 +#: src/unstrip.c:352 src/unstrip.c:383 src/unstrip.c:432 src/unstrip.c:540 +#: src/unstrip.c:557 src/unstrip.c:593 src/unstrip.c:791 src/unstrip.c:1059 +#: src/unstrip.c:1250 src/unstrip.c:1310 src/unstrip.c:1431 src/unstrip.c:1484 +#: src/unstrip.c:1591 src/unstrip.c:1780 +#, c-format +msgid "cannot get section header: %s" +msgstr "cannot get section header: %s" -#: src/readelf.c:493 +#: src/readelf.c:562 +#, c-format +msgid "cannot get section name" +msgstr "cannot get section name" + +#: src/readelf.c:571 src/readelf.c:5221 src/readelf.c:7414 src/readelf.c:7516 +#: src/readelf.c:7674 +#, c-format +msgid "cannot get %s content: %s" +msgstr "cannot get %s content: %s" + +#: src/readelf.c:587 +#, c-format +msgid "cannot create temp file '%s'" +msgstr "cannot create temp file ‘%s’" + +#: src/readelf.c:596 +#, c-format +msgid "cannot write section data" +msgstr "cannot write section data" + +#: src/readelf.c:602 src/readelf.c:619 src/readelf.c:648 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "error while closing Elf descriptor: %s" -#: src/readelf.c:585 +#: src/readelf.c:609 +#, c-format +msgid "error while rewinding file descriptor" +msgstr "error while rewinding file descriptor" + +#: src/readelf.c:643 +#, c-format +msgid "'%s' is not an archive, cannot print archive index" +msgstr "‘%s’ is not an archive, cannot print archive index" + +#: src/readelf.c:742 +#, c-format +msgid "No such section '%s' in '%s'" +msgstr "No such section ‘%s’ in ‘%s’" + +#: src/readelf.c:769 #, c-format msgid "cannot stat input file" msgstr "cannot stat input file" -#: src/readelf.c:587 +#: src/readelf.c:771 #, c-format msgid "input file is empty" msgstr "input file is empty" -#: src/readelf.c:589 +#: src/readelf.c:773 #, c-format msgid "failed reading '%s': %s" msgstr "failed reading '%s': %s" -#: src/readelf.c:625 +#: src/readelf.c:814 #, c-format msgid "cannot read ELF header: %s" msgstr "cannot read ELF header: %s" -#: src/readelf.c:633 +#: src/readelf.c:822 #, c-format msgid "cannot create EBL handle" msgstr "cannot create EBL handle" -#: src/readelf.c:646 +#: src/readelf.c:835 #, c-format msgid "cannot determine number of program headers: %s" msgstr "cannot determine number of program headers: %s" -#: src/readelf.c:732 +#: src/readelf.c:921 msgid "NONE (None)" msgstr "NONE (None)" -#: src/readelf.c:733 +#: src/readelf.c:922 msgid "REL (Relocatable file)" msgstr "REL (Relocatable file)" -#: src/readelf.c:734 +#: src/readelf.c:923 msgid "EXEC (Executable file)" msgstr "EXEC (Executable file)" -#: src/readelf.c:735 +#: src/readelf.c:924 msgid "DYN (Shared object file)" msgstr "DYN (Shared object file)" -#: src/readelf.c:736 +#: src/readelf.c:925 msgid "CORE (Core file)" msgstr "CORE (Core file)" -#: src/readelf.c:741 +#: src/readelf.c:930 #, c-format msgid "OS Specific: (%x)\n" msgstr "OS Specific: (%x)\n" -#: src/readelf.c:743 +#: src/readelf.c:932 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Processor Specific: (%x)\n" -#: src/readelf.c:753 +#: src/readelf.c:942 msgid "" "ELF Header:\n" " Magic: " @@ -4218,7 +4348,7 @@ msgstr "" "ELF Header:\n" " Magic: " -#: src/readelf.c:757 +#: src/readelf.c:946 #, c-format msgid "" "\n" @@ -4227,117 +4357,117 @@ msgstr "" "\n" " Class: %s\n" -#: src/readelf.c:762 +#: src/readelf.c:951 #, c-format msgid " Data: %s\n" msgstr " Data: %s\n" -#: src/readelf.c:768 +#: src/readelf.c:957 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Ident Version: %hhd %s\n" -#: src/readelf.c:770 src/readelf.c:787 +#: src/readelf.c:959 src/readelf.c:976 msgid "(current)" msgstr "(current)" -#: src/readelf.c:774 +#: src/readelf.c:963 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:777 +#: src/readelf.c:966 #, c-format msgid " ABI Version: %hhd\n" msgstr " ABI Version: %hhd\n" -#: src/readelf.c:780 +#: src/readelf.c:969 msgid " Type: " msgstr " Type: " -#: src/readelf.c:783 +#: src/readelf.c:972 #, c-format msgid " Machine: %s\n" msgstr " Machine: %s\n" -#: src/readelf.c:785 +#: src/readelf.c:974 #, c-format msgid " Version: %d %s\n" msgstr " Version: %d %s\n" -#: src/readelf.c:789 +#: src/readelf.c:978 #, c-format msgid " Entry point address: %#\n" msgstr " Entry point address: %#\n" -#: src/readelf.c:792 +#: src/readelf.c:981 #, c-format msgid " Start of program headers: % %s\n" msgstr " Start of program headers: % %s\n" -#: src/readelf.c:793 src/readelf.c:796 +#: src/readelf.c:982 src/readelf.c:985 msgid "(bytes into file)" msgstr "(bytes into file)" -#: src/readelf.c:795 +#: src/readelf.c:984 #, c-format msgid " Start of section headers: % %s\n" msgstr " Start of section headers: % %s\n" -#: src/readelf.c:798 +#: src/readelf.c:987 #, c-format msgid " Flags: %s\n" msgstr " Flags: %s\n" -#: src/readelf.c:801 +#: src/readelf.c:990 #, c-format msgid " Size of this header: % %s\n" msgstr " Size of this header: % %s\n" -#: src/readelf.c:802 src/readelf.c:805 src/readelf.c:822 +#: src/readelf.c:991 src/readelf.c:994 src/readelf.c:1011 msgid "(bytes)" msgstr "(bytes)" -#: src/readelf.c:804 +#: src/readelf.c:993 #, c-format msgid " Size of program header entries: % %s\n" msgstr " Size of program header entries: % %s\n" -#: src/readelf.c:807 +#: src/readelf.c:996 #, c-format msgid " Number of program headers entries: %" msgstr " Number of program headers entries: %" -#: src/readelf.c:814 +#: src/readelf.c:1003 #, c-format msgid " (% in [0].sh_info)" msgstr " (% in [0].sh_info)" -#: src/readelf.c:817 src/readelf.c:834 src/readelf.c:848 +#: src/readelf.c:1006 src/readelf.c:1023 src/readelf.c:1037 msgid " ([0] not available)" msgstr " ([0] not available)" -#: src/readelf.c:821 +#: src/readelf.c:1010 #, c-format msgid " Size of section header entries: % %s\n" msgstr " Size of section header entries: % %s\n" -#: src/readelf.c:824 +#: src/readelf.c:1013 #, c-format msgid " Number of section headers entries: %" msgstr " Number of section headers entries: %" -#: src/readelf.c:831 +#: src/readelf.c:1020 #, c-format msgid " (% in [0].sh_size)" msgstr " (% in [0].sh_size)" -#: src/readelf.c:844 +#: src/readelf.c:1033 #, c-format msgid " (% in [0].sh_link)" msgstr " (% in [0].sh_link)" -#: src/readelf.c:852 +#: src/readelf.c:1041 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4346,7 +4476,7 @@ msgstr "" " Section header string table index: XINDEX%s\n" "\n" -#: src/readelf.c:856 +#: src/readelf.c:1045 #, c-format msgid "" " Section header string table index: %\n" @@ -4355,7 +4485,7 @@ msgstr "" " Section header string table index: %\n" "\n" -#: src/readelf.c:888 +#: src/readelf.c:1077 #, c-format msgid "" "There are %d section headers, starting at offset %#:\n" @@ -4364,11 +4494,11 @@ msgstr "" "There are %d section headers, starting at offset %#:\n" "\n" -#: src/readelf.c:898 +#: src/readelf.c:1087 msgid "Section Headers:" msgstr "Section Headers:" -#: src/readelf.c:901 +#: src/readelf.c:1090 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4376,7 +4506,7 @@ msgstr "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" -#: src/readelf.c:903 +#: src/readelf.c:1092 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4384,31 +4514,17 @@ msgstr "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" -#: src/readelf.c:910 src/readelf.c:1063 -#, c-format -msgid "cannot get section: %s" -msgstr "cannot get section: %s" - -#: src/readelf.c:917 src/readelf.c:1071 src/readelf.c:8343 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 -#, c-format -msgid "cannot get section header: %s" -msgstr "cannot get section header: %s" - -#: src/readelf.c:975 +#: src/readelf.c:1164 msgid "Program Headers:" msgstr "Program Headers:" -#: src/readelf.c:977 +#: src/readelf.c:1166 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" -#: src/readelf.c:980 +#: src/readelf.c:1169 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4416,12 +4532,12 @@ msgstr "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" -#: src/readelf.c:1020 +#: src/readelf.c:1226 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Requesting program interpreter: %s]\n" -#: src/readelf.c:1041 +#: src/readelf.c:1247 msgid "" "\n" " Section to Segment mapping:\n" @@ -4431,12 +4547,12 @@ msgstr "" " Section to Segment mapping:\n" " Segment Sections..." -#: src/readelf.c:1052 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1835 src/unstrip.c:1874 src/unstrip.c:1881 #, c-format msgid "cannot get program header: %s" msgstr "cannot get program header: %s" -#: src/readelf.c:1193 +#: src/readelf.c:1401 #, c-format msgid "" "\n" @@ -4453,7 +4569,7 @@ msgstr[1] "" "COMDAT section group [%2zu] ‘%s’ with signature ‘%s’ contains " "%zu entries:\n" -#: src/readelf.c:1198 +#: src/readelf.c:1406 #, c-format msgid "" "\n" @@ -4470,15 +4586,21 @@ msgstr[1] "" "Section group [%2zu] ‘%s’ with signature ‘%s’ contains %zu " "entries:\n" -#: src/readelf.c:1206 +#: src/readelf.c:1414 msgid "" msgstr "" -#: src/readelf.c:1220 +#: src/readelf.c:1428 msgid "" msgstr "" -#: src/readelf.c:1371 +#: src/readelf.c:1585 src/readelf.c:2202 src/readelf.c:2460 src/readelf.c:2530 +#: src/readelf.c:2812 src/readelf.c:2885 src/readelf.c:4488 +#, c-format +msgid "invalid sh_link value in section %Zu" +msgstr "invalid sh_link value in section %Zu" + +#: src/readelf.c:1588 #, c-format msgid "" "\n" @@ -4491,44 +4613,44 @@ msgid_plural "" msgstr[0] "" "\n" "Dynamic segment contains %lu entry:\n" -" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s" -"[0m’\n" +" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘" +"%s’\n" msgstr[1] "" "\n" "Dynamic segment contains %lu entries:\n" -" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s" -"[0m’\n" +" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘" +"%s’\n" -#: src/readelf.c:1383 +#: src/readelf.c:1598 msgid " Type Value\n" msgstr " Type Value\n" -#: src/readelf.c:1407 +#: src/readelf.c:1622 #, c-format msgid "Shared library: [%s]\n" msgstr "Shared library: [%s]\n" -#: src/readelf.c:1412 +#: src/readelf.c:1627 #, c-format msgid "Library soname: [%s]\n" msgstr "Library soname: [%s]\n" -#: src/readelf.c:1417 +#: src/readelf.c:1632 #, c-format msgid "Library rpath: [%s]\n" msgstr "Library rpath: [%s]\n" -#: src/readelf.c:1422 +#: src/readelf.c:1637 #, c-format msgid "Library runpath: [%s]\n" msgstr "Library runpath: [%s]\n" -#: src/readelf.c:1442 +#: src/readelf.c:1657 #, c-format msgid "% (bytes)\n" msgstr "% (bytes)\n" -#: src/readelf.c:1554 src/readelf.c:1740 +#: src/readelf.c:1770 src/readelf.c:1957 #, c-format msgid "" "\n" @@ -4537,7 +4659,7 @@ msgstr "" "\n" "Invalid symbol table at offset %#0\n" -#: src/readelf.c:1572 src/readelf.c:1757 +#: src/readelf.c:1788 src/readelf.c:1975 #, c-format msgid "" "\n" @@ -4556,7 +4678,7 @@ msgstr[1] "" "Relocation section [%2zu] ‘%s’ for section [%2u] ‘%s’ at offset " "%#0 contains %d entries:\n" -#: src/readelf.c:1587 +#: src/readelf.c:1803 src/readelf.c:1990 #, c-format msgid "" "\n" @@ -4573,30 +4695,30 @@ msgstr[1] "" "Relocation section [%2u] ‘%s’ at offset %#0 contains %d " "entries:\n" -#: src/readelf.c:1597 +#: src/readelf.c:1813 msgid " Offset Type Value Name\n" msgstr " Offset Type Value Name\n" -#: src/readelf.c:1599 +#: src/readelf.c:1815 msgid " Offset Type Value Name\n" msgstr " Offset Type Value Name\n" -#: src/readelf.c:1652 src/readelf.c:1663 src/readelf.c:1676 src/readelf.c:1694 -#: src/readelf.c:1706 src/readelf.c:1825 src/readelf.c:1837 src/readelf.c:1851 -#: src/readelf.c:1870 src/readelf.c:1883 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 +#: src/readelf.c:1922 src/readelf.c:2056 src/readelf.c:2068 src/readelf.c:2082 +#: src/readelf.c:2101 src/readelf.c:2114 msgid "" msgstr "" -#: src/readelf.c:1769 +#: src/readelf.c:2000 msgid " Offset Type Value Addend Name\n" msgstr " Offset Type Value Addend Name\n" -#: src/readelf.c:1771 +#: src/readelf.c:2002 msgid " Offset Type Value Addend Name\n" msgstr "" " Offset Type Value Addend Name\n" -#: src/readelf.c:1972 +#: src/readelf.c:2210 #, c-format msgid "" "\n" @@ -4611,40 +4733,40 @@ msgstr[1] "" "\n" "Symbol table [%2u] ‘%s’ contains %u entries:\n" -#: src/readelf.c:1978 +#: src/readelf.c:2215 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] " %lu local symbol String table: [%2u] ‘%s’\n" msgstr[1] " %lu local symbols String table: [%2u] ‘%s’\n" -#: src/readelf.c:1988 +#: src/readelf.c:2223 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Num: Value Size Type Bind Vis Ndx Name\n" -#: src/readelf.c:1990 +#: src/readelf.c:2225 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Num: Value Size Type Bind Vis Ndx Name\n" -#: src/readelf.c:2010 +#: src/readelf.c:2245 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2098 +#: src/readelf.c:2333 #, c-format msgid "bad dynamic symbol" msgstr "bad dynamic symbol" -#: src/readelf.c:2180 +#: src/readelf.c:2415 msgid "none" msgstr "none" -#: src/readelf.c:2197 +#: src/readelf.c:2432 msgid "| " msgstr "| " -#: src/readelf.c:2222 +#: src/readelf.c:2463 #, c-format msgid "" "\n" @@ -4657,25 +4779,25 @@ msgid_plural "" msgstr[0] "" "\n" "Version needs section [%2u] ‘%s’ contains %d entry:\n" -" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s" -"[0m’\n" +" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘" +"%s’\n" msgstr[1] "" "\n" "Version needs section [%2u] ‘%s’ contains %d entries:\n" -" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s" -"[0m’\n" +" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘" +"%s’\n" -#: src/readelf.c:2245 +#: src/readelf.c:2484 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Version: %hu File: %s Cnt: %hu\n" -#: src/readelf.c:2258 +#: src/readelf.c:2497 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Name: %s Flags: %s Version: %hu\n" -#: src/readelf.c:2289 +#: src/readelf.c:2534 #, c-format msgid "" "\n" @@ -4688,25 +4810,25 @@ msgid_plural "" msgstr[0] "" "\n" "Version definition section [%2u] ‘%s’ contains %d entry:\n" -" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s" -"[0m’\n" +" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘" +"%s’\n" msgstr[1] "" "\n" "Version definition section [%2u] ‘%s’ contains %d entries:\n" -" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s" -"[0m’\n" +" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘" +"%s’\n" -#: src/readelf.c:2319 +#: src/readelf.c:2562 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" -#: src/readelf.c:2334 +#: src/readelf.c:2577 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Parent %d: %s\n" -#: src/readelf.c:2566 +#: src/readelf.c:2816 #, c-format msgid "" "\n" @@ -4725,15 +4847,15 @@ msgstr[1] "" "Version symbols section [%2u] ‘%s’ contains %d entries:\n" " Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s’" -#: src/readelf.c:2596 +#: src/readelf.c:2844 msgid " 0 *local* " msgstr " 0 *local* " -#: src/readelf.c:2601 +#: src/readelf.c:2849 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:2632 +#: src/readelf.c:2890 #, c-format msgid "" "\n" @@ -4749,31 +4871,31 @@ msgstr[0] "" "\n" "Histogram for bucket list length in section [%2u] ‘%s’ (total of %d " "bucket):\n" -" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s" -"[0m’\n" +" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘" +"%s’\n" msgstr[1] "" "\n" "Histogram for bucket list length in section [%2u] ‘%s’ (total of %d " "buckets):\n" -" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s" -"[0m’\n" +" Addr: %#0* Offset: %#08 Link to section: [%2u] ‘" +"%s’\n" -#: src/readelf.c:2656 +#: src/readelf.c:2912 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Length Number % of total Coverage\n" -#: src/readelf.c:2658 +#: src/readelf.c:2914 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:2665 +#: src/readelf.c:2921 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:2678 +#: src/readelf.c:2934 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4782,12 +4904,12 @@ msgstr "" " Average number of tests: successful lookup: %f\n" "\t\t\t unsuccessful lookup: %f\n" -#: src/readelf.c:2696 src/readelf.c:2738 src/readelf.c:2779 +#: src/readelf.c:2952 src/readelf.c:2994 src/readelf.c:3035 #, c-format msgid "cannot get data for section %d: %s" msgstr "cannot get data for section %d: %s" -#: src/readelf.c:2833 +#: src/readelf.c:3089 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4796,7 +4918,7 @@ msgstr "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" -#: src/readelf.c:2907 +#: src/readelf.c:3164 #, c-format msgid "" "\n" @@ -4813,7 +4935,7 @@ msgstr[1] "" "Library list section [%2zu] ‘%s’ at offset %#0 contains %d " "entries:\n" -#: src/readelf.c:2921 +#: src/readelf.c:3178 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4821,7 +4943,7 @@ msgstr "" " Library Time Stamp Checksum Version " "Flags" -#: src/readelf.c:2971 +#: src/readelf.c:3228 #, c-format msgid "" "\n" @@ -4832,135 +4954,140 @@ msgstr "" "Object attributes section [%2zu] ‘%s’ of % bytes at offset " "%#0:\n" -#: src/readelf.c:2987 +#: src/readelf.c:3244 msgid " Owner Size\n" msgstr " Owner Size\n" -#: src/readelf.c:3013 +#: src/readelf.c:3270 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" -#: src/readelf.c:3045 +#: src/readelf.c:3302 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" -#: src/readelf.c:3050 +#: src/readelf.c:3307 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3085 +#: src/readelf.c:3342 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3088 +#: src/readelf.c:3345 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3091 +#: src/readelf.c:3348 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3098 +#: src/readelf.c:3355 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3101 +#: src/readelf.c:3358 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3137 +#: src/readelf.c:3403 #, c-format msgid "%s+%# <%s+%#>" msgstr "%s+%# <%s+%#>" -#: src/readelf.c:3140 +#: src/readelf.c:3406 #, c-format msgid "%s+%#0* <%s+%#>" msgstr "%s+%#0* <%s+%#>" -#: src/readelf.c:3145 +#: src/readelf.c:3411 #, c-format msgid "%# <%s+%#>" msgstr "%# <%s+%#>" -#: src/readelf.c:3148 +#: src/readelf.c:3414 #, c-format msgid "%#0* <%s+%#>" msgstr "%#0* <%s+%#>" -#: src/readelf.c:3154 +#: src/readelf.c:3420 #, c-format msgid "%s+%# <%s>" msgstr "%s+%# <%s>" -#: src/readelf.c:3157 +#: src/readelf.c:3423 #, c-format msgid "%s+%#0* <%s>" msgstr "%s+%#0* <%s>" -#: src/readelf.c:3161 +#: src/readelf.c:3427 #, c-format msgid "%# <%s>" msgstr "%# <%s>" -#: src/readelf.c:3164 +#: src/readelf.c:3430 #, c-format msgid "%#0* <%s>" msgstr "%#0* <%s>" -#: src/readelf.c:3169 +#: src/readelf.c:3435 #, c-format msgid "%s+%#" msgstr "%s+%#" -#: src/readelf.c:3172 +#: src/readelf.c:3438 #, c-format msgid "%s+%#0*" msgstr "%s+%#0*" -#: src/readelf.c:3554 +#: src/readelf.c:3820 msgid "empty block" msgstr "empty block" -#: src/readelf.c:3557 +#: src/readelf.c:3823 #, c-format msgid "%zu byte block:" msgstr "%zu byte block:" -#: src/readelf.c:3934 +#: src/readelf.c:4217 #, c-format msgid "%*s[%4] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:3970 +#: src/readelf.c:4274 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# used with different address sizes" -#: src/readelf.c:3977 +#: src/readelf.c:4281 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# used with different offset sizes" -#: src/readelf.c:4057 +#: src/readelf.c:4288 +#, c-format +msgid "%s %# used with different base addresses" +msgstr "%s %# used with different base addresses" + +#: src/readelf.c:4370 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4065 +#: src/readelf.c:4378 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] ... % bytes ...\n" -#: src/readelf.c:4087 +#: src/readelf.c:4404 #, c-format msgid "" "\n" @@ -4971,7 +5098,7 @@ msgstr "" "DWARF section [%2zu] ‘%s’ at offset %#:\n" " [ Code]\n" -#: src/readelf.c:4095 +#: src/readelf.c:4412 #, c-format msgid "" "\n" @@ -4980,30 +5107,30 @@ msgstr "" "\n" "Abbreviation section at offset %:\n" -#: src/readelf.c:4108 +#: src/readelf.c:4425 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** error while reading abbreviation: %s\n" -#: src/readelf.c:4124 +#: src/readelf.c:4441 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] offset: %, children: %s, tag: %s\n" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "yes" msgstr "yes" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "no" msgstr "no" -#: src/readelf.c:4162 +#: src/readelf.c:4478 src/readelf.c:4551 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "cannot get .debug_aranges content: %s" -#: src/readelf.c:4167 +#: src/readelf.c:4493 #, c-format msgid "" "\n" @@ -5018,25 +5145,20 @@ msgstr[1] "" "\n" "DWARF section [%2zu] ‘%s’ at offset %# contains %zu entries:\n" -#: src/readelf.c:4198 +#: src/readelf.c:4524 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4200 +#: src/readelf.c:4526 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" -#: src/readelf.c:4219 -#, c-format -msgid "cannot get .debug_ranges content: %s" -msgstr "cannot get .debug_ranges content: %s" - -#: src/readelf.c:4224 src/readelf.c:4728 src/readelf.c:5505 src/readelf.c:6006 -#: src/readelf.c:6121 src/readelf.c:6277 src/readelf.c:6699 +#: src/readelf.c:4556 src/readelf.c:4710 src/readelf.c:5231 src/readelf.c:6145 +#: src/readelf.c:6646 src/readelf.c:6766 src/readelf.c:6922 src/readelf.c:7345 #, c-format msgid "" "\n" @@ -5045,37 +5167,119 @@ msgstr "" "\n" "DWARF section [%2zu] ‘%s’ at offset %#:\n" -#: src/readelf.c:4248 src/readelf.c:6031 +#: src/readelf.c:4569 src/readelf.c:6171 +#, c-format +msgid "" +"\n" +"Table at offset %Zu:\n" +msgstr "" +"\n" +"Table at offset %Zu:\n" + +#: src/readelf.c:4573 src/readelf.c:5255 src/readelf.c:6180 +#, c-format +msgid "invalid data in section [%zu] '%s'" +msgstr "invalid data in section [%zu] ‘%s’" + +#: src/readelf.c:4589 +#, c-format +msgid "" +"\n" +" Length: %6\n" +msgstr "" +"\n" +" Length: %6\n" + +#: src/readelf.c:4601 +#, c-format +msgid " DWARF version: %6\n" +msgstr " DWARF version: %6\n" + +#: src/readelf.c:4605 +#, c-format +msgid "unsupported aranges version" +msgstr "unsupported aranges version" + +#: src/readelf.c:4616 +#, c-format +msgid " CU offset: %6\n" +msgstr " CU offset: %6\n" + +#: src/readelf.c:4622 +#, c-format +msgid " Address size: %6\n" +msgstr " Address size: %6\n" + +#: src/readelf.c:4626 +#, c-format +msgid "unsupported address size" +msgstr "unsupported address size" + +#: src/readelf.c:4631 +#, c-format +msgid "" +" Segment size: %6\n" +"\n" +msgstr "" +" Segment size: %6\n" +"\n" + +#: src/readelf.c:4635 +#, c-format +msgid "unsupported segment size" +msgstr "unsupported segment size" + +#: src/readelf.c:4675 +#, c-format +msgid " %s..%s (%)\n" +msgstr " %s..%s (%)\n" + +#: src/readelf.c:4678 +#, c-format +msgid " %s..%s\n" +msgstr " %s..%s\n" + +#: src/readelf.c:4687 +#, c-format +msgid " %Zu padding bytes\n" +msgstr " %Zu padding bytes\n" + +#: src/readelf.c:4705 +#, c-format +msgid "cannot get .debug_ranges content: %s" +msgstr "cannot get .debug_ranges content: %s" + +#: src/readelf.c:4735 src/readelf.c:6673 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4270 src/readelf.c:6053 +#: src/readelf.c:4757 src/readelf.c:6695 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] base address %s\n" -#: src/readelf.c:4276 src/readelf.c:6059 +#: src/readelf.c:4764 src/readelf.c:6702 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] empty list\n" -#: src/readelf.c:4285 +#: src/readelf.c:4775 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4287 +#: src/readelf.c:4777 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:4717 src/readelf.c:6768 src/readelf.c:6870 src/readelf.c:7028 +#: src/readelf.c:5210 #, c-format -msgid "cannot get %s content: %s" -msgstr "cannot get %s content: %s" +msgid "cannot get ELF: %s" +msgstr "cannot get ELF: %s" -#: src/readelf.c:4724 +#: src/readelf.c:5227 #, c-format msgid "" "\n" @@ -5084,12 +5288,7 @@ msgstr "" "\n" "Call frame information section [%2zu] ‘%s’ at offset %#:\n" -#: src/readelf.c:4752 src/readelf.c:5540 -#, c-format -msgid "invalid data in section [%zu] '%s'" -msgstr "invalid data in section [%zu] ‘%s’" - -#: src/readelf.c:4774 +#: src/readelf.c:5277 #, c-format msgid "" "\n" @@ -5098,50 +5297,50 @@ msgstr "" "\n" " [%6tx] Zero terminator\n" -#: src/readelf.c:4859 +#: src/readelf.c:5362 #, c-format msgid "invalid augmentation length" msgstr "invalid augmentation length" -#: src/readelf.c:4871 +#: src/readelf.c:5374 msgid "FDE address encoding: " msgstr "FDE address encoding: " -#: src/readelf.c:4877 +#: src/readelf.c:5380 msgid "LSDA pointer encoding: " msgstr "LSDA pointer encoding: " -#: src/readelf.c:4975 +#: src/readelf.c:5491 #, c-format msgid " (offset: %#)" msgstr " (offset: %#)" -#: src/readelf.c:4982 +#: src/readelf.c:5498 #, c-format msgid " (end offset: %#)" msgstr " (end offset: %#)" -#: src/readelf.c:5009 +#: src/readelf.c:5525 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sLSDA pointer: %#\n" -#: src/readelf.c:5060 +#: src/readelf.c:5577 #, c-format msgid "cannot get attribute code: %s" msgstr "cannot get attribute code: %s" -#: src/readelf.c:5069 +#: src/readelf.c:5586 #, c-format msgid "cannot get attribute form: %s" msgstr "cannot get attribute form: %s" -#: src/readelf.c:5084 +#: src/readelf.c:5601 #, c-format msgid "cannot get attribute value: %s" msgstr "cannot get attribute value: %s" -#: src/readelf.c:5342 +#: src/readelf.c:5894 #, c-format msgid "" "\n" @@ -5152,7 +5351,7 @@ msgstr "" "DWARF section [%2zu] ‘%s’ at offset %#:\n" " [Offset]\n" -#: src/readelf.c:5374 +#: src/readelf.c:5926 #, c-format msgid "" " Type unit at offset %:\n" @@ -5165,7 +5364,7 @@ msgstr "" "%, Offset size: %\n" " Type signature: %#, Type offset: %#\n" -#: src/readelf.c:5383 +#: src/readelf.c:5935 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5176,46 +5375,48 @@ msgstr "" " Version: %, Abbreviation section offset: %, Address size: " "%, Offset size: %\n" -#: src/readelf.c:5409 +#: src/readelf.c:5960 #, c-format msgid "cannot get DIE at offset % in section '%s': %s" msgstr "cannot get DIE at offset % in section '%s': %s" -#: src/readelf.c:5421 +#: src/readelf.c:5974 #, c-format msgid "cannot get DIE offset: %s" msgstr "cannot get DIE offset: %s" -#: src/readelf.c:5430 +#: src/readelf.c:5983 #, c-format msgid "cannot get tag of DIE at offset % in section '%s': %s" msgstr "cannot get tag of DIE at offset % in section '%s': %s" -#: src/readelf.c:5461 +#: src/readelf.c:6015 #, c-format msgid "cannot get next DIE: %s\n" msgstr "cannot get next DIE: %s\n" -#: src/readelf.c:5469 +#: src/readelf.c:6023 #, c-format msgid "cannot get next DIE: %s" msgstr "cannot get next DIE: %s" -#: src/readelf.c:5518 -#, c-format -msgid "cannot get line data section data: %s" -msgstr "cannot get line data section data: %s" - -#: src/readelf.c:5531 +#: src/readelf.c:6059 #, c-format msgid "" "\n" -"Table at offset %Zu:\n" +"DWARF section [%2zu] '%s' at offset %#:\n" +"\n" msgstr "" "\n" -"Table at offset %Zu:\n" +"DWARF section [%2zu] ‘%s’ at offset %#:\n" +"\n" -#: src/readelf.c:5586 +#: src/readelf.c:6158 +#, c-format +msgid "cannot get line data section data: %s" +msgstr "cannot get line data section data: %s" + +#: src/readelf.c:6226 #, c-format msgid "" "\n" @@ -5244,19 +5445,19 @@ msgstr "" "\n" "Opcodes:\n" -#: src/readelf.c:5607 +#: src/readelf.c:6247 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "invalid data at offset %tu in section [%zu] ‘%s’" -#: src/readelf.c:5622 +#: src/readelf.c:6262 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] %hhu argument\n" msgstr[1] " [%*] %hhu arguments\n" -#: src/readelf.c:5630 +#: src/readelf.c:6270 msgid "" "\n" "Directory table:" @@ -5264,7 +5465,7 @@ msgstr "" "\n" "Directory table:" -#: src/readelf.c:5646 +#: src/readelf.c:6286 msgid "" "\n" "File name table:\n" @@ -5274,7 +5475,7 @@ msgstr "" "File name table:\n" " Entry Dir Time Size Name" -#: src/readelf.c:5675 +#: src/readelf.c:6315 msgid "" "\n" "Line number statements:" @@ -5282,207 +5483,207 @@ msgstr "" "\n" "Line number statements:" -#: src/readelf.c:5751 +#: src/readelf.c:6391 #, c-format msgid " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" msgstr " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" -#: src/readelf.c:5756 +#: src/readelf.c:6396 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr " special opcode %u: address+%u = %s, line%+d = %zu\n" -#: src/readelf.c:5776 +#: src/readelf.c:6416 #, c-format msgid " extended opcode %u: " msgstr " extended opcode %u: " -#: src/readelf.c:5781 +#: src/readelf.c:6421 msgid " end of sequence" msgstr " end of sequence" -#: src/readelf.c:5798 +#: src/readelf.c:6438 #, c-format msgid " set address to %s\n" msgstr " set address to %s\n" -#: src/readelf.c:5819 +#: src/readelf.c:6459 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr " define new file: dir=%u, mtime=%, length=%, name=%s\n" -#: src/readelf.c:5832 +#: src/readelf.c:6472 #, c-format msgid " set discriminator to %u\n" msgstr " set discriminator to %u\n" -#: src/readelf.c:5837 +#: src/readelf.c:6477 msgid " unknown opcode" msgstr " unknown opcode" -#: src/readelf.c:5849 +#: src/readelf.c:6489 msgid " copy" msgstr " copy" -#: src/readelf.c:5860 +#: src/readelf.c:6500 #, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr " advance address by %u to %s, op_index to %u\n" -#: src/readelf.c:5864 +#: src/readelf.c:6504 #, c-format msgid " advance address by %u to %s\n" msgstr " advance address by %u to %s\n" -#: src/readelf.c:5875 +#: src/readelf.c:6515 #, c-format msgid " advance line by constant %d to %\n" msgstr " advance line by constant %d to %\n" -#: src/readelf.c:5883 +#: src/readelf.c:6523 #, c-format msgid " set file to %\n" msgstr " set file to %\n" -#: src/readelf.c:5893 +#: src/readelf.c:6533 #, c-format msgid " set column to %\n" msgstr " set column to %\n" -#: src/readelf.c:5900 +#: src/readelf.c:6540 #, c-format msgid " set '%s' to %\n" msgstr " set ‘%s’ to %\n" -#: src/readelf.c:5906 +#: src/readelf.c:6546 msgid " set basic block flag" msgstr " set basic block flag" -#: src/readelf.c:5915 +#: src/readelf.c:6555 #, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr " advance address by constant %u to %s, op_index to %u\n" -#: src/readelf.c:5919 +#: src/readelf.c:6559 #, c-format msgid " advance address by constant %u to %s\n" msgstr " advance address by constant %u to %s\n" -#: src/readelf.c:5937 +#: src/readelf.c:6577 #, c-format msgid " advance address by fixed value %u to %s\n" msgstr " advance address by fixed value %u to %s\n" -#: src/readelf.c:5946 +#: src/readelf.c:6586 msgid " set prologue end flag" msgstr " set prologue end flag" -#: src/readelf.c:5951 +#: src/readelf.c:6591 msgid " set epilogue begin flag" msgstr " set epilogue begin flag" -#: src/readelf.c:5960 +#: src/readelf.c:6600 #, c-format msgid " set isa to %u\n" msgstr " set isa to %u\n" -#: src/readelf.c:5969 +#: src/readelf.c:6609 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " unknown opcode with % parameter:" msgstr[1] " unknown opcode with % parameters:" -#: src/readelf.c:6001 +#: src/readelf.c:6641 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "cannot get .debug_loc content: %s" -#: src/readelf.c:6071 +#: src/readelf.c:6716 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6073 +#: src/readelf.c:6718 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6080 +#: src/readelf.c:6725 msgid " \n" msgstr " \n" -#: src/readelf.c:6132 src/readelf.c:6286 +#: src/readelf.c:6777 src/readelf.c:6931 #, c-format msgid "cannot get macro information section data: %s" msgstr "cannot get macro information section data: %s" -#: src/readelf.c:6211 +#: src/readelf.c:6856 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** non-terminated string at end of section" -#: src/readelf.c:6327 +#: src/readelf.c:6972 #, c-format msgid " Offset: 0x%\n" msgstr " Offset: 0x%\n" -#: src/readelf.c:6339 +#: src/readelf.c:6984 #, c-format msgid " Version: %\n" msgstr " Version: %\n" -#: src/readelf.c:6345 src/readelf.c:7055 +#: src/readelf.c:6990 src/readelf.c:7703 #, c-format msgid " unknown version, cannot parse section\n" msgstr " unknown version, cannot parse section\n" -#: src/readelf.c:6352 +#: src/readelf.c:6997 #, c-format msgid " Flag: 0x%\n" msgstr " Flag: 0x%\n" -#: src/readelf.c:6355 +#: src/readelf.c:7000 #, c-format msgid " Offset length: %\n" msgstr " Offset length: %\n" -#: src/readelf.c:6363 +#: src/readelf.c:7008 #, c-format msgid " .debug_line offset: 0x%\n" msgstr " .debug_line offset: 0x%\n" -#: src/readelf.c:6375 +#: src/readelf.c:7021 #, c-format msgid " extension opcode table, % items:\n" msgstr " extension opcode table, % items:\n" -#: src/readelf.c:6382 +#: src/readelf.c:7028 #, c-format msgid " [%]" msgstr " [%]" -#: src/readelf.c:6394 +#: src/readelf.c:7040 #, c-format msgid " % arguments:" msgstr " % arguments:" -#: src/readelf.c:6422 +#: src/readelf.c:7068 #, c-format msgid " no arguments." msgstr " no arguments." -#: src/readelf.c:6657 +#: src/readelf.c:7303 #, c-format msgid "vendor opcode not verified?" msgstr "vendor opcode not verified?" -#: src/readelf.c:6685 +#: src/readelf.c:7331 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" -#: src/readelf.c:6726 +#: src/readelf.c:7372 #, c-format msgid "" "\n" @@ -5493,12 +5694,12 @@ msgstr "" "DWARF section [%2zu] ‘%s’ at offset %#:\n" " %*s String\n" -#: src/readelf.c:6740 +#: src/readelf.c:7386 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** error while reading strings: %s\n" -#: src/readelf.c:6760 +#: src/readelf.c:7406 #, c-format msgid "" "\n" @@ -5507,7 +5708,7 @@ msgstr "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:6862 +#: src/readelf.c:7508 #, c-format msgid "" "\n" @@ -5516,22 +5717,22 @@ msgstr "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:6885 +#: src/readelf.c:7531 #, c-format msgid " LPStart encoding: %#x " msgstr " LPStart encoding: %#x " -#: src/readelf.c:6897 +#: src/readelf.c:7543 #, c-format msgid " TType encoding: %#x " msgstr " TType encoding: %#x " -#: src/readelf.c:6911 +#: src/readelf.c:7557 #, c-format msgid " Call site encoding: %#x " msgstr " Call site encoding: %#x " -#: src/readelf.c:6924 +#: src/readelf.c:7570 msgid "" "\n" " Call site table:" @@ -5539,7 +5740,7 @@ msgstr "" "\n" " Call site table:" -#: src/readelf.c:6938 +#: src/readelf.c:7584 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5552,12 +5753,12 @@ msgstr "" " Landing pad: %#\n" " Action: %u\n" -#: src/readelf.c:6998 +#: src/readelf.c:7644 #, c-format msgid "invalid TType encoding" msgstr "invalid TType encoding" -#: src/readelf.c:7019 +#: src/readelf.c:7665 #, c-format msgid "" "\n" @@ -5567,37 +5768,37 @@ msgstr "" "GDB section [%2zu] ‘%s’ at offset %# contains % " "bytes :\n" -#: src/readelf.c:7048 +#: src/readelf.c:7694 #, c-format msgid " Version: %\n" msgstr " Version: %\n" -#: src/readelf.c:7064 +#: src/readelf.c:7712 #, c-format msgid " CU offset: %#\n" msgstr " CU offset: %#\n" -#: src/readelf.c:7071 +#: src/readelf.c:7719 #, c-format msgid " TU offset: %#\n" msgstr " TU offset: %#\n" -#: src/readelf.c:7078 +#: src/readelf.c:7726 #, c-format msgid " address offset: %#\n" msgstr " address offset: %#\n" -#: src/readelf.c:7085 +#: src/readelf.c:7733 #, c-format msgid " symbol offset: %#\n" msgstr " symbol offset: %#\n" -#: src/readelf.c:7092 +#: src/readelf.c:7740 #, c-format msgid " constant offset: %#\n" msgstr " constant offset: %#\n" -#: src/readelf.c:7099 +#: src/readelf.c:7747 #, c-format msgid "" "\n" @@ -5606,7 +5807,7 @@ msgstr "" "\n" " CU list at offset %# contains %zu entries:\n" -#: src/readelf.c:7121 +#: src/readelf.c:7769 #, c-format msgid "" "\n" @@ -5615,7 +5816,7 @@ msgstr "" "\n" " TU list at offset %# contains %zu entries:\n" -#: src/readelf.c:7147 +#: src/readelf.c:7795 #, c-format msgid "" "\n" @@ -5624,7 +5825,7 @@ msgstr "" "\n" " Address list at offset %# contains %zu entries:\n" -#: src/readelf.c:7174 +#: src/readelf.c:7824 #, c-format msgid "" "\n" @@ -5633,17 +5834,17 @@ msgstr "" "\n" " Symbol table at offset %# contains %zu slots:\n" -#: src/readelf.c:7259 +#: src/readelf.c:7909 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "cannot get debug context descriptor: %s" -#: src/readelf.c:7409 src/readelf.c:8010 +#: src/readelf.c:8069 src/readelf.c:8675 src/readelf.c:8786 src/readelf.c:8844 #, c-format msgid "cannot convert core note data: %s" msgstr "cannot convert core note data: %s" -#: src/readelf.c:7750 +#: src/readelf.c:8416 #, c-format msgid "" "\n" @@ -5652,21 +5853,21 @@ msgstr "" "\n" "%*s... ..." -#: src/readelf.c:8109 +#: src/readelf.c:8919 msgid " Owner Data size Type\n" msgstr " Owner Data size Type\n" -#: src/readelf.c:8127 +#: src/readelf.c:8937 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:8161 +#: src/readelf.c:8987 #, c-format msgid "cannot get content of note section: %s" msgstr "cannot get content of note section: %s" -#: src/readelf.c:8188 +#: src/readelf.c:9014 #, c-format msgid "" "\n" @@ -5675,7 +5876,7 @@ msgstr "" "\n" "Note section [%2zu] ‘%s’ of % bytes at offset %#0:\n" -#: src/readelf.c:8211 +#: src/readelf.c:9037 #, c-format msgid "" "\n" @@ -5684,7 +5885,7 @@ msgstr "" "\n" "Note segment of % bytes at offset %#0:\n" -#: src/readelf.c:8257 +#: src/readelf.c:9083 #, c-format msgid "" "\n" @@ -5693,12 +5894,12 @@ msgstr "" "\n" "Section [%Zu] ‘%s’ has no data to dump.\n" -#: src/readelf.c:8263 src/readelf.c:8286 +#: src/readelf.c:9089 src/readelf.c:9112 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "cannot get data for section [%Zu] '%s': %s" -#: src/readelf.c:8267 +#: src/readelf.c:9093 #, c-format msgid "" "\n" @@ -5707,7 +5908,7 @@ msgstr "" "\n" "Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" -#: src/readelf.c:8280 +#: src/readelf.c:9106 #, c-format msgid "" "\n" @@ -5716,7 +5917,7 @@ msgstr "" "\n" "Section [%Zu] ‘%s’ has no strings to dump.\n" -#: src/readelf.c:8290 +#: src/readelf.c:9116 #, c-format msgid "" "\n" @@ -5726,7 +5927,7 @@ msgstr "" "String section [%Zu] ‘%s’ contains % bytes at offset " "%#0:\n" -#: src/readelf.c:8338 +#: src/readelf.c:9164 #, c-format msgid "" "\n" @@ -5735,7 +5936,7 @@ msgstr "" "\n" "section [%lu] does not exist" -#: src/readelf.c:8367 +#: src/readelf.c:9193 #, c-format msgid "" "\n" @@ -5744,12 +5945,12 @@ msgstr "" "\n" "section ‘%s’ does not exist" -#: src/readelf.c:8424 +#: src/readelf.c:9250 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "cannot get symbol index of archive '%s': %s" -#: src/readelf.c:8427 +#: src/readelf.c:9253 #, c-format msgid "" "\n" @@ -5758,7 +5959,7 @@ msgstr "" "\n" "Archive ‘%s’ has no symbol index\n" -#: src/readelf.c:8431 +#: src/readelf.c:9257 #, c-format msgid "" "\n" @@ -5767,12 +5968,12 @@ msgstr "" "\n" "Index of archive ‘%s’ has %Zu entries:\n" -#: src/readelf.c:8449 +#: src/readelf.c:9275 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "cannot extract member at offset %Zu in '%s': %s" -#: src/readelf.c:8454 +#: src/readelf.c:9280 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Archive member ‘%s’ contains:\n" @@ -5836,12 +6037,12 @@ msgstr "Invalid radix: %s" msgid "%s: file format not recognized" msgstr "%s: file format not recognized" -#: src/size.c:438 src/size.c:581 +#: src/size.c:438 src/size.c:571 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:606 +#: src/size.c:596 msgid "(TOTALS)\n" msgstr "(TOTALS)\n" @@ -5882,27 +6083,27 @@ msgstr "Alias for --radix=o" msgid "Print the strings of printable characters in files." msgstr "Print the strings of printable characters in files." -#: src/strings.c:260 src/strings.c:295 +#: src/strings.c:267 src/strings.c:302 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "invalid value ‘%s’ for %s parameter" -#: src/strings.c:306 +#: src/strings.c:313 #, c-format msgid "invalid minimum length of matched string size" msgstr "invalid minimum length of matched string size" -#: src/strings.c:591 +#: src/strings.c:596 #, c-format msgid "lseek64 failed" msgstr "lseek64 failed" -#: src/strings.c:608 src/strings.c:672 +#: src/strings.c:613 src/strings.c:677 #, c-format msgid "re-mmap failed" msgstr "re-mmap failed" -#: src/strings.c:645 +#: src/strings.c:650 #, c-format msgid "mprotect failed" msgstr "mprotect failed" @@ -5973,7 +6174,7 @@ msgstr "-f option specified twice" msgid "-F option specified twice" msgstr "-F option specified twice" -#: 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 option specified twice" @@ -5998,87 +6199,87 @@ msgstr "while opening ‘%s’" msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: cannot use -o or -f when stripping archive" -#: src/strip.c:467 +#: src/strip.c:468 #, c-format msgid "cannot open EBL backend" msgstr "cannot open EBL backend" -#: src/strip.c:517 src/strip.c:541 +#: src/strip.c:518 src/strip.c:542 #, c-format msgid "cannot create new file '%s': %s" msgstr "cannot create new file '%s': %s" -#: src/strip.c:601 +#: src/strip.c:608 #, c-format msgid "illformed file '%s'" msgstr "illformed file ‘%s’" -#: src/strip.c:905 src/strip.c:994 +#: src/strip.c:930 src/strip.c:1019 #, c-format msgid "while generating output file: %s" msgstr "while generating output file: %s" -#: src/strip.c:967 src/strip.c:1929 +#: src/strip.c:992 src/strip.c:1957 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: error while creating ELF header: %s" -#: src/strip.c:981 +#: src/strip.c:1006 #, c-format msgid "while preparing output for '%s'" msgstr "while preparing output for ‘%s’" -#: src/strip.c:1032 src/strip.c:1088 +#: src/strip.c:1057 src/strip.c:1114 #, c-format msgid "while create section header section: %s" msgstr "while create section header section: %s" -#: src/strip.c:1038 +#: src/strip.c:1063 #, c-format msgid "cannot allocate section data: %s" msgstr "cannot allocate section data: %s" -#: src/strip.c:1097 +#: src/strip.c:1123 #, c-format msgid "while create section header string table: %s" msgstr "while create section header string table: %s" -#: src/strip.c:1724 +#: src/strip.c:1752 #, c-format msgid "bad relocation" msgstr "bad relocation" -#: src/strip.c:1841 src/strip.c:1951 +#: src/strip.c:1869 src/strip.c:1979 #, c-format msgid "while writing '%s': %s" msgstr "while writing '%s': %s" -#: src/strip.c:1852 +#: src/strip.c:1880 #, c-format msgid "while creating '%s'" msgstr "while creating ‘%s’" -#: src/strip.c:1874 +#: src/strip.c:1902 #, c-format msgid "while computing checksum for debug information" msgstr "while computing checksum for debug information" -#: src/strip.c:1937 +#: src/strip.c:1965 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: error while reading the file: %s" -#: src/strip.c:1976 src/strip.c:1996 +#: src/strip.c:2004 src/strip.c:2024 #, c-format msgid "while writing '%s'" msgstr "while writing ‘%s’" -#: src/strip.c:2030 src/strip.c:2037 +#: src/strip.c:2061 src/strip.c:2068 #, c-format msgid "error while finishing '%s': %s" msgstr "error while finishing '%s': %s" -#: src/strip.c:2060 src/strip.c:2117 +#: src/strip.c:2091 src/strip.c:2148 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "cannot set access and modification date of ‘%s’" @@ -6115,203 +6316,207 @@ msgstr "Apply relocations to section contents in ET_REL files" msgid "Only list module and file names, build IDs" msgstr "Only list module and file names, build IDs" -#: src/unstrip.c:126 +#: src/unstrip.c:86 +msgid "Force combining files even if some ELF headers don't seem to match" +msgstr "Force combining files even if some ELF headers don't seem to match" + +#: src/unstrip.c:130 #, c-format msgid "-d option specified twice" msgstr "-d option specified twice" -#: src/unstrip.c:158 +#: src/unstrip.c:165 #, c-format msgid "only one of -o or -d allowed" msgstr "only one of -o or -d allowed" -#: src/unstrip.c:167 +#: src/unstrip.c:174 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "-n cannot be used with explicit files or -o or -d" -#: src/unstrip.c:182 +#: src/unstrip.c:189 #, c-format msgid "output directory '%s'" msgstr "output directory ‘%s’" -#: src/unstrip.c:191 +#: src/unstrip.c:198 #, c-format msgid "exactly two file arguments are required" msgstr "exactly two file arguments are required" -#: 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, and -i options not allowed with explicit files" -#: src/unstrip.c:210 +#: src/unstrip.c:217 #, c-format msgid "-o or -d is required when using implicit files" msgstr "-o or -d is required when using implicit files" -#: src/unstrip.c:246 +#: src/unstrip.c:253 #, c-format msgid "cannot create ELF header: %s" msgstr "cannot create ELF header: %s" -#: src/unstrip.c:251 +#: src/unstrip.c:258 #, c-format msgid "cannot copy ELF header: %s" msgstr "cannot copy ELF header: %s" -#: src/unstrip.c:256 src/unstrip.c:1820 +#: src/unstrip.c:263 src/unstrip.c:1828 #, c-format msgid "cannot create program headers: %s" msgstr "cannot create program headers: %s" -#: src/unstrip.c:262 +#: src/unstrip.c:269 #, c-format msgid "cannot copy program header: %s" msgstr "cannot copy program header: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:279 #, c-format msgid "cannot copy section header: %s" msgstr "cannot copy section header: %s" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:282 src/unstrip.c:1509 #, c-format msgid "cannot get section data: %s" msgstr "cannot get section data: %s" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:284 src/unstrip.c:1511 #, c-format msgid "cannot copy section data: %s" msgstr "cannot copy section data: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:308 #, c-format msgid "cannot create directory '%s'" msgstr "cannot create directory ‘%s’" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:348 src/unstrip.c:765 src/unstrip.c:1543 #, c-format msgid "cannot get symbol table entry: %s" msgstr "cannot get symbol table entry: %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:364 src/unstrip.c:582 src/unstrip.c:603 src/unstrip.c:615 +#: src/unstrip.c:1564 src/unstrip.c:1694 src/unstrip.c:1718 #, c-format msgid "cannot update symbol table: %s" msgstr "cannot update symbol table: %s" -#: src/unstrip.c:367 +#: src/unstrip.c:374 #, c-format msgid "cannot update section header: %s" msgstr "cannot update section header: %s" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:413 src/unstrip.c:424 #, c-format msgid "cannot update relocation: %s" msgstr "cannot update relocation: %s" -#: src/unstrip.c:504 +#: src/unstrip.c:511 #, c-format msgid "cannot get symbol version: %s" msgstr "cannot get symbol version: %s" -#: src/unstrip.c:516 +#: src/unstrip.c:523 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "unexpected section type in [%Zu] with sh_link to symtab" -#: src/unstrip.c:764 +#: src/unstrip.c:771 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "invalid string offset in symbol [%Zu]" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:913 src/unstrip.c:1254 #, c-format msgid "cannot read section [%Zu] name: %s" msgstr "cannot read section [%Zu] name: %s" -#: src/unstrip.c:947 src/unstrip.c:966 src/unstrip.c:999 +#: src/unstrip.c:954 src/unstrip.c:973 src/unstrip.c:1006 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "cannot read ‘.gnu.prelink_undo’ section: %s" -#: src/unstrip.c:987 +#: src/unstrip.c:994 #, c-format msgid "invalid contents in '%s' section" msgstr "invalid contents in ‘%s’ section" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1049 src/unstrip.c:1374 #, c-format msgid "cannot find matching section for [%Zu] '%s'" msgstr "cannot find matching section for [%Zu] ‘%s’" -#: src/unstrip.c:1166 src/unstrip.c:1181 src/unstrip.c:1447 +#: src/unstrip.c:1174 src/unstrip.c:1189 src/unstrip.c:1455 #, c-format msgid "cannot add section name to string table: %s" msgstr "cannot add section name to string table: %s" -#: src/unstrip.c:1190 +#: src/unstrip.c:1198 #, c-format msgid "cannot update section header string table data: %s" msgstr "cannot update section header string table data: %s" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1225 src/unstrip.c:1229 #, c-format msgid "cannot get section header string table section index: %s" msgstr "cannot get section header string table section index: %s" -#: src/unstrip.c:1225 src/unstrip.c:1229 src/unstrip.c:1462 +#: src/unstrip.c:1233 src/unstrip.c:1237 src/unstrip.c:1470 #, c-format msgid "cannot get section count: %s" msgstr "cannot get section count: %s" -#: src/unstrip.c:1232 +#: src/unstrip.c:1240 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "more sections in stripped file than debug file -- arguments reversed?" -#: src/unstrip.c:1291 src/unstrip.c:1381 +#: src/unstrip.c:1299 src/unstrip.c:1389 #, c-format msgid "cannot read section header string table: %s" msgstr "cannot read section header string table: %s" -#: src/unstrip.c:1441 +#: src/unstrip.c:1449 #, c-format msgid "cannot add new section: %s" msgstr "cannot add new section: %s" -#: src/unstrip.c:1543 +#: src/unstrip.c:1551 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "symbol [%Zu] has invalid section index" -#: src/unstrip.c:1781 +#: src/unstrip.c:1789 #, c-format msgid "cannot read section data: %s" msgstr "cannot read section data: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1810 #, c-format msgid "cannot get ELF header: %s" msgstr "cannot get ELF header: %s" -#: src/unstrip.c:1830 +#: src/unstrip.c:1838 #, c-format msgid "cannot update program header: %s" msgstr "cannot update program header: %s" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1843 src/unstrip.c:1922 #, c-format msgid "cannot write output file: %s" msgstr "cannot write output file: %s" -#: src/unstrip.c:1883 +#: src/unstrip.c:1891 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "DWARF data not adjusted for prelinking bias; consider prelink -u" -#: src/unstrip.c:1886 +#: src/unstrip.c:1894 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -6319,57 +6524,76 @@ msgstr "" "DWARF data in ‘%s’ not adjusted for prelinking bias; consider prelink -" "u" -#: src/unstrip.c:1905 src/unstrip.c:1945 src/unstrip.c:1957 src/unstrip.c:2037 +#: src/unstrip.c:1913 src/unstrip.c:1964 src/unstrip.c:1976 src/unstrip.c:2062 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "cannot create ELF descriptor: %s" -#: src/unstrip.c:1963 -#, c-format -msgid "'%s' and '%s' do not seem to match" -msgstr "‘%s’ and ‘%s’ do not seem to match" +#: src/unstrip.c:1955 +msgid "WARNING: " +msgstr "WARNING: " + +#: src/unstrip.c:1957 +msgid ", use --force" +msgstr ", use --force" + +#: src/unstrip.c:1980 +msgid "ELF header identification (e_ident) different" +msgstr "ELF header identification (e_ident) different" + +#: src/unstrip.c:1983 +msgid "ELF header type (e_type) different" +msgstr "ELF header type (e_type) different" + +#: src/unstrip.c:1986 +msgid "ELF header machine type (e_machine) different" +msgstr "ELF header machine type (e_machine) different" + +#: src/unstrip.c:1989 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "stripped program header (e_phnum) smaller than unstripped" -#: src/unstrip.c:1994 +#: src/unstrip.c:2019 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "cannot find stripped file for module '%s': %s" -#: src/unstrip.c:1998 +#: src/unstrip.c:2023 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "cannot open stripped file ‘%s’ for module '%s': %s" -#: src/unstrip.c:2013 +#: src/unstrip.c:2038 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "cannot find debug file for module '%s': %s" -#: src/unstrip.c:2017 +#: src/unstrip.c:2042 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "cannot open debug file ‘%s’ for module '%s': %s" -#: src/unstrip.c:2030 +#: src/unstrip.c:2055 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "module ‘%s’ file ‘%s’ is not stripped" -#: src/unstrip.c:2061 +#: src/unstrip.c:2086 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "cannot cache section addresses for module '%s': %s" -#: src/unstrip.c:2194 +#: src/unstrip.c:2219 #, c-format msgid "no matching modules found" msgstr "no matching modules found" -#: src/unstrip.c:2203 +#: src/unstrip.c:2228 #, c-format msgid "matched more than one module" msgstr "matched more than one module" -#: src/unstrip.c:2250 +#: src/unstrip.c:2275 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -6377,7 +6601,7 @@ msgstr "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" -#: src/unstrip.c:2251 +#: src/unstrip.c:2276 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" diff --git a/po/en@quot.gmo b/po/en@quot.gmo index 6ccef260941cd620a56daf7e8e0622c282cb4bea..33da5abb9ef6bb293f47eb5a0bc5f13e85d52201 100644 GIT binary patch delta 33305 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 SP>5zaMLH`Rqt2Utk delta 29629 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 V$F5EhkjQH(?~cutCg5?<{{i!%6RH3J diff --git a/po/en@quot.po b/po/en@quot.po index b0d24d7..c598904 100644 --- a/po/en@quot.po +++ b/po/en@quot.po @@ -1,7 +1,7 @@ # English translations for elfutils package. -# Copyright (C) 2012 Red Hat, Inc. +# Copyright (C) 2014 Red Hat, Inc. # This file is distributed under the same license as the elfutils package. -# Automatically generated, 2012. +# Automatically generated, 2014. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation @@ -27,30 +27,30 @@ # msgid "" msgstr "" -"Project-Id-Version: elfutils 0.155\n" +"Project-Id-Version: elfutils 0.160\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2012-08-27 20:34+0200\n" -"PO-Revision-Date: 2012-08-27 20:34+0200\n" +"POT-Creation-Date: 2014-08-27 11:26+0200\n" +"PO-Revision-Date: 2014-08-27 11:26+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" -"Language: en\n" +"Language: en@quot\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:2842 -#: src/readelf.c:3181 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3098 +#: src/readelf.c:3447 src/readelf.c:8018 src/unstrip.c:2115 src/unstrip.c:2323 #, c-format msgid "memory exhausted" msgstr "memory exhausted" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:49 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:53 #: libelf/elf_error.c:60 msgid "no error" msgstr "no error" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:51 +#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:55 #: libelf/elf_error.c:91 msgid "out of memory" msgstr "out of memory" @@ -89,7 +89,7 @@ msgstr "error during output of data" msgid "no backend support available" msgstr "no backend support available" -#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:50 +#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:54 #: libelf/elf_error.c:63 msgid "unknown error" msgstr "unknown error" @@ -186,7 +186,7 @@ msgstr "invalid DWARF version" msgid "invalid directory index" msgstr "invalid directory index" -#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:70 +#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:74 msgid "address out of range" msgstr "address out of range" @@ -206,7 +206,7 @@ msgstr "invalid line index" msgid "invalid address range index" msgstr "invalid address range index" -#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:71 +#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:75 msgid "no matching address range" msgstr "no matching address range" @@ -230,7 +230,7 @@ msgstr "invalid CFI section" msgid "no alternative debug link found" msgstr "no alternative debug link found" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdwfl/argp-std.c:46 src/unstrip.c:2265 msgid "Input selection options:" msgstr "Input selection options:" @@ -266,132 +266,188 @@ msgstr "Kernel with all modules" msgid "Search path for separate debuginfo files" msgstr "Search path for separate debuginfo files" -#: libdwfl/argp-std.c:142 +#: libdwfl/argp-std.c:157 msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "only one of -e, -p, -k, -K, or --core allowed" -#: libdwfl/argp-std.c:202 -#, c-format -msgid "cannot read ELF core file: %s" -msgstr "cannot read ELF core file: %s" - -#: libdwfl/argp-std.c:220 -msgid "No modules recognized in core file" -msgstr "No modules recognized in core file" - -#: libdwfl/argp-std.c:232 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "cannot load kernel symbols" -#: libdwfl/argp-std.c:236 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "cannot find kernel modules" -#: libdwfl/argp-std.c:250 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "cannot find kernel or modules" -#: libdwfl/libdwflP.h:52 +#: libdwfl/argp-std.c:290 +#, c-format +msgid "cannot read ELF core file: %s" +msgstr "cannot read ELF core file: %s" + +#: libdwfl/argp-std.c:311 +msgid "No modules recognized in core file" +msgstr "No modules recognized in core file" + +#: libdwfl/libdwflP.h:56 msgid "See errno" msgstr "See errno" -#: libdwfl/libdwflP.h:53 +#: libdwfl/libdwflP.h:57 msgid "See elf_errno" msgstr "See elf_errno" -#: libdwfl/libdwflP.h:54 +#: libdwfl/libdwflP.h:58 msgid "See dwarf_errno" msgstr "See dwarf_errno" -#: libdwfl/libdwflP.h:55 +#: libdwfl/libdwflP.h:59 msgid "See ebl_errno (XXX missing)" msgstr "See ebl_errno (XXX missing)" -#: libdwfl/libdwflP.h:56 +#: libdwfl/libdwflP.h:60 msgid "gzip decompression failed" msgstr "gzip decompression failed" -#: libdwfl/libdwflP.h:57 +#: libdwfl/libdwflP.h:61 msgid "bzip2 decompression failed" msgstr "bzip2 decompression failed" -#: libdwfl/libdwflP.h:58 +#: libdwfl/libdwflP.h:62 msgid "LZMA decompression failed" msgstr "LZMA decompression failed" -#: libdwfl/libdwflP.h:59 +#: libdwfl/libdwflP.h:63 msgid "no support library found for machine" msgstr "no support library found for machine" -#: libdwfl/libdwflP.h:60 +#: libdwfl/libdwflP.h:64 msgid "Callbacks missing for ET_REL file" msgstr "Callbacks missing for ET_REL file" -#: libdwfl/libdwflP.h:61 +#: libdwfl/libdwflP.h:65 msgid "Unsupported relocation type" msgstr "Unsupported relocation type" -#: libdwfl/libdwflP.h:62 +#: libdwfl/libdwflP.h:66 msgid "r_offset is bogus" msgstr "r_offset is bogus" -#: libdwfl/libdwflP.h:63 libelf/elf_error.c:111 libelf/elf_error.c:171 +#: libdwfl/libdwflP.h:67 libelf/elf_error.c:111 libelf/elf_error.c:171 msgid "offset out of range" msgstr "offset out of range" -#: libdwfl/libdwflP.h:64 +#: libdwfl/libdwflP.h:68 msgid "relocation refers to undefined symbol" msgstr "relocation refers to undefined symbol" -#: libdwfl/libdwflP.h:65 +#: libdwfl/libdwflP.h:69 msgid "Callback returned failure" msgstr "Callback returned failure" -#: libdwfl/libdwflP.h:66 +#: libdwfl/libdwflP.h:70 msgid "No DWARF information found" msgstr "No DWARF information found" -#: libdwfl/libdwflP.h:67 +#: libdwfl/libdwflP.h:71 msgid "No symbol table found" msgstr "No symbol table found" -#: libdwfl/libdwflP.h:68 +#: libdwfl/libdwflP.h:72 msgid "No ELF program headers" msgstr "No ELF program headers" -#: libdwfl/libdwflP.h:69 +#: libdwfl/libdwflP.h:73 msgid "address range overlaps an existing module" msgstr "address range overlaps an existing module" -#: libdwfl/libdwflP.h:72 +#: libdwfl/libdwflP.h:76 msgid "image truncated" msgstr "image truncated" -#: libdwfl/libdwflP.h:73 +#: libdwfl/libdwflP.h:77 msgid "ELF file opened" msgstr "ELF file opened" -#: libdwfl/libdwflP.h:74 +#: libdwfl/libdwflP.h:78 msgid "not a valid ELF file" msgstr "not a valid ELF file" -#: libdwfl/libdwflP.h:75 +#: libdwfl/libdwflP.h:79 msgid "cannot handle DWARF type description" msgstr "cannot handle DWARF type description" -#: libdwfl/libdwflP.h:76 +#: libdwfl/libdwflP.h:80 msgid "ELF file does not match build ID" msgstr "ELF file does not match build ID" -#: libdwfl/libdwflP.h:77 +#: libdwfl/libdwflP.h:81 msgid "corrupt .gnu.prelink_undo section data" msgstr "corrupt .gnu.prelink_undo section data" +#: libdwfl/libdwflP.h:82 +msgid "Internal error due to ebl" +msgstr "Internal error due to ebl" + +#: libdwfl/libdwflP.h:83 +msgid "Missing data in core file" +msgstr "Missing data in core file" + +#: libdwfl/libdwflP.h:84 +msgid "Invalid register" +msgstr "Invalid register" + +#: libdwfl/libdwflP.h:85 +msgid "Error reading process memory" +msgstr "Error reading process memory" + +#: libdwfl/libdwflP.h:86 +msgid "Couldn't find architecture of any ELF" +msgstr "Couldn't find architecture of any ELF" + +#: libdwfl/libdwflP.h:87 +msgid "Error parsing /proc filesystem" +msgstr "Error parsing /proc filesystem" + +#: libdwfl/libdwflP.h:88 +msgid "Invalid DWARF" +msgstr "Invalid DWARF" + +#: libdwfl/libdwflP.h:89 +msgid "Unsupported DWARF" +msgstr "Unsupported DWARF" + +#: libdwfl/libdwflP.h:90 +msgid "Unable to find more threads" +msgstr "Unable to find more threads" + +#: libdwfl/libdwflP.h:91 +msgid "Dwfl already has attached state" +msgstr "Dwfl already has attached state" + +#: libdwfl/libdwflP.h:92 +msgid "Dwfl has no attached state" +msgstr "Dwfl has no attached state" + +#: libdwfl/libdwflP.h:93 +msgid "Unwinding not supported for this architecture" +msgstr "Unwinding not supported for this architecture" + +#: libdwfl/libdwflP.h:94 +msgid "Invalid argument" +msgstr "Invalid argument" + +#: libdwfl/libdwflP.h:95 +msgid "Not an ET_CORE ELF file" +msgstr "Not an ET_CORE ELF file" + #: libebl/eblbackendname.c:42 msgid "No backend" msgstr "No backend" -#: libebl/eblcorenotetypename.c:86 libebl/eblobjecttypename.c:57 +#: libebl/eblcorenotetypename.c:102 libebl/eblobjecttypename.c:57 #: libebl/eblobjnotetypename.c:73 libebl/eblosabiname.c:77 #: libebl/eblsectionname.c:89 libebl/eblsectiontypename.c:119 #: libebl/eblsegmenttypename.c:83 @@ -487,7 +543,7 @@ msgstr "invalid size of source operand" msgid "invalid size of destination operand" msgstr "invalid size of destination operand" -#: libelf/elf_error.c:87 src/readelf.c:4697 +#: libelf/elf_error.c:87 src/readelf.c:5190 #, c-format msgid "invalid encoding" msgstr "invalid encoding" @@ -568,8 +624,8 @@ msgstr "data/scn mismatch" msgid "invalid section header" msgstr "invalid section header" -#: libelf/elf_error.c:187 src/readelf.c:6335 src/readelf.c:6780 -#: src/readelf.c:6881 src/readelf.c:7043 +#: libelf/elf_error.c:187 src/readelf.c:6980 src/readelf.c:7426 +#: src/readelf.c:7527 src/readelf.c:7689 #, c-format msgid "invalid data" msgstr "invalid data" @@ -633,32 +689,44 @@ msgid "Also show symbol or section names" msgstr "Also show symbol or section names" #: src/addr2line.c:64 +msgid "Also show symbol and the section names" +msgstr "Also show symbol and the section names" + +#: src/addr2line.c:65 msgid "Also show line table flags" msgstr "Also show line table flags" -#: src/addr2line.c:66 +#: src/addr2line.c:67 msgid "Treat addresses as offsets relative to NAME section." msgstr "Treat addresses as offsets relative to NAME section." -#: src/addr2line.c:68 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 +#: src/addr2line.c:69 +msgid "" +"Show all source locations that caused inline expansion of subroutines at the " +"address." +msgstr "" +"Show all source locations that caused inline expansion of subroutines at the " +"address." + +#: src/addr2line.c:72 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 #: src/strings.c:75 msgid "Miscellaneous:" msgstr "Miscellaneous:" -#: src/addr2line.c:77 +#: src/addr2line.c:81 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" "Locate source files and line information for ADDRs (in a.out by default)." -#: src/addr2line.c:81 +#: src/addr2line.c:85 msgid "[ADDR...]" msgstr "[ADDR...]" -#: src/addr2line.c:181 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:231 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 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:460 src/size.c:211 src/strings.c:219 -#: src/strip.c:213 src/unstrip.c:226 +#: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -669,30 +737,30 @@ 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:186 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:236 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 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:465 src/size.c:216 src/strings.c:224 -#: src/strip.c:218 src/unstrip.c:231 +#: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "Written by %s.\n" -#: src/addr2line.c:405 +#: src/addr2line.c:474 #, c-format msgid "Section syntax requires exactly one module" msgstr "Section syntax requires exactly one module" -#: src/addr2line.c:428 +#: src/addr2line.c:497 #, c-format msgid "offset %# lies outside section '%s'" msgstr "offset %# lies outside section ‘%s’" -#: src/addr2line.c:469 +#: src/addr2line.c:563 #, c-format msgid "cannot find symbol '%s'" msgstr "cannot find symbol ‘%s’" -#: src/addr2line.c:474 +#: src/addr2line.c:568 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "offset %# lies outside contents of ‘%s’" @@ -1131,8 +1199,8 @@ msgstr "Invalid value ‘%s’ for --gaps parameter." #: src/elfcmp.c:722 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:175 src/strip.c:450 src/strip.c:487 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1911 +#: src/unstrip.c:1940 #, c-format msgid "cannot open '%s'" msgstr "cannot open ‘%s’" @@ -1186,159 +1254,159 @@ msgstr "" msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "Pedantic checking of ELF files compliance with gABI/psABI spec." -#: src/elflint.c:78 src/readelf.c:113 +#: src/elflint.c:78 src/readelf.c:123 msgid "FILE..." msgstr "FILE..." -#: src/elflint.c:151 src/readelf.c:271 +#: src/elflint.c:155 src/readelf.c:292 #, c-format msgid "cannot open input file" msgstr "cannot open input file" -#: src/elflint.c:158 +#: src/elflint.c:162 #, c-format msgid "cannot generate Elf descriptor: %s\n" msgstr "cannot generate Elf descriptor: %s\n" -#: src/elflint.c:177 +#: src/elflint.c:181 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "error while closing Elf descriptor: %s\n" -#: src/elflint.c:181 +#: src/elflint.c:185 msgid "No errors" msgstr "No errors" -#: src/elflint.c:215 src/readelf.c:434 +#: src/elflint.c:219 src/readelf.c:468 msgid "Missing file name.\n" msgstr "Missing file name.\n" -#: src/elflint.c:294 +#: src/elflint.c:298 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr " error while freeing sub-ELF descriptor: %s\n" -#: src/elflint.c:302 +#: src/elflint.c:306 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "Not an ELF file - it has the wrong magic bytes at the start\n" -#: src/elflint.c:363 +#: src/elflint.c:371 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d is no known class\n" -#: src/elflint.c:368 +#: src/elflint.c:376 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d is no known data encoding\n" -#: src/elflint.c:372 +#: src/elflint.c:380 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "unknown ELF header version number e_ident[%d] == %d\n" -#: src/elflint.c:378 +#: src/elflint.c:386 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "unsupported OS ABI e_ident[%d] == ‘%s’\n" -#: src/elflint.c:384 +#: src/elflint.c:392 #, c-format msgid "unsupport ABI version e_ident[%d] == %d\n" msgstr "unsupport ABI version e_ident[%d] == %d\n" -#: src/elflint.c:389 +#: src/elflint.c:397 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] is not zero\n" -#: src/elflint.c:394 +#: src/elflint.c:402 #, c-format msgid "unknown object file type %d\n" msgstr "unknown object file type %d\n" -#: src/elflint.c:401 +#: src/elflint.c:409 #, c-format msgid "unknown machine type %d\n" msgstr "unknown machine type %d\n" -#: src/elflint.c:405 +#: src/elflint.c:413 #, c-format msgid "unknown object file version\n" msgstr "unknown object file version\n" -#: src/elflint.c:411 +#: src/elflint.c:419 #, c-format msgid "invalid program header offset\n" msgstr "invalid program header offset\n" -#: src/elflint.c:413 +#: src/elflint.c:421 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "executables and DSOs cannot have zero program header offset\n" -#: src/elflint.c:417 +#: src/elflint.c:425 #, c-format msgid "invalid number of program header entries\n" msgstr "invalid number of program header entries\n" -#: src/elflint.c:425 +#: src/elflint.c:433 #, c-format msgid "invalid section header table offset\n" msgstr "invalid section header table offset\n" -#: src/elflint.c:428 +#: src/elflint.c:436 #, c-format msgid "section header table must be present\n" msgstr "section header table must be present\n" -#: src/elflint.c:442 +#: src/elflint.c:450 #, c-format msgid "invalid number of section header table entries\n" msgstr "invalid number of section header table entries\n" -#: src/elflint.c:459 +#: src/elflint.c:467 #, c-format msgid "invalid section header index\n" msgstr "invalid section header index\n" -#: src/elflint.c:473 +#: src/elflint.c:481 #, c-format msgid "invalid number of program header table entries\n" msgstr "invalid number of program header table entries\n" -#: src/elflint.c:482 +#: src/elflint.c:490 #, c-format msgid "invalid machine flags: %s\n" msgstr "invalid machine flags: %s\n" -#: src/elflint.c:489 src/elflint.c:506 +#: src/elflint.c:497 src/elflint.c:514 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "invalid ELF header size: %hd\n" -#: src/elflint.c:492 src/elflint.c:509 +#: src/elflint.c:500 src/elflint.c:517 #, c-format msgid "invalid program header size: %hd\n" msgstr "invalid program header size: %hd\n" -#: src/elflint.c:495 src/elflint.c:512 +#: src/elflint.c:503 src/elflint.c:520 #, c-format msgid "invalid program header position or size\n" msgstr "invalid program header position or size\n" -#: src/elflint.c:498 src/elflint.c:515 +#: src/elflint.c:506 src/elflint.c:523 #, c-format msgid "invalid section header size: %hd\n" msgstr "invalid section header size: %hd\n" -#: src/elflint.c:501 src/elflint.c:518 +#: src/elflint.c:509 src/elflint.c:526 #, c-format msgid "invalid section header position or size\n" msgstr "invalid section header position or size\n" -#: src/elflint.c:562 +#: src/elflint.c:570 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1347,21 +1415,21 @@ msgstr "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " "group\n" -#: src/elflint.c:566 +#: src/elflint.c:574 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" msgstr "" "section [%2d] '%s': section group [%2zu] ‘%s’ does not precede group member\n" -#: src/elflint.c:582 src/elflint.c:1426 src/elflint.c:1476 src/elflint.c:1581 -#: src/elflint.c:2166 src/elflint.c:2680 src/elflint.c:2841 src/elflint.c:2971 -#: src/elflint.c:3143 src/elflint.c:4045 +#: 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 "section [%2d] '%s': cannot get section data\n" -#: src/elflint.c:595 src/elflint.c:1588 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1370,7 +1438,7 @@ msgstr "" "section [%2d] '%s': referenced as string table for section [%2d] ‘%s’ but " "type is not SHT_STRTAB\n" -#: src/elflint.c:618 +#: src/elflint.c:626 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1379,38 +1447,38 @@ msgstr "" "section [%2d] '%s': symbol table cannot have more than one extended index " "section\n" -#: src/elflint.c:629 +#: src/elflint.c:638 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" -#: src/elflint.c:638 +#: src/elflint.c:647 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "section [%2d] '%s': cannot get symbol %d: %s\n" -#: src/elflint.c:643 src/elflint.c:646 src/elflint.c:649 src/elflint.c:652 -#: src/elflint.c:655 src/elflint.c:658 +#: src/elflint.c:652 src/elflint.c:655 src/elflint.c:658 src/elflint.c:661 +#: src/elflint.c:664 src/elflint.c:667 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "section [%2d] '%s': ‘%s’ in zeroth entry not zero\n" -#: src/elflint.c:661 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "section [%2d] '%s': XINDEX for zeroth entry not zero\n" -#: src/elflint.c:671 +#: src/elflint.c:680 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "section [%2d] '%s': cannot get symbol %zu: %s\n" -#: src/elflint.c:680 +#: src/elflint.c:689 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "section [%2d] '%s': symbol %zu: invalid name value\n" -#: src/elflint.c:694 +#: src/elflint.c:704 #, c-format msgid "" "section [%2d] '%s': symbol %zu: too large section index but no extended " @@ -1419,7 +1487,7 @@ msgstr "" "section [%2d] '%s': symbol %zu: too large section index but no extended " "section index section\n" -#: src/elflint.c:700 +#: src/elflint.c:710 #, c-format msgid "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " @@ -1428,51 +1496,51 @@ msgstr "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " "st_shndx (%)\n" -#: src/elflint.c:712 +#: src/elflint.c:722 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid section index\n" msgstr "section [%2d] '%s': symbol %zu: invalid section index\n" -#: src/elflint.c:720 +#: src/elflint.c:730 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown type\n" msgstr "section [%2d] '%s': symbol %zu: unknown type\n" -#: src/elflint.c:726 +#: src/elflint.c:736 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" msgstr "section [%2d] '%s': symbol %zu: unknown symbol binding\n" -#: src/elflint.c:731 +#: src/elflint.c:741 #, c-format msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" msgstr "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" -#: src/elflint.c:739 +#: src/elflint.c:749 #, c-format msgid "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" msgstr "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" -#: src/elflint.c:743 +#: src/elflint.c:753 #, c-format msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" msgstr "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" -#: src/elflint.c:747 +#: src/elflint.c:757 #, c-format msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" msgstr "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" -#: src/elflint.c:779 +#: src/elflint.c:804 #, c-format msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" msgstr "section [%2d] '%s': symbol %zu: st_value out of bounds\n" -#: src/elflint.c:785 src/elflint.c:810 src/elflint.c:853 +#: 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 " @@ -1481,7 +1549,7 @@ msgstr "" "section [%2d] '%s': symbol %zu does not fit completely in referenced section " "[%2d] ‘%s’\n" -#: src/elflint.c:794 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1490,7 +1558,7 @@ msgstr "" "section [%2d] '%s': symbol %zu: referenced section [%2d] ‘%s’ does not have " "SHF_TLS flag set\n" -#: src/elflint.c:804 src/elflint.c:846 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1499,14 +1567,14 @@ msgstr "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " "[%2d] ‘%s’\n" -#: src/elflint.c:831 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" msgstr "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" -#: src/elflint.c:839 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1515,7 +1583,7 @@ msgstr "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " "‘%s’\n" -#: src/elflint.c:866 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1524,7 +1592,7 @@ msgstr "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " "sh_info\n" -#: src/elflint.c:873 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1533,12 +1601,12 @@ msgstr "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " "sh_info\n" -#: src/elflint.c:880 +#: src/elflint.c:905 #, c-format msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" msgstr "section [%2d] '%s': symbol %zu: non-local section symbol\n" -#: src/elflint.c:930 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1547,7 +1615,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " "[%2d]\n" -#: src/elflint.c:937 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1556,7 +1624,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " "‘%s’\n" -#: src/elflint.c:953 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -1565,7 +1633,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " "match %s section address %#\n" -#: src/elflint.c:960 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -1574,7 +1642,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " "match %s section size %\n" -#: src/elflint.c:968 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1583,7 +1651,7 @@ msgstr "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " "section\n" -#: src/elflint.c:984 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -1592,7 +1660,7 @@ msgstr "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " "segment address %#\n" -#: src/elflint.c:991 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -1601,7 +1669,7 @@ msgstr "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " "segment size %\n" -#: src/elflint.c:1004 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1610,22 +1678,22 @@ msgstr "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" "default visibility\n" -#: src/elflint.c:1008 +#: src/elflint.c:1033 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" msgstr "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" -#: src/elflint.c:1053 +#: src/elflint.c:1082 #, c-format msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" msgstr "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" -#: src/elflint.c:1062 src/elflint.c:1114 +#: 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 "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" -#: src/elflint.c:1087 src/elflint.c:1139 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1634,7 +1702,7 @@ msgstr "" "section [%2d] '%s': relative relocations after index %d as specified by " "DT_RELCOUNT\n" -#: src/elflint.c:1093 src/elflint.c:1145 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1643,47 +1711,47 @@ msgstr "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " "specified %d relative relocations\n" -#: src/elflint.c:1105 +#: src/elflint.c:1136 #, c-format msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" msgstr "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" -#: src/elflint.c:1187 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "section [%2d] '%s': invalid destination section index\n" -#: src/elflint.c:1200 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "section [%2d] '%s': invalid destination section type\n" -#: src/elflint.c:1208 +#: src/elflint.c:1238 #, c-format msgid "section [%2d] '%s': sh_info should be zero\n" msgstr "section [%2d] '%s': sh_info should be zero\n" -#: src/elflint.c:1215 +#: src/elflint.c:1245 #, c-format msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" msgstr "section [%2d] '%s': no relocations for merge-able sections possible\n" -#: src/elflint.c:1222 +#: src/elflint.c:1253 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" msgstr "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" -#: src/elflint.c:1282 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "text relocation flag set but there is no read-only segment\n" -#: src/elflint.c:1309 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "section [%2d] '%s': relocation %zu: invalid type\n" -#: src/elflint.c:1317 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1692,12 +1760,12 @@ msgstr "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " "type\n" -#: src/elflint.c:1325 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "section [%2d] '%s': relocation %zu: invalid symbol index\n" -#: src/elflint.c:1343 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -1706,12 +1774,12 @@ msgstr "" "section [%2d] '%s': relocation %zu: only symbol ‘_GLOBAL_OFFSET_TABLE_’ can " "be used with %s\n" -#: src/elflint.c:1360 +#: src/elflint.c:1391 #, c-format msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" msgstr "section [%2d] '%s': relocation %zu: offset out of bounds\n" -#: src/elflint.c:1375 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1720,7 +1788,7 @@ msgstr "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " "%s\n" -#: src/elflint.c:1396 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1729,64 +1797,64 @@ msgstr "" "section [%2d] '%s': relocation %zu: read-only section modified but text " "relocation flag not set\n" -#: src/elflint.c:1411 +#: src/elflint.c:1442 #, c-format msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" msgstr "section [%2d] '%s': relocations are against loaded and unloaded data\n" -#: src/elflint.c:1450 src/elflint.c:1500 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "section [%2d] '%s': cannot get relocation %zu: %s\n" -#: src/elflint.c:1576 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "more than one dynamic section present\n" -#: src/elflint.c:1594 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" -#: src/elflint.c:1599 src/elflint.c:1882 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "section [%2d] '%s': sh_info not zero\n" -#: src/elflint.c:1609 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" -#: src/elflint.c:1617 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" -#: src/elflint.c:1624 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "section [%2d] '%s': entry %zu: unknown tag\n" -#: src/elflint.c:1635 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" -#: src/elflint.c:1645 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "section [%2d] '%s': entry %zu: level 2 tag %s used\n" -#: src/elflint.c:1663 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" msgstr "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" -#: src/elflint.c:1676 +#: src/elflint.c:1710 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -1795,14 +1863,14 @@ msgstr "" "section [%2d] '%s': entry %zu: pointer does not match address of section " "[%2d] ‘%s’ referenced by sh_link\n" -#: src/elflint.c:1719 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" -#: src/elflint.c:1734 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -1811,71 +1879,71 @@ msgstr "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " "[%2d] ‘%s’\n" -#: src/elflint.c:1754 src/elflint.c:1782 +#: src/elflint.c:1788 src/elflint.c:1816 #, c-format msgid "section [%2d] '%s': contains %s entry but not %s\n" msgstr "section [%2d] '%s': contains %s entry but not %s\n" -#: src/elflint.c:1766 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "section [%2d] '%s': mandatory tag %s not present\n" -#: src/elflint.c:1775 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "section [%2d] '%s': no hash section present\n" -#: src/elflint.c:1790 src/elflint.c:1797 +#: 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 "section [%2d] '%s': not all of %s, %s, and %s are present\n" -#: src/elflint.c:1807 src/elflint.c:1811 +#: src/elflint.c:1841 src/elflint.c:1845 #, c-format msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" msgstr "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" -#: src/elflint.c:1817 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" -#: src/elflint.c:1828 src/elflint.c:1832 src/elflint.c:1836 src/elflint.c:1840 +#: 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 "section [%2d] '%s': %s tag missing in prelinked executable\n" -#: src/elflint.c:1852 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" msgstr "" "section [%2d] '%s': only relocatable files can have extended section index\n" -#: src/elflint.c:1862 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" "section [%2d] '%s': extended section index section not for symbol table\n" -#: src/elflint.c:1867 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "cannot get data for symbol section\n" -#: src/elflint.c:1870 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "section [%2d] '%s': entry size does not match Elf32_Word\n" -#: src/elflint.c:1877 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "section [%2d] '%s': extended index table too small for symbol table\n" -#: src/elflint.c:1892 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -1884,75 +1952,75 @@ msgstr "" "section [%2d] '%s': extended section index in section [%2zu] ‘%s’ refers to " "same symbol table\n" -#: src/elflint.c:1903 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "symbol 0 should have zero extended section index\n" -#: src/elflint.c:1915 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "cannot get data for symbol %zu\n" -#: src/elflint.c:1920 +#: src/elflint.c:1962 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "extended section index is % but symbol index is not XINDEX\n" -#: src/elflint.c:1936 src/elflint.c:1977 +#: 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 "" "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" -#: src/elflint.c:1948 src/elflint.c:1989 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "section [%2d] '%s': chain array too large\n" -#: src/elflint.c:1957 src/elflint.c:1998 +#: src/elflint.c:2004 src/elflint.c:2055 #, c-format msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" msgstr "section [%2d] '%s': hash bucket reference %zu out of bounds\n" -#: src/elflint.c:1963 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "section [%2d] '%s': hash chain reference %zu out of bounds\n" -#: src/elflint.c:2004 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "section [%2d] '%s': hash chain reference % out of bounds\n" -#: src/elflint.c:2019 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "section [%2d] '%s': bitmask size not power of 2: %u\n" -#: src/elflint.c:2030 +#: src/elflint.c:2092 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" msgstr "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" -#: src/elflint.c:2038 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "section [%2d] '%s': 2nd hash function shift too big: %u\n" -#: src/elflint.c:2070 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" msgstr "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" -#: src/elflint.c:2091 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -1961,51 +2029,51 @@ msgstr "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " "undefined\n" -#: src/elflint.c:2102 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" msgstr "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" -#: src/elflint.c:2133 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" -#: src/elflint.c:2138 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" msgstr "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" -#: src/elflint.c:2144 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "section [%2d] '%s': bitmask does not match names in the hash table\n" -#: src/elflint.c:2157 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "section [%2d] '%s': relocatable files cannot have hash tables\n" -#: src/elflint.c:2175 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "section [%2d] '%s': hash table not for dynamic symbol table\n" -#: src/elflint.c:2183 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "section [%2d] '%s': hash table entry size incorrect\n" -#: src/elflint.c:2188 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "section [%2d] '%s': not marked to be allocated\n" -#: src/elflint.c:2193 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2014,17 +2082,17 @@ msgstr "" "section [%2d] '%s': hash table has not even room for initial administrative " "entries\n" -#: src/elflint.c:2241 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "sh_link in hash sections [%2zu] ‘%s’ and [%2zu] ‘%s’ not identical\n" -#: src/elflint.c:2319 src/elflint.c:2323 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "section [%2zu] '%s': reference to symbol index 0\n" -#: src/elflint.c:2330 +#: src/elflint.c:2392 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2033,7 +2101,7 @@ msgstr "" "symbol %d referenced in new hash table in [%2zu] ‘%s’ but not in old hash " "table in [%2zu] ‘%s’\n" -#: src/elflint.c:2342 +#: src/elflint.c:2404 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2042,99 +2110,99 @@ msgstr "" "symbol %d referenced in old hash table in [%2zu] ‘%s’ but not in new hash " "table in [%2zu] ‘%s’\n" -#: src/elflint.c:2358 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "section [%2d] '%s': nonzero sh_%s for NULL section\n" -#: src/elflint.c:2378 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" msgstr "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" -#: src/elflint.c:2389 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "section [%2d] '%s': cannot get symbol table: %s\n" -#: src/elflint.c:2394 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "section [%2d] '%s': section reference in sh_link is no symbol table\n" -#: src/elflint.c:2400 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "section [%2d] '%s': invalid symbol index in sh_info\n" -#: src/elflint.c:2405 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "section [%2d] '%s': sh_flags not zero\n" -#: src/elflint.c:2412 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "section [%2d] '%s': cannot get symbol for signature\n" -#: src/elflint.c:2417 +#: src/elflint.c:2479 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "section [%2d] '%s': signature symbol cannot be empty string\n" -#: src/elflint.c:2423 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "section [%2d] '%s': sh_flags not set correctly\n" -#: src/elflint.c:2429 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "section [%2d] '%s': cannot get data: %s\n" -#: src/elflint.c:2438 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" -#: src/elflint.c:2443 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "section [%2d] '%s': section group without flags word\n" -#: src/elflint.c:2449 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "section [%2d] '%s': section group without member\n" -#: src/elflint.c:2453 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "section [%2d] '%s': section group with only one member\n" -#: src/elflint.c:2464 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "section [%2d] '%s': unknown section group flags\n" -#: src/elflint.c:2476 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "section [%2d] '%s': section index %Zu out of range\n" -#: src/elflint.c:2485 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "section [%2d] '%s': cannot get section header for element %zu: %s\n" -#: src/elflint.c:2492 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "section [%2d] '%s': section group contains another group [%2d] ‘%s’\n" -#: src/elflint.c:2498 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " @@ -2143,12 +2211,12 @@ msgstr "" "section [%2d] '%s': element %Zu references section [%2d] ‘%s’ without " "SHF_GROUP flag set\n" -#: src/elflint.c:2505 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "section [%2d] ‘%s’ is contained in more than one section group\n" -#: src/elflint.c:2694 +#: src/elflint.c:2756 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2157,7 +2225,7 @@ msgstr "" "section [%2d] ‘%s’ refers in sh_link to section [%2d] ‘%s’ which is no " "dynamic symbol table\n" -#: src/elflint.c:2705 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2166,76 +2234,76 @@ msgstr "" "section [%2d] ‘%s’ has different number of entries than symbol table [%2d] " "‘%s’\n" -#: src/elflint.c:2721 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "section [%2d] '%s': symbol %d: cannot read version data\n" -#: src/elflint.c:2737 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "section [%2d] '%s': symbol %d: local symbol with global scope\n" -#: src/elflint.c:2745 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "section [%2d] '%s': symbol %d: local symbol with version\n" -#: src/elflint.c:2759 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "section [%2d] '%s': symbol %d: invalid version index %d\n" -#: src/elflint.c:2764 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" -#: src/elflint.c:2774 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" -#: src/elflint.c:2826 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "more than one version reference section present\n" -#: src/elflint.c:2834 src/elflint.c:2963 +#: src/elflint.c:2897 src/elflint.c:3026 #, c-format msgid "section [%2d] '%s': sh_link does not link to string table\n" msgstr "section [%2d] '%s': sh_link does not link to string table\n" -#: src/elflint.c:2857 src/elflint.c:3015 +#: src/elflint.c:2920 src/elflint.c:3078 #, c-format msgid "section [%2d] '%s': entry %d has wrong version %d\n" msgstr "section [%2d] '%s': entry %d has wrong version %d\n" -#: src/elflint.c:2863 src/elflint.c:3021 +#: src/elflint.c:2926 src/elflint.c:3084 #, c-format msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" msgstr "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" -#: src/elflint.c:2871 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "section [%2d] '%s': entry %d has invalid file reference\n" -#: src/elflint.c:2879 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "section [%2d] '%s': entry %d references unknown dependency\n" -#: src/elflint.c:2891 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" -#: src/elflint.c:2898 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2244,7 +2312,7 @@ msgstr "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " "reference\n" -#: src/elflint.c:2905 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2253,7 +2321,7 @@ msgstr "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " "%#x, expected %#x\n" -#: src/elflint.c:2915 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2262,210 +2330,210 @@ msgstr "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " "name ‘%s’\n" -#: src/elflint.c:2926 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" msgstr "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" -#: src/elflint.c:2942 src/elflint.c:3100 +#: src/elflint.c:3005 src/elflint.c:3163 #, c-format msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" msgstr "section [%2d] '%s': entry %d has invalid offset to next entry\n" -#: src/elflint.c:2955 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "more than one version definition section present\n" -#: src/elflint.c:3000 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "section [%2d] '%s': more than one BASE definition\n" -#: src/elflint.c:3004 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" -#: src/elflint.c:3010 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "section [%2d] '%s': entry %d has unknown flag\n" -#: src/elflint.c:3034 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "section [%2d] '%s': entry %d has invalid name reference\n" -#: src/elflint.c:3041 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" -#: src/elflint.c:3050 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "section [%2d] '%s': entry %d has duplicate version name ‘%s’\n" -#: src/elflint.c:3069 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" msgstr "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" -#: src/elflint.c:3084 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" -#: src/elflint.c:3106 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "section [%2d] '%s': no BASE definition\n" -#: src/elflint.c:3122 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "section [%2d] '%s': unknown parent version ‘%s’\n" -#: src/elflint.c:3135 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "section [%2d] '%s': empty object attributes section\n" -#: src/elflint.c:3156 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "section [%2d] '%s': unrecognized attribute format\n" -#: src/elflint.c:3172 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" -#: src/elflint.c:3181 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "section [%2d] '%s': offset %zu: invalid length in attribute section\n" -#: src/elflint.c:3193 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "section [%2d] '%s': offset %zu: unterminated vendor name string\n" -#: src/elflint.c:3210 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" -#: src/elflint.c:3219 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "section [%2d] '%s': offset %zu: truncated attribute section\n" -#: src/elflint.c:3228 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" -#: src/elflint.c:3241 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" -#: src/elflint.c:3252 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" -#: src/elflint.c:3270 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" -#: src/elflint.c:3281 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "section [%2d] '%s': offset %zu: unterminated string in attribute\n" -#: src/elflint.c:3294 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" -#: src/elflint.c:3298 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" msgstr "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" -#: src/elflint.c:3308 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "section [%2d] '%s': offset %zu: vendor ‘%s’ unknown\n" -#: src/elflint.c:3314 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" -#: src/elflint.c:3403 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "cannot get section header of zeroth section\n" -#: src/elflint.c:3407 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "zeroth section has nonzero name\n" -#: src/elflint.c:3409 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "zeroth section has nonzero type\n" -#: src/elflint.c:3411 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "zeroth section has nonzero flags\n" -#: src/elflint.c:3413 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "zeroth section has nonzero address\n" -#: src/elflint.c:3415 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "zeroth section has nonzero offset\n" -#: src/elflint.c:3417 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "zeroth section has nonzero align value\n" -#: src/elflint.c:3419 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "zeroth section has nonzero entry size value\n" -#: src/elflint.c:3422 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2474,7 +2542,7 @@ msgstr "" "zeroth section has nonzero size value while ELF header has nonzero shnum " "value\n" -#: src/elflint.c:3426 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2483,7 +2551,7 @@ msgstr "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in shstrndx\n" -#: src/elflint.c:3430 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2492,46 +2560,46 @@ msgstr "" "zeroth section has nonzero link value while ELF header does not signal " "overflow in phnum\n" -#: src/elflint.c:3447 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "cannot get section header for section [%2zu] '%s': %s\n" -#: src/elflint.c:3456 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "section [%2zu]: invalid name\n" -#: src/elflint.c:3483 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "section [%2d] ‘%s’ has wrong type: expected %s, is %s\n" -#: src/elflint.c:3499 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "section [%2zu] ‘%s’ has wrong flags: expected %s, is %s\n" -#: src/elflint.c:3516 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" msgstr "" "section [%2zu] ‘%s’ has wrong flags: expected %s and possibly %s, is %s\n" -#: src/elflint.c:3534 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "section [%2zu] ‘%s’ present in object file\n" -#: src/elflint.c:3540 src/elflint.c:3572 +#: 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 "" "section [%2zu] ‘%s’ has SHF_ALLOC flag set but there is no loadable segment\n" -#: src/elflint.c:3545 src/elflint.c:3577 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -2540,76 +2608,76 @@ msgstr "" "section [%2zu] ‘%s’ has SHF_ALLOC flag not set but there are loadable " "segments\n" -#: src/elflint.c:3553 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" "section [%2zu] ‘%s’ is extension section index table in non-object file\n" -#: src/elflint.c:3596 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "section [%2zu] '%s': size not multiple of entry size\n" -#: src/elflint.c:3601 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "cannot get section header\n" -#: src/elflint.c:3611 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "section [%2zu] ‘%s’ has unsupported type %d\n" -#: src/elflint.c:3625 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" msgstr "" "section [%2zu] ‘%s’ contains invalid processor-specific flag(s) %#\n" -#: src/elflint.c:3632 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "section [%2zu] ‘%s’ contains unknown flag(s) %#\n" -#: src/elflint.c:3640 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "section [%2zu] '%s': thread-local data sections address not zero\n" -#: src/elflint.c:3648 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "section [%2zu] '%s': invalid section reference in link value\n" -#: src/elflint.c:3653 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "section [%2zu] '%s': invalid section reference in info value\n" -#: src/elflint.c:3660 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "section [%2zu] '%s': strings flag set without merge flag\n" -#: src/elflint.c:3665 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "section [%2zu] '%s': merge flag set but entry size is zero\n" -#: src/elflint.c:3683 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "section [%2zu] ‘%s’ has unexpected type %d for an executable section\n" -#: src/elflint.c:3692 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "section [%2zu] ‘%s’ is both executable and writable\n" -#: src/elflint.c:3721 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -2618,7 +2686,7 @@ msgstr "" "section [%2zu] ‘%s’ not fully contained in segment of program header entry " "%d\n" -#: src/elflint.c:3729 +#: src/elflint.c:3792 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -2627,7 +2695,7 @@ msgstr "" "section [%2zu] ‘%s’ has type NOBITS but is read from the file in segment of " "program header entry %d\n" -#: src/elflint.c:3738 +#: src/elflint.c:3801 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -2636,24 +2704,24 @@ msgstr "" "section [%2zu] ‘%s’ has not type NOBITS but is not read from the file in " "segment of program header entry %d\n" -#: src/elflint.c:3749 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "section [%2zu] ‘%s’ is executable in nonexecutable segment %d\n" -#: src/elflint.c:3759 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "section [%2zu] ‘%s’ is writable in unwritable segment %d\n" -#: src/elflint.c:3769 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" msgstr "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" -#: src/elflint.c:3775 +#: src/elflint.c:3838 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -2662,36 +2730,36 @@ msgstr "" "section [%2zu] '%s': ELF header says this is the section header string table " "but type is not SHT_TYPE\n" -#: src/elflint.c:3783 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" -#: src/elflint.c:3834 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "more than one version symbol table present\n" -#: src/elflint.c:3857 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "INTERP program header entry but no .interp section\n" -#: src/elflint.c:3868 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" "loadable segment [%u] is executable but contains no executable sections\n" -#: src/elflint.c:3874 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "loadable segment [%u] is writable but contains no writable sections\n" -#: src/elflint.c:3885 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -2700,194 +2768,194 @@ msgstr "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " "exist\n" -#: src/elflint.c:3898 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "duplicate version index %d\n" -#: src/elflint.c:3912 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" -#: src/elflint.c:3961 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "phdr[%d]: unknown core file note type % at offset %\n" -#: src/elflint.c:3965 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" msgstr "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" -#: src/elflint.c:3988 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" msgstr "phdr[%d]: unknown object file note type % at offset %Zu\n" -#: src/elflint.c:3992 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" msgstr "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" -#: src/elflint.c:4009 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: no note entries defined for the type of file\n" -#: src/elflint.c:4028 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: cannot get content of note section: %s\n" -#: src/elflint.c:4031 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: extra % bytes after last note\n" -#: src/elflint.c:4052 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "section [%2d] '%s': no note entries defined for the type of file\n" -#: src/elflint.c:4059 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "section [%2d] '%s': cannot get content of note section\n" -#: src/elflint.c:4062 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "section [%2d] '%s': extra % bytes after last note\n" -#: src/elflint.c:4080 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" "only executables, shared objects, and core files can have program headers\n" -#: src/elflint.c:4095 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "cannot get program header entry %d: %s\n" -#: src/elflint.c:4104 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "program header entry %d: unknown program header entry type %#\n" -#: src/elflint.c:4115 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "more than one INTERP entry in program header\n" -#: src/elflint.c:4123 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "more than one TLS entry in program header\n" -#: src/elflint.c:4130 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "static executable cannot have dynamic sections\n" -#: src/elflint.c:4144 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "dynamic section reference in program header has wrong offset\n" -#: src/elflint.c:4147 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "dynamic section size mismatch in program and section header\n" -#: src/elflint.c:4157 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "more than one GNU_RELRO entry in program header\n" -#: src/elflint.c:4178 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "loadable segment GNU_RELRO applies to is not writable\n" -#: src/elflint.c:4181 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" -#: src/elflint.c:4189 src/elflint.c:4212 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "%s segment not contained in a loaded segment\n" -#: src/elflint.c:4218 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "program header offset in ELF header and PHDR entry do not match" -#: src/elflint.c:4242 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "call frame search table reference in program header has wrong offset\n" -#: src/elflint.c:4245 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "call frame search table size mismatch in program and section header\n" -#: src/elflint.c:4258 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" -#: src/elflint.c:4266 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "call frame search table must be allocated\n" -#: src/elflint.c:4269 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "section [%2zu] ‘%s’ must be allocated\n" -#: src/elflint.c:4273 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "call frame search table must not be writable\n" -#: src/elflint.c:4276 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "section [%2zu] ‘%s’ must not be writable\n" -#: src/elflint.c:4281 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "call frame search table must not be executable\n" -#: src/elflint.c:4284 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "section [%2zu] ‘%s’ must not be executable\n" -#: src/elflint.c:4295 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "program header entry %d: file size greater than memory size\n" -#: src/elflint.c:4302 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "program header entry %d: alignment not a power of 2\n" -#: src/elflint.c:4305 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -2896,7 +2964,7 @@ msgstr "" "program header entry %d: file offset and virtual address not module of " "alignment\n" -#: src/elflint.c:4318 +#: src/elflint.c:4381 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -2905,12 +2973,12 @@ msgstr "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " "program header entry" -#: src/elflint.c:4352 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "cannot read ELF header: %s\n" -#: src/elflint.c:4378 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "text relocation flag set but not needed\n" @@ -3425,7 +3493,8 @@ msgstr "Warning: type of ‘%s’ changed from %s in %s to %s in %s" msgid "Warning: size of `%s' changed from % in %s to % in %s" msgstr "Warning: size of ‘%s’ changed from % in %s to % in %s" -#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:640 src/strip.c:562 +#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 +#: src/readelf.c:829 src/strip.c:563 #, c-format msgid "cannot determine number of sections: %s" msgstr "cannot determine number of sections: %s" @@ -3660,7 +3729,7 @@ msgstr "internal error: non-nobits section follows nobits section" msgid "cannot get header of 0th section: %s" msgstr "cannot get header of 0th section: %s" -#: src/ldgeneric.c:6930 src/unstrip.c:1810 +#: src/ldgeneric.c:6930 src/unstrip.c:1818 #, c-format msgid "cannot update ELF header: %s" msgstr "cannot update ELF header: %s" @@ -3824,7 +3893,7 @@ msgid "%s: INTERNAL ERROR %d (%s-%s): %s" msgstr "%s: INTERNAL ERROR %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:2124 +#: src/strip.c:2155 #, c-format msgid "while closing '%s'" msgstr "while closing ‘%s’" @@ -3867,17 +3936,17 @@ msgstr "%s%s%s: file format not recognized" msgid "cannot create search tree" msgstr "cannot create search tree" -#: src/nm.c:757 src/nm.c:1156 src/objdump.c:787 src/readelf.c:896 -#: src/readelf.c:1039 src/readelf.c:1187 src/readelf.c:1369 src/readelf.c:1569 -#: src/readelf.c:1755 src/readelf.c:1965 src/readelf.c:2219 src/readelf.c:2285 -#: src/readelf.c:2363 src/readelf.c:2861 src/readelf.c:2897 src/readelf.c:2959 -#: src/readelf.c:7270 src/readelf.c:8176 src/readelf.c:8323 src/readelf.c:8391 -#: src/size.c:417 src/size.c:491 src/strip.c:502 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 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:2196 src/readelf.c:2454 +#: src/readelf.c:2524 src/readelf.c:2606 src/readelf.c:3117 src/readelf.c:3153 +#: src/readelf.c:3216 src/readelf.c:7920 src/readelf.c:9002 src/readelf.c:9149 +#: src/readelf.c:9217 src/size.c:417 src/size.c:487 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "cannot get section header string table index" -#: src/nm.c:782 +#: src/nm.c:784 #, c-format msgid "" "\n" @@ -3890,7 +3959,7 @@ msgstr "" "Symbols from %s:\n" "\n" -#: src/nm.c:785 +#: src/nm.c:787 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3899,22 +3968,22 @@ msgstr "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" "\n" -#: src/nm.c:1166 +#: src/nm.c:1173 #, c-format msgid "%s: entry size in section `%s' is not what we expect" msgstr "%s: entry size in section ‘%s’ is not what we expect" -#: src/nm.c:1170 +#: src/nm.c:1177 #, c-format msgid "%s: size of section `%s' is not multiple of entry size" msgstr "%s: size of section ‘%s’ is not multiple of entry size" -#: src/nm.c:1428 +#: src/nm.c:1435 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Invalid operation" -#: src/nm.c:1485 +#: src/nm.c:1492 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: no symbols" @@ -3947,7 +4016,7 @@ msgstr "Only display information for section NAME." msgid "Show information from FILEs (a.out by default)." msgstr "Show information from FILEs (a.out by default)." -#: src/objdump.c:236 src/readelf.c:439 +#: src/objdump.c:236 src/readelf.c:473 msgid "No operation specified.\n" msgstr "No operation specified.\n" @@ -3956,11 +4025,11 @@ msgstr "No operation specified.\n" msgid "while close `%s'" msgstr "while close ‘%s’" -#: src/objdump.c:379 src/readelf.c:1664 src/readelf.c:1838 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2069 msgid "INVALID SYMBOL" msgstr "INVALID SYMBOL" -#: src/objdump.c:394 src/readelf.c:1695 src/readelf.c:1871 +#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2102 msgid "INVALID SECTION" msgstr "INVALID SECTION" @@ -4017,181 +4086,242 @@ msgstr "‘%s’ is no archive" msgid "error while freeing sub-ELF descriptor: %s" msgstr "error while freeing sub-ELF descriptor: %s" -#: src/readelf.c:67 +#: src/readelf.c:71 +msgid "ELF input selection:" +msgstr "ELF input selection:" + +#: src/readelf.c:73 +msgid "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" +msgstr "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" + +#: src/readelf.c:75 msgid "ELF output selection:" msgstr "ELF output selection:" -#: src/readelf.c:69 +#: src/readelf.c:77 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "All these plus -p .strtab -p .dynstr -p .comment" -#: src/readelf.c:70 +#: src/readelf.c:78 msgid "Display the dynamic segment" msgstr "Display the dynamic segment" -#: src/readelf.c:71 +#: src/readelf.c:79 msgid "Display the ELF file header" msgstr "Display the ELF file header" -#: src/readelf.c:73 +#: src/readelf.c:81 msgid "Display histogram of bucket list lengths" msgstr "Display histogram of bucket list lengths" -#: src/readelf.c:74 +#: src/readelf.c:82 msgid "Display the program headers" msgstr "Display the program headers" -#: src/readelf.c:76 +#: src/readelf.c:84 msgid "Display relocations" msgstr "Display relocations" -#: src/readelf.c:77 +#: src/readelf.c:85 msgid "Display the sections' headers" msgstr "Display the sections' headers" -#: src/readelf.c:79 +#: src/readelf.c:87 msgid "Display the symbol table" msgstr "Display the symbol table" -#: src/readelf.c:80 +#: src/readelf.c:88 msgid "Display versioning information" msgstr "Display versioning information" -#: src/readelf.c:81 +#: src/readelf.c:89 msgid "Display the ELF notes" msgstr "Display the ELF notes" -#: src/readelf.c:83 +#: src/readelf.c:91 msgid "Display architecture specific information, if any" msgstr "Display architecture specific information, if any" -#: src/readelf.c:85 +#: src/readelf.c:93 msgid "Display sections for exception handling" msgstr "Display sections for exception handling" -#: src/readelf.c:87 +#: src/readelf.c:95 msgid "Additional output selection:" msgstr "Additional output selection:" -#: src/readelf.c:89 +#: src/readelf.c:97 msgid "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" msgstr "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" -#: src/readelf.c:93 +#: src/readelf.c:101 msgid "Dump the uninterpreted contents of SECTION, by number or name" msgstr "Dump the uninterpreted contents of SECTION, by number or name" -#: src/readelf.c:95 +#: src/readelf.c:103 msgid "Print string contents of sections" msgstr "Print string contents of sections" -#: src/readelf.c:98 +#: src/readelf.c:106 msgid "Display the symbol index of an archive" msgstr "Display the symbol index of an archive" -#: src/readelf.c:100 +#: src/readelf.c:108 msgid "Output control:" msgstr "Output control:" -#: src/readelf.c:102 +#: src/readelf.c:110 msgid "Do not find symbol names for addresses in DWARF data" msgstr "Do not find symbol names for addresses in DWARF data" -#: src/readelf.c:104 +#: src/readelf.c:112 +msgid "" +"Display just offsets instead of resolving values to addresses in DWARF data" +msgstr "" +"Display just offsets instead of resolving values to addresses in DWARF data" + +#: src/readelf.c:114 msgid "Ignored for compatibility (lines always wide)" msgstr "Ignored for compatibility (lines always wide)" -#: src/readelf.c:109 +#: src/readelf.c:119 msgid "Print information from ELF file in human-readable form." msgstr "Print information from ELF file in human-readable form." -#: src/readelf.c:410 +#: src/readelf.c:441 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "Unknown DWARF debug section ‘%s’.\n" -#: src/readelf.c:476 +#: src/readelf.c:520 src/readelf.c:631 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "cannot generate Elf descriptor: %s" -#: src/readelf.c:488 +#: src/readelf.c:545 src/readelf.c:1099 src/readelf.c:1269 #, c-format -msgid "'%s' is not an archive, cannot print archive index" -msgstr "‘%s’ is not an archive, cannot print archive index" +msgid "cannot get section: %s" +msgstr "cannot get section: %s" -#: src/readelf.c:493 +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9169 +#: src/unstrip.c:352 src/unstrip.c:383 src/unstrip.c:432 src/unstrip.c:540 +#: src/unstrip.c:557 src/unstrip.c:593 src/unstrip.c:791 src/unstrip.c:1059 +#: src/unstrip.c:1250 src/unstrip.c:1310 src/unstrip.c:1431 src/unstrip.c:1484 +#: src/unstrip.c:1591 src/unstrip.c:1780 +#, c-format +msgid "cannot get section header: %s" +msgstr "cannot get section header: %s" + +#: src/readelf.c:562 +#, c-format +msgid "cannot get section name" +msgstr "cannot get section name" + +#: src/readelf.c:571 src/readelf.c:5221 src/readelf.c:7414 src/readelf.c:7516 +#: src/readelf.c:7674 +#, c-format +msgid "cannot get %s content: %s" +msgstr "cannot get %s content: %s" + +#: src/readelf.c:587 +#, c-format +msgid "cannot create temp file '%s'" +msgstr "cannot create temp file ‘%s’" + +#: src/readelf.c:596 +#, c-format +msgid "cannot write section data" +msgstr "cannot write section data" + +#: src/readelf.c:602 src/readelf.c:619 src/readelf.c:648 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "error while closing Elf descriptor: %s" -#: src/readelf.c:585 +#: src/readelf.c:609 +#, c-format +msgid "error while rewinding file descriptor" +msgstr "error while rewinding file descriptor" + +#: src/readelf.c:643 +#, c-format +msgid "'%s' is not an archive, cannot print archive index" +msgstr "‘%s’ is not an archive, cannot print archive index" + +#: src/readelf.c:742 +#, c-format +msgid "No such section '%s' in '%s'" +msgstr "No such section ‘%s’ in ‘%s’" + +#: src/readelf.c:769 #, c-format msgid "cannot stat input file" msgstr "cannot stat input file" -#: src/readelf.c:587 +#: src/readelf.c:771 #, c-format msgid "input file is empty" msgstr "input file is empty" -#: src/readelf.c:589 +#: src/readelf.c:773 #, c-format msgid "failed reading '%s': %s" msgstr "failed reading '%s': %s" -#: src/readelf.c:625 +#: src/readelf.c:814 #, c-format msgid "cannot read ELF header: %s" msgstr "cannot read ELF header: %s" -#: src/readelf.c:633 +#: src/readelf.c:822 #, c-format msgid "cannot create EBL handle" msgstr "cannot create EBL handle" -#: src/readelf.c:646 +#: src/readelf.c:835 #, c-format msgid "cannot determine number of program headers: %s" msgstr "cannot determine number of program headers: %s" -#: src/readelf.c:732 +#: src/readelf.c:921 msgid "NONE (None)" msgstr "NONE (None)" -#: src/readelf.c:733 +#: src/readelf.c:922 msgid "REL (Relocatable file)" msgstr "REL (Relocatable file)" -#: src/readelf.c:734 +#: src/readelf.c:923 msgid "EXEC (Executable file)" msgstr "EXEC (Executable file)" -#: src/readelf.c:735 +#: src/readelf.c:924 msgid "DYN (Shared object file)" msgstr "DYN (Shared object file)" -#: src/readelf.c:736 +#: src/readelf.c:925 msgid "CORE (Core file)" msgstr "CORE (Core file)" -#: src/readelf.c:741 +#: src/readelf.c:930 #, c-format msgid "OS Specific: (%x)\n" msgstr "OS Specific: (%x)\n" -#: src/readelf.c:743 +#: src/readelf.c:932 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Processor Specific: (%x)\n" -#: src/readelf.c:753 +#: src/readelf.c:942 msgid "" "ELF Header:\n" " Magic: " @@ -4199,7 +4329,7 @@ msgstr "" "ELF Header:\n" " Magic: " -#: src/readelf.c:757 +#: src/readelf.c:946 #, c-format msgid "" "\n" @@ -4208,117 +4338,117 @@ msgstr "" "\n" " Class: %s\n" -#: src/readelf.c:762 +#: src/readelf.c:951 #, c-format msgid " Data: %s\n" msgstr " Data: %s\n" -#: src/readelf.c:768 +#: src/readelf.c:957 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Ident Version: %hhd %s\n" -#: src/readelf.c:770 src/readelf.c:787 +#: src/readelf.c:959 src/readelf.c:976 msgid "(current)" msgstr "(current)" -#: src/readelf.c:774 +#: src/readelf.c:963 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:777 +#: src/readelf.c:966 #, c-format msgid " ABI Version: %hhd\n" msgstr " ABI Version: %hhd\n" -#: src/readelf.c:780 +#: src/readelf.c:969 msgid " Type: " msgstr " Type: " -#: src/readelf.c:783 +#: src/readelf.c:972 #, c-format msgid " Machine: %s\n" msgstr " Machine: %s\n" -#: src/readelf.c:785 +#: src/readelf.c:974 #, c-format msgid " Version: %d %s\n" msgstr " Version: %d %s\n" -#: src/readelf.c:789 +#: src/readelf.c:978 #, c-format msgid " Entry point address: %#\n" msgstr " Entry point address: %#\n" -#: src/readelf.c:792 +#: src/readelf.c:981 #, c-format msgid " Start of program headers: % %s\n" msgstr " Start of program headers: % %s\n" -#: src/readelf.c:793 src/readelf.c:796 +#: src/readelf.c:982 src/readelf.c:985 msgid "(bytes into file)" msgstr "(bytes into file)" -#: src/readelf.c:795 +#: src/readelf.c:984 #, c-format msgid " Start of section headers: % %s\n" msgstr " Start of section headers: % %s\n" -#: src/readelf.c:798 +#: src/readelf.c:987 #, c-format msgid " Flags: %s\n" msgstr " Flags: %s\n" -#: src/readelf.c:801 +#: src/readelf.c:990 #, c-format msgid " Size of this header: % %s\n" msgstr " Size of this header: % %s\n" -#: src/readelf.c:802 src/readelf.c:805 src/readelf.c:822 +#: src/readelf.c:991 src/readelf.c:994 src/readelf.c:1011 msgid "(bytes)" msgstr "(bytes)" -#: src/readelf.c:804 +#: src/readelf.c:993 #, c-format msgid " Size of program header entries: % %s\n" msgstr " Size of program header entries: % %s\n" -#: src/readelf.c:807 +#: src/readelf.c:996 #, c-format msgid " Number of program headers entries: %" msgstr " Number of program headers entries: %" -#: src/readelf.c:814 +#: src/readelf.c:1003 #, c-format msgid " (% in [0].sh_info)" msgstr " (% in [0].sh_info)" -#: src/readelf.c:817 src/readelf.c:834 src/readelf.c:848 +#: src/readelf.c:1006 src/readelf.c:1023 src/readelf.c:1037 msgid " ([0] not available)" msgstr " ([0] not available)" -#: src/readelf.c:821 +#: src/readelf.c:1010 #, c-format msgid " Size of section header entries: % %s\n" msgstr " Size of section header entries: % %s\n" -#: src/readelf.c:824 +#: src/readelf.c:1013 #, c-format msgid " Number of section headers entries: %" msgstr " Number of section headers entries: %" -#: src/readelf.c:831 +#: src/readelf.c:1020 #, c-format msgid " (% in [0].sh_size)" msgstr " (% in [0].sh_size)" -#: src/readelf.c:844 +#: src/readelf.c:1033 #, c-format msgid " (% in [0].sh_link)" msgstr " (% in [0].sh_link)" -#: src/readelf.c:852 +#: src/readelf.c:1041 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4327,7 +4457,7 @@ msgstr "" " Section header string table index: XINDEX%s\n" "\n" -#: src/readelf.c:856 +#: src/readelf.c:1045 #, c-format msgid "" " Section header string table index: %\n" @@ -4336,7 +4466,7 @@ msgstr "" " Section header string table index: %\n" "\n" -#: src/readelf.c:888 +#: src/readelf.c:1077 #, c-format msgid "" "There are %d section headers, starting at offset %#:\n" @@ -4345,11 +4475,11 @@ msgstr "" "There are %d section headers, starting at offset %#:\n" "\n" -#: src/readelf.c:898 +#: src/readelf.c:1087 msgid "Section Headers:" msgstr "Section Headers:" -#: src/readelf.c:901 +#: src/readelf.c:1090 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4357,7 +4487,7 @@ msgstr "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" -#: src/readelf.c:903 +#: src/readelf.c:1092 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4365,31 +4495,17 @@ msgstr "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" -#: src/readelf.c:910 src/readelf.c:1063 -#, c-format -msgid "cannot get section: %s" -msgstr "cannot get section: %s" - -#: src/readelf.c:917 src/readelf.c:1071 src/readelf.c:8343 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 -#, c-format -msgid "cannot get section header: %s" -msgstr "cannot get section header: %s" - -#: src/readelf.c:975 +#: src/readelf.c:1164 msgid "Program Headers:" msgstr "Program Headers:" -#: src/readelf.c:977 +#: src/readelf.c:1166 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" -#: src/readelf.c:980 +#: src/readelf.c:1169 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4397,12 +4513,12 @@ msgstr "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" -#: src/readelf.c:1020 +#: src/readelf.c:1226 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Requesting program interpreter: %s]\n" -#: src/readelf.c:1041 +#: src/readelf.c:1247 msgid "" "\n" " Section to Segment mapping:\n" @@ -4412,12 +4528,12 @@ msgstr "" " Section to Segment mapping:\n" " Segment Sections..." -#: src/readelf.c:1052 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1835 src/unstrip.c:1874 src/unstrip.c:1881 #, c-format msgid "cannot get program header: %s" msgstr "cannot get program header: %s" -#: src/readelf.c:1193 +#: src/readelf.c:1401 #, c-format msgid "" "\n" @@ -4432,7 +4548,7 @@ msgstr[1] "" "\n" "COMDAT section group [%2zu] ‘%s’ with signature ‘%s’ contains %zu entries:\n" -#: src/readelf.c:1198 +#: src/readelf.c:1406 #, c-format msgid "" "\n" @@ -4447,15 +4563,21 @@ msgstr[1] "" "\n" "Section group [%2zu] ‘%s’ with signature ‘%s’ contains %zu entries:\n" -#: src/readelf.c:1206 +#: src/readelf.c:1414 msgid "" msgstr "" -#: src/readelf.c:1220 +#: src/readelf.c:1428 msgid "" msgstr "" -#: src/readelf.c:1371 +#: src/readelf.c:1585 src/readelf.c:2202 src/readelf.c:2460 src/readelf.c:2530 +#: src/readelf.c:2812 src/readelf.c:2885 src/readelf.c:4488 +#, c-format +msgid "invalid sh_link value in section %Zu" +msgstr "invalid sh_link value in section %Zu" + +#: src/readelf.c:1588 #, c-format msgid "" "\n" @@ -4474,36 +4596,36 @@ msgstr[1] "" "Dynamic segment contains %lu entries:\n" " Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s’\n" -#: src/readelf.c:1383 +#: src/readelf.c:1598 msgid " Type Value\n" msgstr " Type Value\n" -#: src/readelf.c:1407 +#: src/readelf.c:1622 #, c-format msgid "Shared library: [%s]\n" msgstr "Shared library: [%s]\n" -#: src/readelf.c:1412 +#: src/readelf.c:1627 #, c-format msgid "Library soname: [%s]\n" msgstr "Library soname: [%s]\n" -#: src/readelf.c:1417 +#: src/readelf.c:1632 #, c-format msgid "Library rpath: [%s]\n" msgstr "Library rpath: [%s]\n" -#: src/readelf.c:1422 +#: src/readelf.c:1637 #, c-format msgid "Library runpath: [%s]\n" msgstr "Library runpath: [%s]\n" -#: src/readelf.c:1442 +#: src/readelf.c:1657 #, c-format msgid "% (bytes)\n" msgstr "% (bytes)\n" -#: src/readelf.c:1554 src/readelf.c:1740 +#: src/readelf.c:1770 src/readelf.c:1957 #, c-format msgid "" "\n" @@ -4512,7 +4634,7 @@ msgstr "" "\n" "Invalid symbol table at offset %#0\n" -#: src/readelf.c:1572 src/readelf.c:1757 +#: src/readelf.c:1788 src/readelf.c:1975 #, c-format msgid "" "\n" @@ -4531,7 +4653,7 @@ msgstr[1] "" "Relocation section [%2zu] ‘%s’ for section [%2u] ‘%s’ at offset %#0 " "contains %d entries:\n" -#: src/readelf.c:1587 +#: src/readelf.c:1803 src/readelf.c:1990 #, c-format msgid "" "\n" @@ -4546,30 +4668,30 @@ msgstr[1] "" "\n" "Relocation section [%2u] ‘%s’ at offset %#0 contains %d entries:\n" -#: src/readelf.c:1597 +#: src/readelf.c:1813 msgid " Offset Type Value Name\n" msgstr " Offset Type Value Name\n" -#: src/readelf.c:1599 +#: src/readelf.c:1815 msgid " Offset Type Value Name\n" msgstr " Offset Type Value Name\n" -#: src/readelf.c:1652 src/readelf.c:1663 src/readelf.c:1676 src/readelf.c:1694 -#: src/readelf.c:1706 src/readelf.c:1825 src/readelf.c:1837 src/readelf.c:1851 -#: src/readelf.c:1870 src/readelf.c:1883 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 +#: src/readelf.c:1922 src/readelf.c:2056 src/readelf.c:2068 src/readelf.c:2082 +#: src/readelf.c:2101 src/readelf.c:2114 msgid "" msgstr "" -#: src/readelf.c:1769 +#: src/readelf.c:2000 msgid " Offset Type Value Addend Name\n" msgstr " Offset Type Value Addend Name\n" -#: src/readelf.c:1771 +#: src/readelf.c:2002 msgid " Offset Type Value Addend Name\n" msgstr "" " Offset Type Value Addend Name\n" -#: src/readelf.c:1972 +#: src/readelf.c:2210 #, c-format msgid "" "\n" @@ -4584,40 +4706,40 @@ msgstr[1] "" "\n" "Symbol table [%2u] ‘%s’ contains %u entries:\n" -#: src/readelf.c:1978 +#: src/readelf.c:2215 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] " %lu local symbol String table: [%2u] ‘%s’\n" msgstr[1] " %lu local symbols String table: [%2u] ‘%s’\n" -#: src/readelf.c:1988 +#: src/readelf.c:2223 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Num: Value Size Type Bind Vis Ndx Name\n" -#: src/readelf.c:1990 +#: src/readelf.c:2225 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Num: Value Size Type Bind Vis Ndx Name\n" -#: src/readelf.c:2010 +#: src/readelf.c:2245 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2098 +#: src/readelf.c:2333 #, c-format msgid "bad dynamic symbol" msgstr "bad dynamic symbol" -#: src/readelf.c:2180 +#: src/readelf.c:2415 msgid "none" msgstr "none" -#: src/readelf.c:2197 +#: src/readelf.c:2432 msgid "| " msgstr "| " -#: src/readelf.c:2222 +#: src/readelf.c:2463 #, c-format msgid "" "\n" @@ -4636,17 +4758,17 @@ msgstr[1] "" "Version needs section [%2u] ‘%s’ contains %d entries:\n" " Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s’\n" -#: src/readelf.c:2245 +#: src/readelf.c:2484 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Version: %hu File: %s Cnt: %hu\n" -#: src/readelf.c:2258 +#: src/readelf.c:2497 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Name: %s Flags: %s Version: %hu\n" -#: src/readelf.c:2289 +#: src/readelf.c:2534 #, c-format msgid "" "\n" @@ -4665,17 +4787,17 @@ msgstr[1] "" "Version definition section [%2u] ‘%s’ contains %d entries:\n" " Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s’\n" -#: src/readelf.c:2319 +#: src/readelf.c:2562 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" -#: src/readelf.c:2334 +#: src/readelf.c:2577 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Parent %d: %s\n" -#: src/readelf.c:2566 +#: src/readelf.c:2816 #, c-format msgid "" "\n" @@ -4694,15 +4816,15 @@ msgstr[1] "" "Version symbols section [%2u] ‘%s’ contains %d entries:\n" " Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s’" -#: src/readelf.c:2596 +#: src/readelf.c:2844 msgid " 0 *local* " msgstr " 0 *local* " -#: src/readelf.c:2601 +#: src/readelf.c:2849 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:2632 +#: src/readelf.c:2890 #, c-format msgid "" "\n" @@ -4725,22 +4847,22 @@ msgstr[1] "" "buckets):\n" " Addr: %#0* Offset: %#08 Link to section: [%2u] ‘%s’\n" -#: src/readelf.c:2656 +#: src/readelf.c:2912 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Length Number % of total Coverage\n" -#: src/readelf.c:2658 +#: src/readelf.c:2914 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:2665 +#: src/readelf.c:2921 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:2678 +#: src/readelf.c:2934 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4749,12 +4871,12 @@ msgstr "" " Average number of tests: successful lookup: %f\n" "\t\t\t unsuccessful lookup: %f\n" -#: src/readelf.c:2696 src/readelf.c:2738 src/readelf.c:2779 +#: src/readelf.c:2952 src/readelf.c:2994 src/readelf.c:3035 #, c-format msgid "cannot get data for section %d: %s" msgstr "cannot get data for section %d: %s" -#: src/readelf.c:2833 +#: src/readelf.c:3089 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4763,7 +4885,7 @@ msgstr "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" -#: src/readelf.c:2907 +#: src/readelf.c:3164 #, c-format msgid "" "\n" @@ -4778,7 +4900,7 @@ msgstr[1] "" "\n" "Library list section [%2zu] ‘%s’ at offset %#0 contains %d entries:\n" -#: src/readelf.c:2921 +#: src/readelf.c:3178 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4786,7 +4908,7 @@ msgstr "" " Library Time Stamp Checksum Version " "Flags" -#: src/readelf.c:2971 +#: src/readelf.c:3228 #, c-format msgid "" "\n" @@ -4797,135 +4919,140 @@ msgstr "" "Object attributes section [%2zu] ‘%s’ of % bytes at offset " "%#0:\n" -#: src/readelf.c:2987 +#: src/readelf.c:3244 msgid " Owner Size\n" msgstr " Owner Size\n" -#: src/readelf.c:3013 +#: src/readelf.c:3270 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" -#: src/readelf.c:3045 +#: src/readelf.c:3302 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" -#: src/readelf.c:3050 +#: src/readelf.c:3307 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3085 +#: src/readelf.c:3342 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3088 +#: src/readelf.c:3345 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3091 +#: src/readelf.c:3348 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3098 +#: src/readelf.c:3355 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3101 +#: src/readelf.c:3358 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3137 +#: src/readelf.c:3403 #, c-format msgid "%s+%# <%s+%#>" msgstr "%s+%# <%s+%#>" -#: src/readelf.c:3140 +#: src/readelf.c:3406 #, c-format msgid "%s+%#0* <%s+%#>" msgstr "%s+%#0* <%s+%#>" -#: src/readelf.c:3145 +#: src/readelf.c:3411 #, c-format msgid "%# <%s+%#>" msgstr "%# <%s+%#>" -#: src/readelf.c:3148 +#: src/readelf.c:3414 #, c-format msgid "%#0* <%s+%#>" msgstr "%#0* <%s+%#>" -#: src/readelf.c:3154 +#: src/readelf.c:3420 #, c-format msgid "%s+%# <%s>" msgstr "%s+%# <%s>" -#: src/readelf.c:3157 +#: src/readelf.c:3423 #, c-format msgid "%s+%#0* <%s>" msgstr "%s+%#0* <%s>" -#: src/readelf.c:3161 +#: src/readelf.c:3427 #, c-format msgid "%# <%s>" msgstr "%# <%s>" -#: src/readelf.c:3164 +#: src/readelf.c:3430 #, c-format msgid "%#0* <%s>" msgstr "%#0* <%s>" -#: src/readelf.c:3169 +#: src/readelf.c:3435 #, c-format msgid "%s+%#" msgstr "%s+%#" -#: src/readelf.c:3172 +#: src/readelf.c:3438 #, c-format msgid "%s+%#0*" msgstr "%s+%#0*" -#: src/readelf.c:3554 +#: src/readelf.c:3820 msgid "empty block" msgstr "empty block" -#: src/readelf.c:3557 +#: src/readelf.c:3823 #, c-format msgid "%zu byte block:" msgstr "%zu byte block:" -#: src/readelf.c:3934 +#: src/readelf.c:4217 #, c-format msgid "%*s[%4] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:3970 +#: src/readelf.c:4274 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# used with different address sizes" -#: src/readelf.c:3977 +#: src/readelf.c:4281 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# used with different offset sizes" -#: src/readelf.c:4057 +#: src/readelf.c:4288 +#, c-format +msgid "%s %# used with different base addresses" +msgstr "%s %# used with different base addresses" + +#: src/readelf.c:4370 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4065 +#: src/readelf.c:4378 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] ... % bytes ...\n" -#: src/readelf.c:4087 +#: src/readelf.c:4404 #, c-format msgid "" "\n" @@ -4936,7 +5063,7 @@ msgstr "" "DWARF section [%2zu] ‘%s’ at offset %#:\n" " [ Code]\n" -#: src/readelf.c:4095 +#: src/readelf.c:4412 #, c-format msgid "" "\n" @@ -4945,30 +5072,30 @@ msgstr "" "\n" "Abbreviation section at offset %:\n" -#: src/readelf.c:4108 +#: src/readelf.c:4425 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** error while reading abbreviation: %s\n" -#: src/readelf.c:4124 +#: src/readelf.c:4441 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] offset: %, children: %s, tag: %s\n" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "yes" msgstr "yes" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "no" msgstr "no" -#: src/readelf.c:4162 +#: src/readelf.c:4478 src/readelf.c:4551 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "cannot get .debug_aranges content: %s" -#: src/readelf.c:4167 +#: src/readelf.c:4493 #, c-format msgid "" "\n" @@ -4983,25 +5110,20 @@ msgstr[1] "" "\n" "DWARF section [%2zu] ‘%s’ at offset %# contains %zu entries:\n" -#: src/readelf.c:4198 +#: src/readelf.c:4524 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4200 +#: src/readelf.c:4526 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" -#: src/readelf.c:4219 -#, c-format -msgid "cannot get .debug_ranges content: %s" -msgstr "cannot get .debug_ranges content: %s" - -#: src/readelf.c:4224 src/readelf.c:4728 src/readelf.c:5505 src/readelf.c:6006 -#: src/readelf.c:6121 src/readelf.c:6277 src/readelf.c:6699 +#: src/readelf.c:4556 src/readelf.c:4710 src/readelf.c:5231 src/readelf.c:6145 +#: src/readelf.c:6646 src/readelf.c:6766 src/readelf.c:6922 src/readelf.c:7345 #, c-format msgid "" "\n" @@ -5010,37 +5132,119 @@ msgstr "" "\n" "DWARF section [%2zu] ‘%s’ at offset %#:\n" -#: src/readelf.c:4248 src/readelf.c:6031 +#: src/readelf.c:4569 src/readelf.c:6171 +#, c-format +msgid "" +"\n" +"Table at offset %Zu:\n" +msgstr "" +"\n" +"Table at offset %Zu:\n" + +#: src/readelf.c:4573 src/readelf.c:5255 src/readelf.c:6180 +#, c-format +msgid "invalid data in section [%zu] '%s'" +msgstr "invalid data in section [%zu] ‘%s’" + +#: src/readelf.c:4589 +#, c-format +msgid "" +"\n" +" Length: %6\n" +msgstr "" +"\n" +" Length: %6\n" + +#: src/readelf.c:4601 +#, c-format +msgid " DWARF version: %6\n" +msgstr " DWARF version: %6\n" + +#: src/readelf.c:4605 +#, c-format +msgid "unsupported aranges version" +msgstr "unsupported aranges version" + +#: src/readelf.c:4616 +#, c-format +msgid " CU offset: %6\n" +msgstr " CU offset: %6\n" + +#: src/readelf.c:4622 +#, c-format +msgid " Address size: %6\n" +msgstr " Address size: %6\n" + +#: src/readelf.c:4626 +#, c-format +msgid "unsupported address size" +msgstr "unsupported address size" + +#: src/readelf.c:4631 +#, c-format +msgid "" +" Segment size: %6\n" +"\n" +msgstr "" +" Segment size: %6\n" +"\n" + +#: src/readelf.c:4635 +#, c-format +msgid "unsupported segment size" +msgstr "unsupported segment size" + +#: src/readelf.c:4675 +#, c-format +msgid " %s..%s (%)\n" +msgstr " %s..%s (%)\n" + +#: src/readelf.c:4678 +#, c-format +msgid " %s..%s\n" +msgstr " %s..%s\n" + +#: src/readelf.c:4687 +#, c-format +msgid " %Zu padding bytes\n" +msgstr " %Zu padding bytes\n" + +#: src/readelf.c:4705 +#, c-format +msgid "cannot get .debug_ranges content: %s" +msgstr "cannot get .debug_ranges content: %s" + +#: src/readelf.c:4735 src/readelf.c:6673 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4270 src/readelf.c:6053 +#: src/readelf.c:4757 src/readelf.c:6695 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] base address %s\n" -#: src/readelf.c:4276 src/readelf.c:6059 +#: src/readelf.c:4764 src/readelf.c:6702 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] empty list\n" -#: src/readelf.c:4285 +#: src/readelf.c:4775 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4287 +#: src/readelf.c:4777 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:4717 src/readelf.c:6768 src/readelf.c:6870 src/readelf.c:7028 +#: src/readelf.c:5210 #, c-format -msgid "cannot get %s content: %s" -msgstr "cannot get %s content: %s" +msgid "cannot get ELF: %s" +msgstr "cannot get ELF: %s" -#: src/readelf.c:4724 +#: src/readelf.c:5227 #, c-format msgid "" "\n" @@ -5049,12 +5253,7 @@ msgstr "" "\n" "Call frame information section [%2zu] ‘%s’ at offset %#:\n" -#: src/readelf.c:4752 src/readelf.c:5540 -#, c-format -msgid "invalid data in section [%zu] '%s'" -msgstr "invalid data in section [%zu] ‘%s’" - -#: src/readelf.c:4774 +#: src/readelf.c:5277 #, c-format msgid "" "\n" @@ -5063,50 +5262,50 @@ msgstr "" "\n" " [%6tx] Zero terminator\n" -#: src/readelf.c:4859 +#: src/readelf.c:5362 #, c-format msgid "invalid augmentation length" msgstr "invalid augmentation length" -#: src/readelf.c:4871 +#: src/readelf.c:5374 msgid "FDE address encoding: " msgstr "FDE address encoding: " -#: src/readelf.c:4877 +#: src/readelf.c:5380 msgid "LSDA pointer encoding: " msgstr "LSDA pointer encoding: " -#: src/readelf.c:4975 +#: src/readelf.c:5491 #, c-format msgid " (offset: %#)" msgstr " (offset: %#)" -#: src/readelf.c:4982 +#: src/readelf.c:5498 #, c-format msgid " (end offset: %#)" msgstr " (end offset: %#)" -#: src/readelf.c:5009 +#: src/readelf.c:5525 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sLSDA pointer: %#\n" -#: src/readelf.c:5060 +#: src/readelf.c:5577 #, c-format msgid "cannot get attribute code: %s" msgstr "cannot get attribute code: %s" -#: src/readelf.c:5069 +#: src/readelf.c:5586 #, c-format msgid "cannot get attribute form: %s" msgstr "cannot get attribute form: %s" -#: src/readelf.c:5084 +#: src/readelf.c:5601 #, c-format msgid "cannot get attribute value: %s" msgstr "cannot get attribute value: %s" -#: src/readelf.c:5342 +#: src/readelf.c:5894 #, c-format msgid "" "\n" @@ -5117,7 +5316,7 @@ msgstr "" "DWARF section [%2zu] ‘%s’ at offset %#:\n" " [Offset]\n" -#: src/readelf.c:5374 +#: src/readelf.c:5926 #, c-format msgid "" " Type unit at offset %:\n" @@ -5130,7 +5329,7 @@ msgstr "" "%, Offset size: %\n" " Type signature: %#, Type offset: %#\n" -#: src/readelf.c:5383 +#: src/readelf.c:5935 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5141,46 +5340,48 @@ msgstr "" " Version: %, Abbreviation section offset: %, Address size: " "%, Offset size: %\n" -#: src/readelf.c:5409 +#: src/readelf.c:5960 #, c-format msgid "cannot get DIE at offset % in section '%s': %s" msgstr "cannot get DIE at offset % in section '%s': %s" -#: src/readelf.c:5421 +#: src/readelf.c:5974 #, c-format msgid "cannot get DIE offset: %s" msgstr "cannot get DIE offset: %s" -#: src/readelf.c:5430 +#: src/readelf.c:5983 #, c-format msgid "cannot get tag of DIE at offset % in section '%s': %s" msgstr "cannot get tag of DIE at offset % in section '%s': %s" -#: src/readelf.c:5461 +#: src/readelf.c:6015 #, c-format msgid "cannot get next DIE: %s\n" msgstr "cannot get next DIE: %s\n" -#: src/readelf.c:5469 +#: src/readelf.c:6023 #, c-format msgid "cannot get next DIE: %s" msgstr "cannot get next DIE: %s" -#: src/readelf.c:5518 -#, c-format -msgid "cannot get line data section data: %s" -msgstr "cannot get line data section data: %s" - -#: src/readelf.c:5531 +#: src/readelf.c:6059 #, c-format msgid "" "\n" -"Table at offset %Zu:\n" +"DWARF section [%2zu] '%s' at offset %#:\n" +"\n" msgstr "" "\n" -"Table at offset %Zu:\n" +"DWARF section [%2zu] ‘%s’ at offset %#:\n" +"\n" -#: src/readelf.c:5586 +#: src/readelf.c:6158 +#, c-format +msgid "cannot get line data section data: %s" +msgstr "cannot get line data section data: %s" + +#: src/readelf.c:6226 #, c-format msgid "" "\n" @@ -5209,19 +5410,19 @@ msgstr "" "\n" "Opcodes:\n" -#: src/readelf.c:5607 +#: src/readelf.c:6247 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "invalid data at offset %tu in section [%zu] ‘%s’" -#: src/readelf.c:5622 +#: src/readelf.c:6262 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] %hhu argument\n" msgstr[1] " [%*] %hhu arguments\n" -#: src/readelf.c:5630 +#: src/readelf.c:6270 msgid "" "\n" "Directory table:" @@ -5229,7 +5430,7 @@ msgstr "" "\n" "Directory table:" -#: src/readelf.c:5646 +#: src/readelf.c:6286 msgid "" "\n" "File name table:\n" @@ -5239,7 +5440,7 @@ msgstr "" "File name table:\n" " Entry Dir Time Size Name" -#: src/readelf.c:5675 +#: src/readelf.c:6315 msgid "" "\n" "Line number statements:" @@ -5247,207 +5448,207 @@ msgstr "" "\n" "Line number statements:" -#: src/readelf.c:5751 +#: src/readelf.c:6391 #, c-format msgid " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" msgstr " special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n" -#: src/readelf.c:5756 +#: src/readelf.c:6396 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr " special opcode %u: address+%u = %s, line%+d = %zu\n" -#: src/readelf.c:5776 +#: src/readelf.c:6416 #, c-format msgid " extended opcode %u: " msgstr " extended opcode %u: " -#: src/readelf.c:5781 +#: src/readelf.c:6421 msgid " end of sequence" msgstr " end of sequence" -#: src/readelf.c:5798 +#: src/readelf.c:6438 #, c-format msgid " set address to %s\n" msgstr " set address to %s\n" -#: src/readelf.c:5819 +#: src/readelf.c:6459 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr " define new file: dir=%u, mtime=%, length=%, name=%s\n" -#: src/readelf.c:5832 +#: src/readelf.c:6472 #, c-format msgid " set discriminator to %u\n" msgstr " set discriminator to %u\n" -#: src/readelf.c:5837 +#: src/readelf.c:6477 msgid " unknown opcode" msgstr " unknown opcode" -#: src/readelf.c:5849 +#: src/readelf.c:6489 msgid " copy" msgstr " copy" -#: src/readelf.c:5860 +#: src/readelf.c:6500 #, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr " advance address by %u to %s, op_index to %u\n" -#: src/readelf.c:5864 +#: src/readelf.c:6504 #, c-format msgid " advance address by %u to %s\n" msgstr " advance address by %u to %s\n" -#: src/readelf.c:5875 +#: src/readelf.c:6515 #, c-format msgid " advance line by constant %d to %\n" msgstr " advance line by constant %d to %\n" -#: src/readelf.c:5883 +#: src/readelf.c:6523 #, c-format msgid " set file to %\n" msgstr " set file to %\n" -#: src/readelf.c:5893 +#: src/readelf.c:6533 #, c-format msgid " set column to %\n" msgstr " set column to %\n" -#: src/readelf.c:5900 +#: src/readelf.c:6540 #, c-format msgid " set '%s' to %\n" msgstr " set ‘%s’ to %\n" -#: src/readelf.c:5906 +#: src/readelf.c:6546 msgid " set basic block flag" msgstr " set basic block flag" -#: src/readelf.c:5915 +#: src/readelf.c:6555 #, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr " advance address by constant %u to %s, op_index to %u\n" -#: src/readelf.c:5919 +#: src/readelf.c:6559 #, c-format msgid " advance address by constant %u to %s\n" msgstr " advance address by constant %u to %s\n" -#: src/readelf.c:5937 +#: src/readelf.c:6577 #, c-format msgid " advance address by fixed value %u to %s\n" msgstr " advance address by fixed value %u to %s\n" -#: src/readelf.c:5946 +#: src/readelf.c:6586 msgid " set prologue end flag" msgstr " set prologue end flag" -#: src/readelf.c:5951 +#: src/readelf.c:6591 msgid " set epilogue begin flag" msgstr " set epilogue begin flag" -#: src/readelf.c:5960 +#: src/readelf.c:6600 #, c-format msgid " set isa to %u\n" msgstr " set isa to %u\n" -#: src/readelf.c:5969 +#: src/readelf.c:6609 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " unknown opcode with % parameter:" msgstr[1] " unknown opcode with % parameters:" -#: src/readelf.c:6001 +#: src/readelf.c:6641 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "cannot get .debug_loc content: %s" -#: src/readelf.c:6071 +#: src/readelf.c:6716 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6073 +#: src/readelf.c:6718 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6080 +#: src/readelf.c:6725 msgid " \n" msgstr " \n" -#: src/readelf.c:6132 src/readelf.c:6286 +#: src/readelf.c:6777 src/readelf.c:6931 #, c-format msgid "cannot get macro information section data: %s" msgstr "cannot get macro information section data: %s" -#: src/readelf.c:6211 +#: src/readelf.c:6856 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** non-terminated string at end of section" -#: src/readelf.c:6327 +#: src/readelf.c:6972 #, c-format msgid " Offset: 0x%\n" msgstr " Offset: 0x%\n" -#: src/readelf.c:6339 +#: src/readelf.c:6984 #, c-format msgid " Version: %\n" msgstr " Version: %\n" -#: src/readelf.c:6345 src/readelf.c:7055 +#: src/readelf.c:6990 src/readelf.c:7703 #, c-format msgid " unknown version, cannot parse section\n" msgstr " unknown version, cannot parse section\n" -#: src/readelf.c:6352 +#: src/readelf.c:6997 #, c-format msgid " Flag: 0x%\n" msgstr " Flag: 0x%\n" -#: src/readelf.c:6355 +#: src/readelf.c:7000 #, c-format msgid " Offset length: %\n" msgstr " Offset length: %\n" -#: src/readelf.c:6363 +#: src/readelf.c:7008 #, c-format msgid " .debug_line offset: 0x%\n" msgstr " .debug_line offset: 0x%\n" -#: src/readelf.c:6375 +#: src/readelf.c:7021 #, c-format msgid " extension opcode table, % items:\n" msgstr " extension opcode table, % items:\n" -#: src/readelf.c:6382 +#: src/readelf.c:7028 #, c-format msgid " [%]" msgstr " [%]" -#: src/readelf.c:6394 +#: src/readelf.c:7040 #, c-format msgid " % arguments:" msgstr " % arguments:" -#: src/readelf.c:6422 +#: src/readelf.c:7068 #, c-format msgid " no arguments." msgstr " no arguments." -#: src/readelf.c:6657 +#: src/readelf.c:7303 #, c-format msgid "vendor opcode not verified?" msgstr "vendor opcode not verified?" -#: src/readelf.c:6685 +#: src/readelf.c:7331 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" -#: src/readelf.c:6726 +#: src/readelf.c:7372 #, c-format msgid "" "\n" @@ -5458,12 +5659,12 @@ msgstr "" "DWARF section [%2zu] ‘%s’ at offset %#:\n" " %*s String\n" -#: src/readelf.c:6740 +#: src/readelf.c:7386 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** error while reading strings: %s\n" -#: src/readelf.c:6760 +#: src/readelf.c:7406 #, c-format msgid "" "\n" @@ -5472,7 +5673,7 @@ msgstr "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:6862 +#: src/readelf.c:7508 #, c-format msgid "" "\n" @@ -5481,22 +5682,22 @@ msgstr "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:6885 +#: src/readelf.c:7531 #, c-format msgid " LPStart encoding: %#x " msgstr " LPStart encoding: %#x " -#: src/readelf.c:6897 +#: src/readelf.c:7543 #, c-format msgid " TType encoding: %#x " msgstr " TType encoding: %#x " -#: src/readelf.c:6911 +#: src/readelf.c:7557 #, c-format msgid " Call site encoding: %#x " msgstr " Call site encoding: %#x " -#: src/readelf.c:6924 +#: src/readelf.c:7570 msgid "" "\n" " Call site table:" @@ -5504,7 +5705,7 @@ msgstr "" "\n" " Call site table:" -#: src/readelf.c:6938 +#: src/readelf.c:7584 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5517,12 +5718,12 @@ msgstr "" " Landing pad: %#\n" " Action: %u\n" -#: src/readelf.c:6998 +#: src/readelf.c:7644 #, c-format msgid "invalid TType encoding" msgstr "invalid TType encoding" -#: src/readelf.c:7019 +#: src/readelf.c:7665 #, c-format msgid "" "\n" @@ -5531,37 +5732,37 @@ msgstr "" "\n" "GDB section [%2zu] ‘%s’ at offset %# contains % bytes :\n" -#: src/readelf.c:7048 +#: src/readelf.c:7694 #, c-format msgid " Version: %\n" msgstr " Version: %\n" -#: src/readelf.c:7064 +#: src/readelf.c:7712 #, c-format msgid " CU offset: %#\n" msgstr " CU offset: %#\n" -#: src/readelf.c:7071 +#: src/readelf.c:7719 #, c-format msgid " TU offset: %#\n" msgstr " TU offset: %#\n" -#: src/readelf.c:7078 +#: src/readelf.c:7726 #, c-format msgid " address offset: %#\n" msgstr " address offset: %#\n" -#: src/readelf.c:7085 +#: src/readelf.c:7733 #, c-format msgid " symbol offset: %#\n" msgstr " symbol offset: %#\n" -#: src/readelf.c:7092 +#: src/readelf.c:7740 #, c-format msgid " constant offset: %#\n" msgstr " constant offset: %#\n" -#: src/readelf.c:7099 +#: src/readelf.c:7747 #, c-format msgid "" "\n" @@ -5570,7 +5771,7 @@ msgstr "" "\n" " CU list at offset %# contains %zu entries:\n" -#: src/readelf.c:7121 +#: src/readelf.c:7769 #, c-format msgid "" "\n" @@ -5579,7 +5780,7 @@ msgstr "" "\n" " TU list at offset %# contains %zu entries:\n" -#: src/readelf.c:7147 +#: src/readelf.c:7795 #, c-format msgid "" "\n" @@ -5588,7 +5789,7 @@ msgstr "" "\n" " Address list at offset %# contains %zu entries:\n" -#: src/readelf.c:7174 +#: src/readelf.c:7824 #, c-format msgid "" "\n" @@ -5597,17 +5798,17 @@ msgstr "" "\n" " Symbol table at offset %# contains %zu slots:\n" -#: src/readelf.c:7259 +#: src/readelf.c:7909 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "cannot get debug context descriptor: %s" -#: src/readelf.c:7409 src/readelf.c:8010 +#: src/readelf.c:8069 src/readelf.c:8675 src/readelf.c:8786 src/readelf.c:8844 #, c-format msgid "cannot convert core note data: %s" msgstr "cannot convert core note data: %s" -#: src/readelf.c:7750 +#: src/readelf.c:8416 #, c-format msgid "" "\n" @@ -5616,21 +5817,21 @@ msgstr "" "\n" "%*s... ..." -#: src/readelf.c:8109 +#: src/readelf.c:8919 msgid " Owner Data size Type\n" msgstr " Owner Data size Type\n" -#: src/readelf.c:8127 +#: src/readelf.c:8937 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:8161 +#: src/readelf.c:8987 #, c-format msgid "cannot get content of note section: %s" msgstr "cannot get content of note section: %s" -#: src/readelf.c:8188 +#: src/readelf.c:9014 #, c-format msgid "" "\n" @@ -5639,7 +5840,7 @@ msgstr "" "\n" "Note section [%2zu] ‘%s’ of % bytes at offset %#0:\n" -#: src/readelf.c:8211 +#: src/readelf.c:9037 #, c-format msgid "" "\n" @@ -5648,7 +5849,7 @@ msgstr "" "\n" "Note segment of % bytes at offset %#0:\n" -#: src/readelf.c:8257 +#: src/readelf.c:9083 #, c-format msgid "" "\n" @@ -5657,12 +5858,12 @@ msgstr "" "\n" "Section [%Zu] ‘%s’ has no data to dump.\n" -#: src/readelf.c:8263 src/readelf.c:8286 +#: src/readelf.c:9089 src/readelf.c:9112 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "cannot get data for section [%Zu] '%s': %s" -#: src/readelf.c:8267 +#: src/readelf.c:9093 #, c-format msgid "" "\n" @@ -5671,7 +5872,7 @@ msgstr "" "\n" "Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" -#: src/readelf.c:8280 +#: src/readelf.c:9106 #, c-format msgid "" "\n" @@ -5680,7 +5881,7 @@ msgstr "" "\n" "Section [%Zu] ‘%s’ has no strings to dump.\n" -#: src/readelf.c:8290 +#: src/readelf.c:9116 #, c-format msgid "" "\n" @@ -5689,7 +5890,7 @@ msgstr "" "\n" "String section [%Zu] ‘%s’ contains % bytes at offset %#0:\n" -#: src/readelf.c:8338 +#: src/readelf.c:9164 #, c-format msgid "" "\n" @@ -5698,7 +5899,7 @@ msgstr "" "\n" "section [%lu] does not exist" -#: src/readelf.c:8367 +#: src/readelf.c:9193 #, c-format msgid "" "\n" @@ -5707,12 +5908,12 @@ msgstr "" "\n" "section ‘%s’ does not exist" -#: src/readelf.c:8424 +#: src/readelf.c:9250 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "cannot get symbol index of archive '%s': %s" -#: src/readelf.c:8427 +#: src/readelf.c:9253 #, c-format msgid "" "\n" @@ -5721,7 +5922,7 @@ msgstr "" "\n" "Archive ‘%s’ has no symbol index\n" -#: src/readelf.c:8431 +#: src/readelf.c:9257 #, c-format msgid "" "\n" @@ -5730,12 +5931,12 @@ msgstr "" "\n" "Index of archive ‘%s’ has %Zu entries:\n" -#: src/readelf.c:8449 +#: src/readelf.c:9275 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "cannot extract member at offset %Zu in '%s': %s" -#: src/readelf.c:8454 +#: src/readelf.c:9280 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Archive member ‘%s’ contains:\n" @@ -5799,12 +6000,12 @@ msgstr "Invalid radix: %s" msgid "%s: file format not recognized" msgstr "%s: file format not recognized" -#: src/size.c:438 src/size.c:581 +#: src/size.c:438 src/size.c:571 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:606 +#: src/size.c:596 msgid "(TOTALS)\n" msgstr "(TOTALS)\n" @@ -5845,27 +6046,27 @@ msgstr "Alias for --radix=o" msgid "Print the strings of printable characters in files." msgstr "Print the strings of printable characters in files." -#: src/strings.c:260 src/strings.c:295 +#: src/strings.c:267 src/strings.c:302 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "invalid value ‘%s’ for %s parameter" -#: src/strings.c:306 +#: src/strings.c:313 #, c-format msgid "invalid minimum length of matched string size" msgstr "invalid minimum length of matched string size" -#: src/strings.c:591 +#: src/strings.c:596 #, c-format msgid "lseek64 failed" msgstr "lseek64 failed" -#: src/strings.c:608 src/strings.c:672 +#: src/strings.c:613 src/strings.c:677 #, c-format msgid "re-mmap failed" msgstr "re-mmap failed" -#: src/strings.c:645 +#: src/strings.c:650 #, c-format msgid "mprotect failed" msgstr "mprotect failed" @@ -5936,7 +6137,7 @@ msgstr "-f option specified twice" msgid "-F option specified twice" msgstr "-F option specified twice" -#: 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 option specified twice" @@ -5961,87 +6162,87 @@ msgstr "while opening ‘%s’" msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: cannot use -o or -f when stripping archive" -#: src/strip.c:467 +#: src/strip.c:468 #, c-format msgid "cannot open EBL backend" msgstr "cannot open EBL backend" -#: src/strip.c:517 src/strip.c:541 +#: src/strip.c:518 src/strip.c:542 #, c-format msgid "cannot create new file '%s': %s" msgstr "cannot create new file '%s': %s" -#: src/strip.c:601 +#: src/strip.c:608 #, c-format msgid "illformed file '%s'" msgstr "illformed file ‘%s’" -#: src/strip.c:905 src/strip.c:994 +#: src/strip.c:930 src/strip.c:1019 #, c-format msgid "while generating output file: %s" msgstr "while generating output file: %s" -#: src/strip.c:967 src/strip.c:1929 +#: src/strip.c:992 src/strip.c:1957 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: error while creating ELF header: %s" -#: src/strip.c:981 +#: src/strip.c:1006 #, c-format msgid "while preparing output for '%s'" msgstr "while preparing output for ‘%s’" -#: src/strip.c:1032 src/strip.c:1088 +#: src/strip.c:1057 src/strip.c:1114 #, c-format msgid "while create section header section: %s" msgstr "while create section header section: %s" -#: src/strip.c:1038 +#: src/strip.c:1063 #, c-format msgid "cannot allocate section data: %s" msgstr "cannot allocate section data: %s" -#: src/strip.c:1097 +#: src/strip.c:1123 #, c-format msgid "while create section header string table: %s" msgstr "while create section header string table: %s" -#: src/strip.c:1724 +#: src/strip.c:1752 #, c-format msgid "bad relocation" msgstr "bad relocation" -#: src/strip.c:1841 src/strip.c:1951 +#: src/strip.c:1869 src/strip.c:1979 #, c-format msgid "while writing '%s': %s" msgstr "while writing '%s': %s" -#: src/strip.c:1852 +#: src/strip.c:1880 #, c-format msgid "while creating '%s'" msgstr "while creating ‘%s’" -#: src/strip.c:1874 +#: src/strip.c:1902 #, c-format msgid "while computing checksum for debug information" msgstr "while computing checksum for debug information" -#: src/strip.c:1937 +#: src/strip.c:1965 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: error while reading the file: %s" -#: src/strip.c:1976 src/strip.c:1996 +#: src/strip.c:2004 src/strip.c:2024 #, c-format msgid "while writing '%s'" msgstr "while writing ‘%s’" -#: src/strip.c:2030 src/strip.c:2037 +#: src/strip.c:2061 src/strip.c:2068 #, c-format msgid "error while finishing '%s': %s" msgstr "error while finishing '%s': %s" -#: src/strip.c:2060 src/strip.c:2117 +#: src/strip.c:2091 src/strip.c:2148 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "cannot set access and modification date of ‘%s’" @@ -6078,260 +6279,283 @@ msgstr "Apply relocations to section contents in ET_REL files" msgid "Only list module and file names, build IDs" msgstr "Only list module and file names, build IDs" -#: src/unstrip.c:126 +#: src/unstrip.c:86 +msgid "Force combining files even if some ELF headers don't seem to match" +msgstr "Force combining files even if some ELF headers don't seem to match" + +#: src/unstrip.c:130 #, c-format msgid "-d option specified twice" msgstr "-d option specified twice" -#: src/unstrip.c:158 +#: src/unstrip.c:165 #, c-format msgid "only one of -o or -d allowed" msgstr "only one of -o or -d allowed" -#: src/unstrip.c:167 +#: src/unstrip.c:174 #, c-format msgid "-n cannot be used with explicit files or -o or -d" msgstr "-n cannot be used with explicit files or -o or -d" -#: src/unstrip.c:182 +#: src/unstrip.c:189 #, c-format msgid "output directory '%s'" msgstr "output directory ‘%s’" -#: src/unstrip.c:191 +#: src/unstrip.c:198 #, c-format msgid "exactly two file arguments are required" msgstr "exactly two file arguments are required" -#: 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, and -i options not allowed with explicit files" -#: src/unstrip.c:210 +#: src/unstrip.c:217 #, c-format msgid "-o or -d is required when using implicit files" msgstr "-o or -d is required when using implicit files" -#: src/unstrip.c:246 +#: src/unstrip.c:253 #, c-format msgid "cannot create ELF header: %s" msgstr "cannot create ELF header: %s" -#: src/unstrip.c:251 +#: src/unstrip.c:258 #, c-format msgid "cannot copy ELF header: %s" msgstr "cannot copy ELF header: %s" -#: src/unstrip.c:256 src/unstrip.c:1820 +#: src/unstrip.c:263 src/unstrip.c:1828 #, c-format msgid "cannot create program headers: %s" msgstr "cannot create program headers: %s" -#: src/unstrip.c:262 +#: src/unstrip.c:269 #, c-format msgid "cannot copy program header: %s" msgstr "cannot copy program header: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:279 #, c-format msgid "cannot copy section header: %s" msgstr "cannot copy section header: %s" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:282 src/unstrip.c:1509 #, c-format msgid "cannot get section data: %s" msgstr "cannot get section data: %s" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:284 src/unstrip.c:1511 #, c-format msgid "cannot copy section data: %s" msgstr "cannot copy section data: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:308 #, c-format msgid "cannot create directory '%s'" msgstr "cannot create directory ‘%s’" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:348 src/unstrip.c:765 src/unstrip.c:1543 #, c-format msgid "cannot get symbol table entry: %s" msgstr "cannot get symbol table entry: %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:364 src/unstrip.c:582 src/unstrip.c:603 src/unstrip.c:615 +#: src/unstrip.c:1564 src/unstrip.c:1694 src/unstrip.c:1718 #, c-format msgid "cannot update symbol table: %s" msgstr "cannot update symbol table: %s" -#: src/unstrip.c:367 +#: src/unstrip.c:374 #, c-format msgid "cannot update section header: %s" msgstr "cannot update section header: %s" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:413 src/unstrip.c:424 #, c-format msgid "cannot update relocation: %s" msgstr "cannot update relocation: %s" -#: src/unstrip.c:504 +#: src/unstrip.c:511 #, c-format msgid "cannot get symbol version: %s" msgstr "cannot get symbol version: %s" -#: src/unstrip.c:516 +#: src/unstrip.c:523 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "unexpected section type in [%Zu] with sh_link to symtab" -#: src/unstrip.c:764 +#: src/unstrip.c:771 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "invalid string offset in symbol [%Zu]" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:913 src/unstrip.c:1254 #, c-format msgid "cannot read section [%Zu] name: %s" msgstr "cannot read section [%Zu] name: %s" -#: src/unstrip.c:947 src/unstrip.c:966 src/unstrip.c:999 +#: src/unstrip.c:954 src/unstrip.c:973 src/unstrip.c:1006 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "cannot read ‘.gnu.prelink_undo’ section: %s" -#: src/unstrip.c:987 +#: src/unstrip.c:994 #, c-format msgid "invalid contents in '%s' section" msgstr "invalid contents in ‘%s’ section" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1049 src/unstrip.c:1374 #, c-format msgid "cannot find matching section for [%Zu] '%s'" msgstr "cannot find matching section for [%Zu] ‘%s’" -#: src/unstrip.c:1166 src/unstrip.c:1181 src/unstrip.c:1447 +#: src/unstrip.c:1174 src/unstrip.c:1189 src/unstrip.c:1455 #, c-format msgid "cannot add section name to string table: %s" msgstr "cannot add section name to string table: %s" -#: src/unstrip.c:1190 +#: src/unstrip.c:1198 #, c-format msgid "cannot update section header string table data: %s" msgstr "cannot update section header string table data: %s" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1225 src/unstrip.c:1229 #, c-format msgid "cannot get section header string table section index: %s" msgstr "cannot get section header string table section index: %s" -#: src/unstrip.c:1225 src/unstrip.c:1229 src/unstrip.c:1462 +#: src/unstrip.c:1233 src/unstrip.c:1237 src/unstrip.c:1470 #, c-format msgid "cannot get section count: %s" msgstr "cannot get section count: %s" -#: src/unstrip.c:1232 +#: src/unstrip.c:1240 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "more sections in stripped file than debug file -- arguments reversed?" -#: src/unstrip.c:1291 src/unstrip.c:1381 +#: src/unstrip.c:1299 src/unstrip.c:1389 #, c-format msgid "cannot read section header string table: %s" msgstr "cannot read section header string table: %s" -#: src/unstrip.c:1441 +#: src/unstrip.c:1449 #, c-format msgid "cannot add new section: %s" msgstr "cannot add new section: %s" -#: src/unstrip.c:1543 +#: src/unstrip.c:1551 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "symbol [%Zu] has invalid section index" -#: src/unstrip.c:1781 +#: src/unstrip.c:1789 #, c-format msgid "cannot read section data: %s" msgstr "cannot read section data: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1810 #, c-format msgid "cannot get ELF header: %s" msgstr "cannot get ELF header: %s" -#: src/unstrip.c:1830 +#: src/unstrip.c:1838 #, c-format msgid "cannot update program header: %s" msgstr "cannot update program header: %s" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1843 src/unstrip.c:1922 #, c-format msgid "cannot write output file: %s" msgstr "cannot write output file: %s" -#: src/unstrip.c:1883 +#: src/unstrip.c:1891 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "DWARF data not adjusted for prelinking bias; consider prelink -u" -#: src/unstrip.c:1886 +#: src/unstrip.c:1894 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" "DWARF data in ‘%s’ not adjusted for prelinking bias; consider prelink -u" -#: src/unstrip.c:1905 src/unstrip.c:1945 src/unstrip.c:1957 src/unstrip.c:2037 +#: src/unstrip.c:1913 src/unstrip.c:1964 src/unstrip.c:1976 src/unstrip.c:2062 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "cannot create ELF descriptor: %s" -#: src/unstrip.c:1963 -#, c-format -msgid "'%s' and '%s' do not seem to match" -msgstr "‘%s’ and ‘%s’ do not seem to match" +#: src/unstrip.c:1955 +msgid "WARNING: " +msgstr "WARNING: " + +#: src/unstrip.c:1957 +msgid ", use --force" +msgstr ", use --force" + +#: src/unstrip.c:1980 +msgid "ELF header identification (e_ident) different" +msgstr "ELF header identification (e_ident) different" + +#: src/unstrip.c:1983 +msgid "ELF header type (e_type) different" +msgstr "ELF header type (e_type) different" + +#: src/unstrip.c:1986 +msgid "ELF header machine type (e_machine) different" +msgstr "ELF header machine type (e_machine) different" + +#: src/unstrip.c:1989 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "stripped program header (e_phnum) smaller than unstripped" -#: src/unstrip.c:1994 +#: src/unstrip.c:2019 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "cannot find stripped file for module '%s': %s" -#: src/unstrip.c:1998 +#: src/unstrip.c:2023 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "cannot open stripped file ‘%s’ for module '%s': %s" -#: src/unstrip.c:2013 +#: src/unstrip.c:2038 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "cannot find debug file for module '%s': %s" -#: src/unstrip.c:2017 +#: src/unstrip.c:2042 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "cannot open debug file ‘%s’ for module '%s': %s" -#: src/unstrip.c:2030 +#: src/unstrip.c:2055 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "module ‘%s’ file ‘%s’ is not stripped" -#: src/unstrip.c:2061 +#: src/unstrip.c:2086 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "cannot cache section addresses for module '%s': %s" -#: src/unstrip.c:2194 +#: src/unstrip.c:2219 #, c-format msgid "no matching modules found" msgstr "no matching modules found" -#: src/unstrip.c:2203 +#: src/unstrip.c:2228 #, c-format msgid "matched more than one module" msgstr "matched more than one module" -#: src/unstrip.c:2250 +#: src/unstrip.c:2275 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -6339,7 +6563,7 @@ msgstr "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" -#: src/unstrip.c:2251 +#: src/unstrip.c:2276 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" diff --git a/po/es.gmo b/po/es.gmo index 8ae7f9c3bccc4cf9c6fd39fb1f25730c5eb94119..1485c390a82a650803fa263a50ab561448939d1e 100644 GIT binary patch delta 26953 zcmZvj2YgTG_s8!y#126cBu2#E5kwG#s;&0kdv7(0UR15xQCid}wKuh^l-k-FMb#>* zl+x0nr1gJ)zRz>p{QLSnuh+@@ob#M#k9%*z`GaX@A4ua~&yw<8pW`@>QaDaDT$aai zP6Rqma8<|2h+VdY2s{h3z!$I#%s9Yta=_{^A8ZGs z;5fJdt{C9BP6d=o105$bd>vMSlVN#y6c&bm!|broAd{Z})u0QD!?kcKya?OEPJzDy+VDE(S@P+lqy>9%SVNLw2U|IMR zjD=CdO~+b8jeImL1?R$W_!-p9T!Zysg%OTZ0J?9ZsORfp8+ZwZz?hMalLpp;8bKqd z0;8d3Y&lfLzgT7%W%fiNDF16P1MCem!Qn6%PJ-Ft0?5E!XA4RW9M_>5eg@fpPS6`> zZL`8q>;%geQ1ShsDw+hvF zBgi3eoH3>Ykx*;a0Op6oVI*7xW8i+Mz492U;=f^97&_K;JP*{KDQDRdYRN~z2-!*Gt;4Fdj16FKQ+o4o3RCI3in!`g<6_>P)iW-ma&Ujz6#Z`j<7UbX#J<5 zX5=o6fT0u3h)cs)up2@RAaNp7p`NV3q22j0R1c5BAovwj2d`V+g|XO=peicxwz*(> z!>rhoU^H9^bupcSIz7*zW+vYxb2{Q-UhI}GigxEHsI^%OwN^KvcKzQ_BMX^q{57Gb zygO_O=fHgMKGXn$rkI9uL(N=ysD>KDcsSJBTi}C~tp7O_t=)kcX5?p~I`S=4k2B9S z6&HmKu`9t6@Ey1l?t$7vgJzi#&w$mi_d<<43D$;%W^;t$AgFq`!a6$tCsD$2gv>E_ zdMOx%-5P4-W1t$`1htk|p?2>xSQ>`SHG88rR7VCw<8V_~Vj)EG%B+Cz>;ts$t z_&sFFog|nV`W7(%=~2?6M8i<1z?!fjY!6GpjW9pF1~sC9_ssDs2sN_iP*Xe=Y6;dt zP4Q8v)AR@`?itj;iob7e%=q`2e;t#0IJA}{p*GDrSQ371{V5lk8Hk0!`0K*#ur1Vx zhe0(w8)ktUq5sB%>evmK8NP&tVdh0!YCwS>m>GK~p-@-}MH>?VmLiPLx)JT7Wd0>VQ%^DVmxv`r=jdU2y24}$X@FS>tu0ahT*9x=AYeTg& z3g*)J-;9zM#~G+y`WUK*`Bs|ERvD_|*Pt5g0o9?mVLrGRs=|X%o9lO|_>(O<5kw z-wet>7HSW?3v^z$h5K-rN^Wq3R#Fp7}3?l88ec*#{%xO_&S%Hkjj<2dct~ zuqkW@+ruqT4QAYEUN$3PdF-xGr)Uw>RG)-t;T6j}mXBN%_3RmJ2O~D|8U{zgI`9P4 z=E}O+taTk&1iJ&&lum&fz!In#ISO?@d;^QZUtuYjXN!4?HiWNYkA*d$dl*Fp(rh(1 zSw5HtyCGD^23mWrwYR}Y{9nTu_&d}R6xn8Gs5&fw-Obw5pk`tNjE3JrwU=SLf5}~^ z5Q;WUP2+I7LRByUs^T?JBR&LG!2=ixbM7$ZD#JMJHc%Z-wEmqi7W+I@J?TC+dm$gx zW^M)Z==={v(RrT*BjH-8wLWS651~4cYNwf@Xs9V|2Q`xEP$OIoRqi6xUV3KzxptW) zst>c^9|l!^GAyd|zY9epxCK>V#BQ_sVqr1tX0QYt2eZLVP$NAGwTtgV4IpTbnYltx z9ccj7k%2G=oCh_tn_wus09_rsA5l~w?OqdD3~KkkYS|SkZama|unek0$Dk_w4XQ&C z`^=`R0=0*FLv?T})F#~sHS({aIu^K}`Bw!+_nQhEL5=WDm>tfCnt{zwQ~WJdMd>~< zdm#p@qg`P<91nBA15gcIhB@J1Fam}jFf$wrW3d|_VE&7vOu-?3Y;$bfG zUx#5Z(c0^vI(Qsv27iSbVc0QKPvX5_h{8j6LHu&K3&L5*~d^&f$nf$w1@nDVIUNCH&(Hc%ZH0W0YI zuSUs?<2$GxKZUwFgN~Vo;-GeWYp9M+hU(aRurk~MJ^T2|%?^Hr51iL`>d>T{-)9}&UC0Gl)o8Ndm~{*=uSb2ML7(sz~`_wtZ?4E zAWVQ7@iD05a}fr^r%)YEdBHT08@`HN11fGBjE1YBX7n;F3R8V;o*|`SX`TO8C<>eg zi@|+RJ^TTx$A7>87;(|O8Rdo{*aKmDI1#Etv!NPZ4ujwUm>Hh7`PZSQ{4q=eQ(saX z>mQ7g1xIce21`R7$J$UM9Ar5SDsClI2X{gL%s_3ji%?5)+cM2%^I=m0s>3l*Fx3_Ac~}X?!x^wD zJPGT_bTO3V%87zdkTe`)P}H_av-0^8!>1+_V|erGCd2Q}hl zP&4s0)F}zNWv=E}7=t|w7Kf{0b$9`4#?ab#lxXa(;-+AI(NW=R_!%s#^Pl3WDG&$iDgf4lr(kE8?N>7+qoCIG3-}rg`pryvJE)P*xAt+^ z4m;p?{tyK_Ld741jM&Nahv`6bSdI3b`6wFEWvHns@XYMyKCm42hfob%hKft~rDH9#=T_z)xgx3W{MBP_So4S zpZ`1$hiYIGRDsk!pZ^|c1v_BxfLhb60Y3j)H;3i1=fV>3Bvglz_C(5l}p(&;OgxUQkoL8}@^Nfj*}j90Ik5mtb+2E0xcGyy`;DU?MCFPs1wE zm)hhfK>t9YmgF$hQvB$m6hR3~ z{v~J$wP%(?HFybXhBBx3`CrAF!u;5Sq4tD3A4SJ&KYRr~w03j`pVJY$ljT9EiXwx| z$htr^yc}vo=V4*^9I9jaGMWZELhXgIumSuWYUZ+L^66F2brMjtX6>M+ZXOJUCtwh~ z0kgxOU{07S*f1Z=hMi#93TD6_1T(?0P#u~9brJ1^8u@h?3{zzG@i^!Fg`kwgQ3xuq z1ym2;gjwNwm=}Hu^T6+5B=lub1uPAezZ?vM&7o$rAB={Jq2kWi{F^Wr_8%|>?K`1a zef~F{98evo4Ap_|Pz}$8t>F&X4rUB79q0?Au&2X@aI^Klgz2#(Lx~GuQ$y{k2HAZ6 z7m-m=du}H5|NU<_iq`&Xm;>g>ZaP#3s$fg_9()VdhdFbYCF%{erY>v_&p;i!eBowu zHHI~@M?meB1C~F-Y1mN_KGzw9vN6I;N$#9xt>d9O(i~=n1EHpHJRA(?LG6uHxeP;K zM(il487mD{uBo-VTTX^rqP0*RI+%;|ACB?_hej5Z+hnwX8u@gnO|%s6Pj*(CuIs!H2H(;XtQD#ar zTfH^*;p^i@# zsAKXP)UoRbtHCi)yZr#vR9=Uv;BQb3CqZq>f(6ZSs{<830LniT>NszOkvjh;QFK#1 zfOTMjLgv^Egk`XoLG}0oR0U719ah+kyd2b0)rC5C!>zpvYJ}%tLHHMpgZYb?0k((P zbpHFJq$T5RsGiP(I)D7VP#s+jb!?A8-52Rgnx|YG z)LwcAR)?3MF0$}arsE}{_Dp-|>Ixl#qNmj~sOR(vYdg_C{~wpCLalXOm>PD5+HAd{ zDjs4v3FgIK2(_g9t^K=Y_R?lR6`|T2Uz+o;0ta!#!&^|BEl-S@>UgLZjkZwde;riM zKe0Rqbr1Xib>4r2>0s(Irh{3aE~p6D6!wOixlf?#xmLzCo8}3Q$~dCRnziZ#HP!Dy zZLUwCHrIWqCCO3FoaatZn{qkSoqhyrlih;ad=atc)YOD}v6%vOL*9j&(Ga)1|1szk zgX&o=7z2AkHM9__z;{r8ug?@`?uQrgX48gMHXVOcpmk&S`f;T)(X{R7^DC99Y{ zmbt2F$BjX0LPmF}3t~6aUH%=^?k%5SIyMFN#a;u|P)IfNq7egiym~=(cox*-{36s+ zW~^>5qGC|HzA>x}XF!(Tbxxr~;`j;XgBf2j9f^T@4`>Uuy9Yy^k|oxE9I7MNp(;#* zDqpdNDc=EV<|aeMeQf>bVI+1EtfTXv>s52!dqQo-Sy0DjE7bY^6>4UJYMOVsSQv@z zLhXrVP^aK4s1e_R+B?2l<{?%PDlP%)88HZIv+jn4Y2P`CqKoAz)WwsfwrQXu)NyMI zwX3^A6&wIH#p9qxwi|YY7om<_Y#p=agP=C=YN)9{54A*@>Y5I=fUX|1qfvCjy$dtI zW3Udq0Cntg*E1{)^%SfD%fg{h9a#gl$!seu7ZK^2-J+7wEp{+sb4e4t^m|hHi9};Ltp}&3pLR5 zuq_O1=$fmtb3>p1vw9=c2!DdwY&jd5y-*VdVNZox;{{M_z5{C09fvx$51~4ir?Gh< zsRDHmG=LiMNT~d!HvfQ&q6W`EO;HlmX3NvWyg1Z`YIr8pQY?nLU^YXI;2zYP*Jx@s z=bNw$_A#h6e*v{5<(v7O&Tt6SOkRMRVfP7&Do)efFanmtE(tZlZctM>5~{#L$UWq2 zfvWgp7!QAj+Dj!`7}kP%0qG32=98h0@n)zQyb9@v>->q*5=XX{X2b(wH1@|(72k!; zVZK(Tf>BU2v-eQQ&338)d)g_`3^n554yOK!P%}3SYJeX= zR}G&+(HaGIG*esxssn9cZ8!pI$__#;&F@faS*Vj)f@V-R+-#UuaZnvT2^D_@YS*Xl zY}zRb)ozo{oPT9Z$Dv)l9@c_)pb8f6V%D}j)G2W-H$mlJgX&1et|qRMWqYW5!-YfO zdN>y5?q)8e#jrj0_HM2jLFVpesvE#yGA2M>xrtCW;u6dCP&2g~wu3ieCs?_M&*=h} zK;4MGo@T8pz!7CmK5PmL4K*DZ4Rud^2(|Xdp>9TJm^rSMpq8W~RNO?U z0j`7Pb^gzxXe!gaZk8Y(YF7`1n(}2(=lDygWA>-@7a49UY6UgrK#goU z)YKk>x;N6lVP>)!Y>qt*Ccv9edo1s0&c7TJ+k6W&c7=B28X6R7+VD^Lrv)*sF_&| zwPr`5*7gz9CM+_}?D|GfPs<)quitM#<E=SE!74U>H0N zwI^;v{|F|S3#t-S#e<-B`vR!*d=RR_TbAkGGIk79J#C=krb7*A6RZi{%P6WS&qOoz zwV|ebDAeXz0TbX=s2eQT+h)WSphngZs^WoA9hd`kAMCOG0cxs4Cz}pl3uqA3OuPd%l5J2O`4j41h?r^~*Y#l}b_du7 zy096%0*mSVmzrko=(bSj{XIAVZiPXx>^tT-Rfk%NPEZX`g5hu@)X0xRT~t3qosvw` z&62$W`(clS-Qf3789-a4JlIpTin3Rib&VuLm{21yD1(1!jTQppNO!iS~R4&NGfuPz~0A zRpDr;8*(3vgioO=2zl3Zs1VeQ)wlL&sLi(ws{C1~`ZCWqc5SE`n*w#wt#VPcna)CO zu4ho2C-(v~!X{7+z5(mN8L%?E1na}l_YAwhw%D6tMwtG6a~i^-);b=l;rdXgst@c6 z-S<$mc1cigD%lpAtF;+a&u2od`RCUE2x`+6US#~8p&FP5b;B)$0q_9q4i7@fyplkHDmRmHs3g?y|DtS zp;J(M;4W1CFQH~MY>A!)F2@6<6pmgnC43KRcYgpivb|6pISD(%dr&h|cd6N= zIZS|GLX`_%W;z-PwPY2cHs?sF8T|zMfB$zEWeAR#<>u-2k!6Yx&0A|{sFB@(THAmX zW{EPxZrJr;MYsj3fd_CXj9zKps8&KfmVbqci~GpjfJ32M565v71%#|JYz4Ks7DMfc z`%qVA!PVxKY&2|+eI7Q2Mb?fKMs1e?R>UrE2GnG@JI`R#y4zq4Gd!hx@0Cq#g2W~SX zZ2|RgS^!7G>rnSeo9$+%=ej65w-@0s7_-Ct#&b1PMZd#-u-3<>fgP|Rwr{7o;Tpq% z*dIW}2kkO@q66%LeHdzH3hp*D+a1bY4s}7fH&J*FJCS?L&D8>GN+&}#^f}bU6S~)| zWk;wHZHKSJ=TN6%&^|Nb)i4J89&8UI_M0!HQBd_=v3Ai<{J(c}op(@Ll5riX;@AUb z2F60I*=g7WhJI?MtQTy7y#Z>3DGr+7e)WKZv5!J^Ebfq*kxfub`4Vc)n}23Hya?9P z`9FuE%@Tgtr~mTjOoSbv?}*vWo#1QO+n|5yKQ|RNhU)NYs7>|=YD$Y8H5XD}sHI&B zmHz^2kHsA`oB`X>zH}=2FU+y* z4f|jpf!b81zBCV&0Z=172eo+%edTkezYO(_-@#BK?d|0c`{S6Lp0!FvARLp4w3F2@_#{I2RU%yI>@|3H4s#``&aU2h5@KAB$3wj7Csv=|XzuY=LU{ z5Y)TcMVJEm?wSvjK&TFsf?CtAP$OLewfT<1p|H*m=GE>Kr~%%F{b2At-k5a$$D(9{ z%b^b{y{DE)@@ra^rjgkzfEx_ak|j^Sc?EG6C%+(anmQ(9AGURU4F?eS26;+P(cN(v zIx?@4siX7(_CPXr*g_W-NqPg{U_@y!c?XdO*4|(%%mGW|*KFSjQ2)5q*cfn*4W>YUn;N@_)7Aj>c!R1e>i5Y}1HS!plgPo7qtTsP` zEq7Kv@~e>Vr83yb({h`aIHFFlJCK}kq@k^#H<>Lcpi|&~nFp82Yn!aX4CE&&pY&le z|3dT&#NI%1qQ}7+#7svYfUa~5UAN*-)Uii6PIFm$I?~z~ewZWdHJ3whAj=VNNwjL5ndR`|X9ms!+{0*=^jeU#09$A9zC0^~E(-?u) z_qoj&Puyn8{9^q-!%%$Xk>+hNKC&6v>?mT$P>R4_1lL+Sr{BwS-^N$9e(QGXT7Toj z!F95_7s-8MJ$y(wys7$AyZ@AuvnamCNG0ShQXBb}*85TB68WE@>or#CbMnsM--quc zb_x-DIew*{a3OEEPJ5K{IBt@e6J76CUm~ZFWB9yO4ZRMP>?9@#eFX9uk_~$YvVlA= zt+x7X9C?UQ+D6Py>;DX0seKAo_Iqm>7bC!~j`aPHU$41dszgQla!?8IqS1E&V|3iKufDAl$d?2n&!e}5Wg;Qv|J zmY2~Lc^7Fx*?2i@T92K}>iy6+{aeO$R@sa_a5&P2M#dAAj-aYg=@fc4+qm%%i!Tn} z1Y!b_FOg4>2m;38KZQPon0Q;R0?dSc3>ipXPvSy!v-BZj3XaXT=Iq$-5HuOzJ@^2- zD@>mB7O6DS`uh;O8(klX6VVT%zel+vNGu+f*P|Q~JeXt~XedHhwMK1=!lEqE6b^M5bA^JM=euR{I-^p9 zZ7KgHn|~X9lGT4e|IzBf#OB4WY39rL@Nc&rK1n{`56%gw&!+CMiGThvls>W* z%%#9C>>$6_{MZ5d+De-dcZirPurz`%39D70$Ey#>1wyc1SY+tG0nX$$a-Hz*nBzrr^HH5g_{vHltwAqOTrsE=i!{Y< z3ZMCXtbaEg>8ao)j;!eIZSXC8Q?33te4D&;6ikVDX#l>|7z@aM6`sRRi72&4zOdzG zr%$HKZi<~&>wg)gGSZHMgUD!!^hWk#UqSMd_sCX?+v$Wf!k&SDDdh)XZ^PDa7jhu2 z@Eu1Q;H!qMlpg&&zMs%L!g9z5ly~=&Q3&H18L4n6Z9>wapTnP){9r`s5O#C)rcg

n4IoIJI_7)@SP{M&5C0vo#uUoqQY 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 smM&c}CU!x~FyE%vn$^oUv$s^10<@l7ytkO delta 27196 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 Mf6I<7o~B*?A5tFY%>V!Z diff --git a/po/es.po b/po/es.po index 3286e90..84ba76a 100644 --- a/po/es.po +++ b/po/es.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: elfutils.master.es\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2012-08-27 20:34+0200\n" +"POT-Creation-Date: 2014-08-27 11:26+0200\n" "PO-Revision-Date: 2011-01-10 15:17-0300\n" "Last-Translator: Claudio Rodrigo Pereyra Diaz \n" "Language-Team: Fedora Spanish \n" -"Language: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -24,18 +24,18 @@ 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:2842 -#: src/readelf.c:3181 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3098 +#: src/readelf.c:3447 src/readelf.c:8018 src/unstrip.c:2115 src/unstrip.c:2323 #, c-format msgid "memory exhausted" msgstr "memoria agotada" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:49 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:53 #: libelf/elf_error.c:60 msgid "no error" msgstr "ningún error" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:51 +#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:55 #: libelf/elf_error.c:91 msgid "out of memory" msgstr "memoria agotada" @@ -74,7 +74,7 @@ msgstr "error durante salida de datos" msgid "no backend support available" msgstr "No hay soporte de segundo plano" -#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:50 +#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:54 #: libelf/elf_error.c:63 msgid "unknown error" msgstr "error desconocido" @@ -171,7 +171,7 @@ msgstr "versión DWARF inválida" msgid "invalid directory index" msgstr "Índice de directorio inválido" -#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:70 +#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:74 msgid "address out of range" msgstr "dirección fuera de rango" @@ -191,7 +191,7 @@ msgstr "Índice de línea inválido" msgid "invalid address range index" msgstr "Índice de dirección de rango inválido" -#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:71 +#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:75 msgid "no matching address range" msgstr "dirección de rango no coincidente" @@ -215,7 +215,7 @@ msgstr "sección CFI inválida" msgid "no alternative debug link found" msgstr "" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdwfl/argp-std.c:46 src/unstrip.c:2265 msgid "Input selection options:" msgstr "Opciones de selección de entrada:" @@ -251,133 +251,193 @@ msgstr "Kernel con todos los módulos" msgid "Search path for separate debuginfo files" msgstr "Ruta de búsqueda para archivos debugingfo independientes" -#: libdwfl/argp-std.c:142 +#: libdwfl/argp-std.c:157 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:202 -#, c-format -msgid "cannot read ELF core file: %s" -msgstr "No se puede leer archivo core ELF: %s" - -#: libdwfl/argp-std.c:220 -msgid "No modules recognized in core file" -msgstr "No hay módulos reconocidos en el archivo core" - -#: libdwfl/argp-std.c:232 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "No se pueden cargar símbolos de kernel" -#: libdwfl/argp-std.c:236 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "no se pueden hallar módulos de kernel" -#: libdwfl/argp-std.c:250 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "imposible encontrar kernel o módulos" -#: libdwfl/libdwflP.h:52 +#: 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:311 +msgid "No modules recognized in core file" +msgstr "No hay módulos reconocidos en el archivo core" + +#: libdwfl/libdwflP.h:56 msgid "See errno" msgstr "Ve errno" -#: libdwfl/libdwflP.h:53 +#: libdwfl/libdwflP.h:57 msgid "See elf_errno" msgstr "Ver elf_errno" -#: libdwfl/libdwflP.h:54 +#: libdwfl/libdwflP.h:58 msgid "See dwarf_errno" msgstr "Ver dwarf_errno" -#: libdwfl/libdwflP.h:55 +#: libdwfl/libdwflP.h:59 msgid "See ebl_errno (XXX missing)" msgstr "Ver ebl_errno (no se encuentra XXX)" -#: libdwfl/libdwflP.h:56 +#: libdwfl/libdwflP.h:60 msgid "gzip decompression failed" msgstr "falló la descompresión gzip" -#: libdwfl/libdwflP.h:57 +#: libdwfl/libdwflP.h:61 msgid "bzip2 decompression failed" msgstr "falló la descompresión bzip2" -#: libdwfl/libdwflP.h:58 +#: libdwfl/libdwflP.h:62 msgid "LZMA decompression failed" msgstr "falló la descompresión LZMA" -#: libdwfl/libdwflP.h:59 +#: libdwfl/libdwflP.h:63 msgid "no support library found for machine" msgstr "no se ha encontrado una biblioteca de soporte para la máquina" -#: libdwfl/libdwflP.h:60 +#: libdwfl/libdwflP.h:64 msgid "Callbacks missing for ET_REL file" msgstr "No se encuentran rellamadas para el archivo ET_REL" -#: libdwfl/libdwflP.h:61 +#: libdwfl/libdwflP.h:65 msgid "Unsupported relocation type" msgstr "Tipo de reubicación no soportada" -#: libdwfl/libdwflP.h:62 +#: libdwfl/libdwflP.h:66 msgid "r_offset is bogus" msgstr "r_offset se encuentra inutilizable" -#: libdwfl/libdwflP.h:63 libelf/elf_error.c:111 libelf/elf_error.c:171 +#: libdwfl/libdwflP.h:67 libelf/elf_error.c:111 libelf/elf_error.c:171 msgid "offset out of range" msgstr "desplazamiento fuera de rango" -#: libdwfl/libdwflP.h:64 +#: libdwfl/libdwflP.h:68 msgid "relocation refers to undefined symbol" msgstr "la reubicación hace referencia a un símbolo no definido" -#: libdwfl/libdwflP.h:65 +#: libdwfl/libdwflP.h:69 msgid "Callback returned failure" msgstr "La rellamada devolvió un fallo" -#: libdwfl/libdwflP.h:66 +#: libdwfl/libdwflP.h:70 msgid "No DWARF information found" msgstr "No se ha encontrado una información DWARF" -#: libdwfl/libdwflP.h:67 +#: libdwfl/libdwflP.h:71 msgid "No symbol table found" msgstr "No se ha encontrado una tabla simbólica" -#: libdwfl/libdwflP.h:68 +#: libdwfl/libdwflP.h:72 msgid "No ELF program headers" msgstr "No existen encabezados de programa ELF" -#: libdwfl/libdwflP.h:69 +#: libdwfl/libdwflP.h:73 msgid "address range overlaps an existing module" msgstr "el rango de dirección se superpone con un módulo existente" -#: libdwfl/libdwflP.h:72 +#: libdwfl/libdwflP.h:76 msgid "image truncated" msgstr "imagen truncada" -#: libdwfl/libdwflP.h:73 +#: libdwfl/libdwflP.h:77 msgid "ELF file opened" msgstr "Archivo ELF abierto" -#: libdwfl/libdwflP.h:74 +#: libdwfl/libdwflP.h:78 msgid "not a valid ELF file" msgstr "no es un archivo ELF válido" -#: libdwfl/libdwflP.h:75 +#: libdwfl/libdwflP.h:79 msgid "cannot handle DWARF type description" msgstr "no es posible manipular tipo de descripción DWARF" -#: libdwfl/libdwflP.h:76 +#: libdwfl/libdwflP.h:80 msgid "ELF file does not match build ID" msgstr "El archivo ELF no coincide con el ID construido" -#: libdwfl/libdwflP.h:77 +#: libdwfl/libdwflP.h:81 #, fuzzy msgid "corrupt .gnu.prelink_undo section data" msgstr "no se puede leer sección '.gnu.prelink_undo': %s" +#: libdwfl/libdwflP.h:82 +msgid "Internal error due to ebl" +msgstr "" + +#: libdwfl/libdwflP.h:83 +msgid "Missing data in core file" +msgstr "" + +#: libdwfl/libdwflP.h:84 +#, fuzzy +msgid "Invalid register" +msgstr "Parámetro inválido" + +#: libdwfl/libdwflP.h:85 +msgid "Error reading process memory" +msgstr "" + +#: libdwfl/libdwflP.h:86 +msgid "Couldn't find architecture of any ELF" +msgstr "" + +#: libdwfl/libdwflP.h:87 +msgid "Error parsing /proc filesystem" +msgstr "" + +#: libdwfl/libdwflP.h:88 +#, fuzzy +msgid "Invalid DWARF" +msgstr "DWARF inválido" + +#: libdwfl/libdwflP.h:89 +msgid "Unsupported DWARF" +msgstr "" + +#: libdwfl/libdwflP.h:90 +msgid "Unable to find more threads" +msgstr "" + +#: libdwfl/libdwflP.h:91 +msgid "Dwfl already has attached state" +msgstr "" + +#: libdwfl/libdwflP.h:92 +msgid "Dwfl has no attached state" +msgstr "" + +#: libdwfl/libdwflP.h:93 +msgid "Unwinding not supported for this architecture" +msgstr "" + +#: libdwfl/libdwflP.h:94 +#, fuzzy +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)" -#: libebl/eblcorenotetypename.c:86 libebl/eblobjecttypename.c:57 +#: libebl/eblcorenotetypename.c:102 libebl/eblobjecttypename.c:57 #: libebl/eblobjnotetypename.c:73 libebl/eblosabiname.c:77 #: libebl/eblsectionname.c:89 libebl/eblsectiontypename.c:119 #: libebl/eblsegmenttypename.c:83 @@ -473,7 +533,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:4697 +#: libelf/elf_error.c:87 src/readelf.c:5190 #, c-format msgid "invalid encoding" msgstr "codificación inválida" @@ -554,8 +614,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:6335 src/readelf.c:6780 -#: src/readelf.c:6881 src/readelf.c:7043 +#: libelf/elf_error.c:187 src/readelf.c:6980 src/readelf.c:7426 +#: src/readelf.c:7527 src/readelf.c:7689 #, c-format msgid "invalid data" msgstr "datos inválidos" @@ -621,33 +681,44 @@ msgid "Also show symbol or section names" msgstr "También mostrar símbolo o nombres de sección" #: src/addr2line.c:64 +#, fuzzy +msgid "Also show symbol and the section names" +msgstr "También mostrar símbolo o nombres de sección" + +#: src/addr2line.c:65 msgid "Also show line table flags" msgstr "También mostrar marcas de líneas de tabla" -#: src/addr2line.c:66 +#: src/addr2line.c:67 msgid "Treat addresses as offsets relative to NAME section." msgstr "Manejar direcciones como compensaciones relativas a sección de NOMBRE." -#: src/addr2line.c:68 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 +#: src/addr2line.c:69 +msgid "" +"Show all source locations that caused inline expansion of subroutines at the " +"address." +msgstr "" + +#: src/addr2line.c:72 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 #: src/strings.c:75 msgid "Miscellaneous:" msgstr "Misceláneos:" -#: src/addr2line.c:77 +#: src/addr2line.c:81 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" "Localizar archivos fuente e información de línea para DIRECCIONES (en a.out " "por defecto)." -#: src/addr2line.c:81 +#: src/addr2line.c:85 msgid "[ADDR...]" msgstr "[DIREC...]" -#: src/addr2line.c:181 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:231 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 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:460 src/size.c:211 src/strings.c:219 -#: src/strip.c:213 src/unstrip.c:226 +#: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -660,30 +731,30 @@ msgstr "" "garantía, ni siquiera para SU COMERCIALIZACIÓN o PARA SER USADO CON UN FIN " "DETERMINADO.\n" -#: src/addr2line.c:186 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:236 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 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:465 src/size.c:216 src/strings.c:224 -#: src/strip.c:218 src/unstrip.c:231 +#: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "Escrito por %s.\n" -#: src/addr2line.c:405 +#: src/addr2line.c:474 #, c-format msgid "Section syntax requires exactly one module" msgstr "Sintaxis de sección requiere exactamente un módulo" -#: src/addr2line.c:428 +#: src/addr2line.c:497 #, c-format msgid "offset %# lies outside section '%s'" msgstr "Compensación %# se encuentra fuera de sección '%s'" -#: src/addr2line.c:469 +#: src/addr2line.c:563 #, c-format msgid "cannot find symbol '%s'" msgstr "no se puede encontrar símbolo '%s'" -#: src/addr2line.c:474 +#: src/addr2line.c:568 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "compensación %# se encuentra fuera de contenido de '%s'" @@ -1123,8 +1194,8 @@ msgstr "Valor inválido '%s' para parámetro --gaps" #: src/elfcmp.c:722 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:175 src/strip.c:450 src/strip.c:487 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1911 +#: src/unstrip.c:1940 #, c-format msgid "cannot open '%s'" msgstr "Imposible abrir '%s'" @@ -1178,163 +1249,163 @@ msgstr "" msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "Chequeo minucioso de ficheros ELF de acuerdo con gABI/psABI " -#: src/elflint.c:78 src/readelf.c:113 +#: src/elflint.c:78 src/readelf.c:123 msgid "FILE..." msgstr "FICHERO..." -#: src/elflint.c:151 src/readelf.c:271 +#: src/elflint.c:155 src/readelf.c:292 #, c-format msgid "cannot open input file" msgstr "no se puede abrir el fichero de entrada" -#: src/elflint.c:158 +#: src/elflint.c:162 #, c-format msgid "cannot generate Elf descriptor: %s\n" msgstr "no se puede crear descriptor ELF: %s\n" -#: src/elflint.c:177 +#: src/elflint.c:181 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "error al cerrar el descriptor ELF: %s\n" -#: src/elflint.c:181 +#: src/elflint.c:185 msgid "No errors" msgstr "No hay errores" -#: src/elflint.c:215 src/readelf.c:434 +#: src/elflint.c:219 src/readelf.c:468 msgid "Missing file name.\n" msgstr "Falta el nombre de archivo.\n" -#: src/elflint.c:294 +#: src/elflint.c:298 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr " error al liberar descriptor sub-ELF: %s\n" -#: src/elflint.c:302 +#: src/elflint.c:306 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "No es un fichero ELF - tiene los bytes mágicos errados en el inicio\n" -#: src/elflint.c:363 +#: src/elflint.c:371 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d es una clase desconocida\n" -#: src/elflint.c:368 +#: src/elflint.c:376 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d es una codificación de datos desconocida\n" -#: src/elflint.c:372 +#: src/elflint.c:380 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "" "número de versión de encabezamiento ELF desconocido e_ident[%d] == %d\n" -#: src/elflint.c:378 +#: src/elflint.c:386 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "Sistema operativo OS ABI e_ident[%d] == '%s' incompatible\n" -#: src/elflint.c:384 +#: src/elflint.c:392 #, c-format msgid "unsupport ABI version e_ident[%d] == %d\n" msgstr "Versión incompatible ABI e_ident[%d] == %d\n" -#: src/elflint.c:389 +#: src/elflint.c:397 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] no es cero\n" -#: src/elflint.c:394 +#: src/elflint.c:402 #, c-format msgid "unknown object file type %d\n" msgstr "tipo de fichero objeto desconocido %d\n" -#: src/elflint.c:401 +#: src/elflint.c:409 #, c-format msgid "unknown machine type %d\n" msgstr "tipo de máquina desconocido %d\n" -#: src/elflint.c:405 +#: src/elflint.c:413 #, c-format msgid "unknown object file version\n" msgstr "versión de fichero objeto desconocido\n" -#: src/elflint.c:411 +#: src/elflint.c:419 #, c-format msgid "invalid program header offset\n" msgstr "Compensación de encabezamiento de programa inválida\n" -#: src/elflint.c:413 +#: src/elflint.c:421 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" "tanto los ejecutables como los DSO no pueden tener compensación de " "encabezamiento de programa cero\n" -#: src/elflint.c:417 +#: src/elflint.c:425 #, c-format msgid "invalid number of program header entries\n" msgstr "cantidad no válida de entradas del encabezamiento del programa\n" -#: src/elflint.c:425 +#: src/elflint.c:433 #, c-format msgid "invalid section header table offset\n" msgstr "compensación de sección de tabla de encabezamiento inválida\n" -#: src/elflint.c:428 +#: src/elflint.c:436 #, c-format msgid "section header table must be present\n" msgstr "tabla de encabezamiento de sección debe estar presente\n" -#: src/elflint.c:442 +#: src/elflint.c:450 #, c-format msgid "invalid number of section header table entries\n" msgstr "" "cantidad no válida de entradas en la tabla del encabezamiento de sección\n" -#: src/elflint.c:459 +#: src/elflint.c:467 #, c-format msgid "invalid section header index\n" msgstr "Índice de sección de encabezamiento inválido\n" -#: src/elflint.c:473 +#: src/elflint.c:481 #, c-format msgid "invalid number of program header table entries\n" msgstr "cantidad no válida de entradas de tabla de encabezado del programa\n" -#: src/elflint.c:482 +#: src/elflint.c:490 #, c-format msgid "invalid machine flags: %s\n" msgstr "Indicadores de máquina inválidos: %s\n" -#: src/elflint.c:489 src/elflint.c:506 +#: src/elflint.c:497 src/elflint.c:514 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "tamaño inválido del encabezamiento ELF: %hd\n" -#: src/elflint.c:492 src/elflint.c:509 +#: src/elflint.c:500 src/elflint.c:517 #, c-format msgid "invalid program header size: %hd\n" msgstr "tamaño inválido del encabezamiento del programa: %hd\n" -#: src/elflint.c:495 src/elflint.c:512 +#: src/elflint.c:503 src/elflint.c:520 #, c-format msgid "invalid program header position or size\n" msgstr "tamaño o posición inválidos del encabezamiento del programa\n" -#: src/elflint.c:498 src/elflint.c:515 +#: src/elflint.c:506 src/elflint.c:523 #, c-format msgid "invalid section header size: %hd\n" msgstr "tamaño inválido del encabezamiento de sección: %hd\n" -#: src/elflint.c:501 src/elflint.c:518 +#: src/elflint.c:509 src/elflint.c:526 #, c-format msgid "invalid section header position or size\n" msgstr "tamaño o posición no válidos del encabezamiento de sección\n" -#: src/elflint.c:562 +#: src/elflint.c:570 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1343,7 +1414,7 @@ msgstr "" "sección [%2d] '%s': sección con la bandera SHF_GROUP no es parte de una " "sección de grupo\n" -#: src/elflint.c:566 +#: src/elflint.c:574 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" @@ -1351,14 +1422,14 @@ msgstr "" "sección [%2d] '%s': el grupo de sección [%2zu] '%s' no precede al miembro de " "grupo\n" -#: src/elflint.c:582 src/elflint.c:1426 src/elflint.c:1476 src/elflint.c:1581 -#: src/elflint.c:2166 src/elflint.c:2680 src/elflint.c:2841 src/elflint.c:2971 -#: src/elflint.c:3143 src/elflint.c:4045 +#: 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:595 src/elflint.c:1588 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1367,7 +1438,7 @@ msgstr "" "sección [%2d] '%s': nombrado como una tabla de cadena para la sección [%2d] " "'%s' pero el tipo no es SHT_STRTAB\n" -#: src/elflint.c:618 +#: src/elflint.c:626 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1376,39 +1447,39 @@ msgstr "" "sección [%2d] '%s': la tabla de símbolo no puede tener más de una sección de " "índice extendido\n" -#: src/elflint.c:629 +#: src/elflint.c:638 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "" "sección [%2u] '%s': el tamaño de la entrada no coincide con ElfXX_Sym\n" -#: src/elflint.c:638 +#: src/elflint.c:647 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "Sección [%2d] '%s': no se puede obtener símbolo %d: %s\n" -#: src/elflint.c:643 src/elflint.c:646 src/elflint.c:649 src/elflint.c:652 -#: src/elflint.c:655 src/elflint.c:658 +#: src/elflint.c:652 src/elflint.c:655 src/elflint.c:658 src/elflint.c:661 +#: src/elflint.c:664 src/elflint.c:667 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "Sección [%2d] '%s': '%s' en la entrada zeroth no es cero\n" -#: src/elflint.c:661 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "sección [%2d] '%s': XINDEX en la entrada zeroth no es cero\n" -#: src/elflint.c:671 +#: src/elflint.c:680 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "sección [%2d] '%s': no es posible obtener el símbolo %zu: %s\n" -#: src/elflint.c:680 +#: src/elflint.c:689 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "sección [%2d] '%s': símbolo %zu: valor de nombre inválido\n" -#: src/elflint.c:694 +#: src/elflint.c:704 #, c-format msgid "" "section [%2d] '%s': symbol %zu: too large section index but no extended " @@ -1417,7 +1488,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: el índice de sección es demasiado extenso, " "pero no la sección extendida de la sección de índice\n" -#: src/elflint.c:700 +#: src/elflint.c:710 #, c-format msgid "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " @@ -1426,27 +1497,27 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: XINDEX es utilizado para índice que pueda " "caber en st_shndx (%)\n" -#: src/elflint.c:712 +#: src/elflint.c:722 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid section index\n" msgstr "sección [%2d] '%s': símbolo %zu: índice de sección inválido\n" -#: src/elflint.c:720 +#: src/elflint.c:730 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown type\n" msgstr "sección [%2d] '%s': símbolo %zu: tipo desconocido\n" -#: src/elflint.c:726 +#: src/elflint.c:736 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" msgstr "sección [%2d] '%s': símbolo %zu: asociación de símbolo desconocida\n" -#: src/elflint.c:731 +#: src/elflint.c:741 #, c-format msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" msgstr "Sección [%2d] '%s': símbolo %zu: símbolo único no de tipo de objeto\n" -#: src/elflint.c:739 +#: src/elflint.c:749 #, c-format msgid "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" @@ -1454,25 +1525,25 @@ msgstr "" "sección [%2d] '%s': símbolo %zu: COMMON solo es permitido en archivos " "realojables\n" -#: src/elflint.c:743 +#: src/elflint.c:753 #, c-format msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolos locales COMMON no tienen sentido\n" -#: src/elflint.c:747 +#: src/elflint.c:757 #, c-format msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" msgstr "" "Sección [%2d] '%s': símbolo %zu: función en sección COMMON no tiene sentido\n" -#: src/elflint.c:779 +#: 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:785 src/elflint.c:810 src/elflint.c:853 +#: 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 " @@ -1481,7 +1552,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu no se ajusta totalmente en la sección [%2d] " "'%s'\n" -#: src/elflint.c:794 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1490,7 +1561,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:804 src/elflint.c:846 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1499,7 +1570,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:831 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" @@ -1507,7 +1578,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo TLS, pero no hay entrada de " "programa TLS\n" -#: src/elflint.c:839 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1516,7 +1587,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: st_value falta sección de referencia [%2d] " "'%s'\n" -#: src/elflint.c:866 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1525,7 +1596,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo local fuera del rango descrito en " "sh_info\n" -#: src/elflint.c:873 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1534,12 +1605,12 @@ msgstr "" "Sección [%2d] '%s': símbolo %zu: símbolo non-local fuera del rango descrito " "en sh_info\n" -#: src/elflint.c:880 +#: 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:930 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1548,7 +1619,7 @@ msgstr "" "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ se refiere a sección " "errada [%2d]\n" -#: src/elflint.c:937 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1557,7 +1628,7 @@ msgstr "" "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ se refiere a sección [%2d] " "'%s'\n" -#: src/elflint.c:953 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -1566,7 +1637,7 @@ msgstr "" "Sección [%2d] '%s': valor del símbolo _GLOBAL_OFFSET_TABLE_ %# no " "coincide con dirección de sección %s %#\n" -#: src/elflint.c:960 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -1575,7 +1646,7 @@ msgstr "" "Sección [%2d] '%s': tamaño de símbolo _GLOBAL_OFFSET_TABLE_ % no " "coincide con tamaño de sección %s %\n" -#: src/elflint.c:968 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1584,7 +1655,7 @@ msgstr "" "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ presente, pero no. sección " "got\n" -#: src/elflint.c:984 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -1593,7 +1664,7 @@ msgstr "" "sección [%2d] '%s': Valor de símbolo _DYNAMIC_ %# no coincide con la " "dirección de segmento%#\n" -#: src/elflint.c:991 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -1602,7 +1673,7 @@ msgstr "" "Sección [%2d] '%s': tamaño de símbolo _DYNAMIC % no coincide con " "tamaño de segmento %\n" -#: src/elflint.c:1004 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1611,24 +1682,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:1008 +#: 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:1053 +#: 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:1062 src/elflint.c:1114 +#: 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:1087 src/elflint.c:1139 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1637,7 +1708,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:1093 src/elflint.c:1145 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1646,49 +1717,49 @@ msgstr "" "Sección [%2d] '%s': reubicación no-relativa en %zu de índice; DT_RELCOUNT " "especificado %d reubicaciones relativas\n" -#: src/elflint.c:1105 +#: 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:1187 +#: 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:1200 +#: 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:1208 +#: 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:1215 +#: 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:1222 +#: 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:1282 +#: 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:1309 +#: 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:1317 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1697,12 +1768,12 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: tipo de reubicación inválido para el " "tipo de archivo\n" -#: src/elflint.c:1325 +#: 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:1343 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -1711,12 +1782,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:1360 +#: 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:1375 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1725,7 +1796,7 @@ msgstr "" "Sección [%2d] '%s': reubicación %zu: reubicación de copia con símbolo de " "tipo %s\n" -#: src/elflint.c:1396 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1734,61 +1805,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:1411 +#: 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:1450 src/elflint.c:1500 +#: 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:1576 +#: 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:1594 +#: 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:1599 src/elflint.c:1882 +#: 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:1609 +#: 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:1617 +#: 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:1624 +#: 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:1635 +#: 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:1645 +#: 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:1663 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" @@ -1796,7 +1867,7 @@ msgstr "" "Sección [%2d] '%s': entrada %zu: el valor DT_PLTREL debe ser DT_REL or " "DT_RELA\n" -#: src/elflint.c:1676 +#: src/elflint.c:1710 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -1805,14 +1876,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:1719 +#: 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:1734 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -1821,46 +1892,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:1754 src/elflint.c:1782 +#: 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:1766 +#: 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:1775 +#: 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:1790 src/elflint.c:1797 +#: 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:1807 src/elflint.c:1811 +#: 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:1817 +#: 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:1828 src/elflint.c:1832 src/elflint.c:1836 src/elflint.c:1840 +#: 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:1852 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" @@ -1868,31 +1939,31 @@ msgstr "" "Sección [%2d] '%s': sólo los archivos reubicables pueden tener índice de " "sección extendido\n" -#: src/elflint.c:1862 +#: 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:1867 +#: 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:1870 +#: 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:1877 +#: 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:1892 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -1901,24 +1972,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:1903 +#: 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:1915 +#: 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:1920 +#: src/elflint.c:1962 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" "índice de sección extendida es % pero índice de símbolo no es " "XINDEX\n" -#: src/elflint.c:1936 src/elflint.c:1977 +#: 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" @@ -1926,53 +1997,53 @@ 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:1948 src/elflint.c:1989 +#: 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:1957 src/elflint.c:1998 +#: 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:1963 +#: 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:2004 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" "Sección [%2d] '%s': referencia de cadena de dispersión % fuera de " "límites\n" -#: src/elflint.c:2019 +#: 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:2030 -#, c-format +#: src/elflint.c:2092 +#, fuzzy, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" 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:2038 +#: 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:2070 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" @@ -1980,7 +2051,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:2091 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -1989,7 +2060,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:2102 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" @@ -1997,13 +2068,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:2133 +#: 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:2138 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" @@ -2011,38 +2082,38 @@ msgstr "" "Sección [%2d] '%s': referencia de símbolo en cadena para cubeta %zu fuera de " "límites\n" -#: src/elflint.c:2144 +#: 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:2157 +#: 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:2175 +#: 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:2183 +#: 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:2188 +#: 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:2193 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2051,19 +2122,19 @@ msgstr "" "Sección [%2d] '%s': tabla de dispersión no tiene ni siquiera espacio para " "entradas administrativas iniciales\n" -#: src/elflint.c:2241 +#: 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:2319 src/elflint.c:2323 +#: 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:2330 +#: src/elflint.c:2392 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2072,7 +2143,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:2342 +#: src/elflint.c:2404 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2081,12 +2152,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:2358 +#: 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:2378 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" @@ -2094,94 +2165,94 @@ msgstr "" "Sección [%2d] '%s': grupos de sección sólo permitidos en archivos de objeto " "reubicables\n" -#: src/elflint.c:2389 +#: 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:2394 +#: 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:2400 +#: 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:2405 +#: 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:2412 +#: 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:2417 +#: 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:2423 +#: 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:2429 +#: 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:2438 +#: 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:2443 +#: 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:2449 +#: 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:2453 +#: 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:2464 +#: 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:2476 +#: 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:2485 +#: 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:2492 +#: 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:2498 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " @@ -2190,12 +2261,12 @@ msgstr "" "Sección [%2d] '%s': elemento %Zu hace referencia a sección [%2d] '%s' sin " "establecer bandera SHF_GROUP\n" -#: src/elflint.c:2505 +#: 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:2694 +#: src/elflint.c:2756 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2204,7 +2275,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:2705 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2213,29 +2284,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:2721 +#: 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:2737 +#: 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:2745 +#: 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:2759 +#: 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:2764 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" @@ -2243,7 +2314,7 @@ msgstr "" "Sección [%2d] '%s': símbolo %d: índice de versión %d es para versión " "definida\n" -#: src/elflint.c:2774 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" @@ -2251,46 +2322,46 @@ msgstr "" "Sección [%2d] '%s': símbolo %d: índice de versión %d es para la versión " "solicitada\n" -#: src/elflint.c:2826 +#: 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:2834 src/elflint.c:2963 +#: 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:2857 src/elflint.c:3015 +#: 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:2863 src/elflint.c:3021 +#: 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:2871 +#: 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:2879 +#: 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:2891 +#: 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:2898 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2299,7 +2370,7 @@ msgstr "" "Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene referencia de " "nombre inválida\n" -#: src/elflint.c:2905 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2308,7 +2379,7 @@ msgstr "" "Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene valor de " "dispersión: %#x, esperado %#x\n" -#: src/elflint.c:2915 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2317,7 +2388,7 @@ msgstr "" "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene nombre duplicado " "'%s'\n" -#: src/elflint.c:2926 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" @@ -2325,53 +2396,53 @@ msgstr "" "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene próximo campo " "errado\n" -#: src/elflint.c:2942 src/elflint.c:3100 +#: 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:2955 +#: 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:3000 +#: 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:3004 +#: 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:3010 +#: 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:3034 +#: 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:3041 +#: 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:3050 +#: 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:3069 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" @@ -2379,34 +2450,34 @@ msgstr "" "Sección [%2d] '%s': entrada %d tiene referencia de nombre inválida en datos " "auxiliares\n" -#: src/elflint.c:3084 +#: 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:3106 +#: 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:3122 +#: 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:3135 +#: 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:3156 +#: 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:3172 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" @@ -2414,21 +2485,21 @@ msgstr "" "Sección[%2d] '%s': compensación %zu: campo de longitud cero en sección de " "atributo\n" -#: src/elflint.c:3181 +#: 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:3193 +#: 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:3210 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -2436,12 +2507,12 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de sub-" "sección de atributo\n" -#: src/elflint.c:3219 +#: 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:3228 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -2449,7 +2520,7 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: campo de longitud cero length en sub-" "sección de atributo\n" -#: src/elflint.c:3241 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -2457,7 +2528,7 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: longitud inválida en sub-sección de " "atributo\n" -#: src/elflint.c:3252 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -2465,26 +2536,26 @@ msgstr "" "Sección[%2d] '%s': compensación %zu: sub-sección de atributo tiene etiqueta " "inesperada %u\n" -#: src/elflint.c:3270 +#: 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:3281 +#: 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:3294 +#: 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:3298 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" @@ -2492,12 +2563,12 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: no reconocido %s valor de atributo " "%\n" -#: src/elflint.c:3308 +#: 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:3314 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -2505,47 +2576,47 @@ msgstr "" "Sección [%2d] '%s': compensación %zu: extra bytes después de la última " "sección de atributo\n" -#: src/elflint.c:3403 +#: 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:3407 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "Sección zeroth tiene nombre nonzero\n" -#: src/elflint.c:3409 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "Sección zeroth tiene tipo nonzero\n" -#: src/elflint.c:3411 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "Sección zeroth tiene banderas nonzero\n" -#: src/elflint.c:3413 +#: 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:3415 +#: 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:3417 +#: 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:3419 +#: 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:3422 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2554,7 +2625,7 @@ msgstr "" "Sección zeroth tiene valor de tamaño nonzero mientras que el encabezamiento " "ELF tiene valor shnum nonzero\n" -#: src/elflint.c:3426 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2563,7 +2634,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:3430 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2572,27 +2643,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:3447 +#: 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:3456 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "Sección [%2zu]: nombre inválido\n" -#: src/elflint.c:3483 +#: 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:3499 +#: 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:3516 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -2600,12 +2671,12 @@ msgstr "" "Sección [%2zu] '%s' tiene banderas erradas: %s esperado y posiblemente %s, " "es %s\n" -#: src/elflint.c:3534 +#: 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:3540 src/elflint.c:3572 +#: 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" @@ -2613,7 +2684,7 @@ msgstr "" "Sección [%2zu] '%s' tiene bandera SHF_ALLOC establecida pero no es un " "segmento cargable\n" -#: src/elflint.c:3545 src/elflint.c:3577 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -2622,7 +2693,7 @@ msgstr "" "Sección [%2zu] '%s' no tiene bandera SHF_ALLOC establecida pero hay " "segmentos cargables\n" -#: src/elflint.c:3553 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -2630,22 +2701,22 @@ msgstr "" "Sección [%2zu] '%s' es tabla de índice de sección de extensión en archivo no-" "objeto\n" -#: src/elflint.c:3596 +#: 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:3601 +#: 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:3611 +#: 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:3625 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" @@ -2653,54 +2724,54 @@ msgstr "" "Sección [%2zu] '%s' contiene bandera(s) de procesador-específico inválidas " "%#\n" -#: src/elflint.c:3632 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "Sección [%2zu] '%s' contiene bandera(s) desconocidas %#\n" -#: src/elflint.c:3640 +#: 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:3648 +#: 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:3653 +#: 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:3660 +#: 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:3665 +#: 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:3683 +#: 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:3692 +#: 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:3721 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -2709,7 +2780,7 @@ msgstr "" "Sección [%2zu] '%s' no contenida totalmente en segmento de entrada de " "encabezamiento de programa %d\n" -#: src/elflint.c:3729 +#: src/elflint.c:3792 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -2718,7 +2789,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:3738 +#: src/elflint.c:3801 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -2727,18 +2798,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:3749 +#: 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:3759 +#: 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:3769 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -2746,7 +2817,7 @@ msgstr "" "Sección [%2zu] '%s': asignación de bandera establecida pero sección no en " "ningún segmento cargado\n" -#: src/elflint.c:3775 +#: src/elflint.c:3838 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -2755,7 +2826,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:3783 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -2763,32 +2834,32 @@ msgstr "" "sección [%2zu] '%s': ficheros reubicables no pueden tener tablas de símbolos " "dinámicos\n" -#: src/elflint.c:3834 +#: 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:3857 +#: 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:3868 +#: 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:3874 +#: 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:3885 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -2797,26 +2868,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:3898 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "Duplicar índice de versión %d\n" -#: src/elflint.c:3912 +#: 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:3961 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" "phdr[%d]: tipo de nota de fichero core desconocido % en compensación " "%\n" -#: src/elflint.c:3965 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" @@ -2824,14 +2895,14 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero core desconocido % en " "compensación %Zu\n" -#: src/elflint.c:3988 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" msgstr "" "phdr[%d]: tipo de nota de fichero objeto desconocido % en " "compensación %Zu\n" -#: src/elflint.c:3992 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" @@ -2839,40 +2910,40 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero objeto desconocido % en " "compensación %Zu\n" -#: src/elflint.c:4009 +#: 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:4028 +#: 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:4031 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: extra % bytes después de la última nota\n" -#: src/elflint.c:4052 +#: 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:4059 +#: 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:4062 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "Sección[%2d] '%s': extra % bytes después de la última nota\n" -#: src/elflint.c:4080 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -2880,139 +2951,139 @@ msgstr "" "Sólo ejecutables, objetos compartidos y ficheros core pueden tener " "encabezamientos de programas\n" -#: src/elflint.c:4095 +#: 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:4104 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "entrada de encabezamiento de programa %d: tipo %# de entrada de " "encabezamiento de programa desconocido\n" -#: src/elflint.c:4115 +#: 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:4123 +#: 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:4130 +#: 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:4144 +#: 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:4147 +#: 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:4157 +#: 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:4178 +#: 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:4181 +#: 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:4189 src/elflint.c:4212 +#: 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:4218 +#: 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:4242 +#: 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:4245 +#: 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:4258 +#: 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:4266 +#: 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:4269 +#: 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:4273 +#: 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:4276 +#: 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:4281 +#: 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:4284 +#: 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:4295 +#: 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:4302 +#: 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:4305 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3021,7 +3092,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:4318 +#: src/elflint.c:4381 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3030,12 +3101,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:4352 +#: 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:4378 +#: 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" @@ -3569,7 +3640,8 @@ msgid "Warning: size of `%s' changed from % in %s to % in %s" msgstr "" "Advertencia: el tamaño de `%s' cambió de % en %s a % en %s" -#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:640 src/strip.c:562 +#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 +#: src/readelf.c:829 src/strip.c:563 #, c-format msgid "cannot determine number of sections: %s" msgstr "no se pudieron determinar el número de secciones: %s" @@ -3825,7 +3897,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:1818 #, c-format msgid "cannot update ELF header: %s" msgstr "No se puede actualizar encabezamiento ELF: %s" @@ -3996,7 +4068,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:2124 +#: src/strip.c:2155 #, c-format msgid "while closing '%s'" msgstr "error al cerrar '%s'" @@ -4040,17 +4112,17 @@ 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:1156 src/objdump.c:787 src/readelf.c:896 -#: src/readelf.c:1039 src/readelf.c:1187 src/readelf.c:1369 src/readelf.c:1569 -#: src/readelf.c:1755 src/readelf.c:1965 src/readelf.c:2219 src/readelf.c:2285 -#: src/readelf.c:2363 src/readelf.c:2861 src/readelf.c:2897 src/readelf.c:2959 -#: src/readelf.c:7270 src/readelf.c:8176 src/readelf.c:8323 src/readelf.c:8391 -#: src/size.c:417 src/size.c:491 src/strip.c:502 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 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:2196 src/readelf.c:2454 +#: src/readelf.c:2524 src/readelf.c:2606 src/readelf.c:3117 src/readelf.c:3153 +#: src/readelf.c:3216 src/readelf.c:7920 src/readelf.c:9002 src/readelf.c:9149 +#: src/readelf.c:9217 src/size.c:417 src/size.c:487 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" -#: src/nm.c:782 +#: src/nm.c:784 #, c-format msgid "" "\n" @@ -4063,7 +4135,7 @@ msgstr "" "Símbolos de %s:\n" "\n" -#: src/nm.c:785 +#: src/nm.c:787 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4072,23 +4144,23 @@ msgstr "" "%*s%-*s %-*s Clase Tipo %-*s %*s Sección\n" "\n" -#: src/nm.c:1166 +#: src/nm.c:1173 #, c-format msgid "%s: entry size in section `%s' is not what we expect" msgstr "" "%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos " -#: src/nm.c:1170 +#: src/nm.c:1177 #, c-format msgid "%s: size of section `%s' is not multiple of entry size" msgstr "%s: Tamaño de sección `%s' no es múltiplo de tamaño de entrada" -#: src/nm.c:1428 +#: src/nm.c:1435 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Operación inválida" -#: src/nm.c:1485 +#: src/nm.c:1492 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: No hay símbolos" @@ -4122,7 +4194,7 @@ msgstr "Sólo muestra información para NOMBRE de sección." msgid "Show information from FILEs (a.out by default)." msgstr "Muestra información de FICHEROS (a.out por defecto)." -#: src/objdump.c:236 src/readelf.c:439 +#: src/objdump.c:236 src/readelf.c:473 msgid "No operation specified.\n" msgstr "No se especificó una operación.\n" @@ -4131,11 +4203,11 @@ msgstr "No se especificó una operación.\n" msgid "while close `%s'" msgstr "mientras cierra `%s'" -#: src/objdump.c:379 src/readelf.c:1664 src/readelf.c:1838 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2069 msgid "INVALID SYMBOL" msgstr "SÍMBOLO INVÁLIDO" -#: src/objdump.c:394 src/readelf.c:1695 src/readelf.c:1871 +#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2102 msgid "INVALID SECTION" msgstr "SECCIÓN INVÁLIDA" @@ -4192,185 +4264,247 @@ msgstr "%s: no es un archivo" msgid "error while freeing sub-ELF descriptor: %s" msgstr "error al liberar descriptor sub-ELF: %s" -#: src/readelf.c:67 +#: src/readelf.c:71 +#, fuzzy +msgid "ELF input selection:" +msgstr "Selección de salida de ELF:" + +#: src/readelf.c:73 +msgid "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" +msgstr "" + +#: src/readelf.c:75 msgid "ELF output selection:" msgstr "Selección de salida de ELF:" -#: src/readelf.c:69 +#: src/readelf.c:77 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "Todo esto mas -p .strtab -p .dynstr -p .comment" -#: src/readelf.c:70 +#: src/readelf.c:78 msgid "Display the dynamic segment" msgstr "Mostrar el segmento dinámico" -#: src/readelf.c:71 +#: src/readelf.c:79 msgid "Display the ELF file header" msgstr "Mostrar el encabezamiento del fichero ELF" -#: src/readelf.c:73 +#: src/readelf.c:81 msgid "Display histogram of bucket list lengths" msgstr "Mostrar histograma de las longitudes de las listas de cubetas" -#: src/readelf.c:74 +#: src/readelf.c:82 msgid "Display the program headers" msgstr "Mostrar encabezamientos de programa" -#: src/readelf.c:76 +#: src/readelf.c:84 msgid "Display relocations" msgstr "Mostrar reubicaciones" -#: src/readelf.c:77 +#: src/readelf.c:85 msgid "Display the sections' headers" msgstr "Mostrar los encabezados de las secciones" -#: src/readelf.c:79 +#: src/readelf.c:87 msgid "Display the symbol table" msgstr "Mostrar la tabla de símbolos" -#: src/readelf.c:80 +#: src/readelf.c:88 msgid "Display versioning information" msgstr "Mostrar información de versión" -#: src/readelf.c:81 +#: src/readelf.c:89 msgid "Display the ELF notes" msgstr "Mostrar las notas ELF" -#: src/readelf.c:83 +#: src/readelf.c:91 msgid "Display architecture specific information, if any" msgstr "Mostrar información específica de la arquitectura (si es que la hay)" -#: src/readelf.c:85 +#: src/readelf.c:93 msgid "Display sections for exception handling" msgstr "Muestra secciones para manejo de excepciones" -#: src/readelf.c:87 +#: src/readelf.c:95 msgid "Additional output selection:" msgstr "Selección de salida adicional:" -#: src/readelf.c:89 +#: src/readelf.c:97 #, fuzzy msgid "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" msgstr "" "Mostrar el contenido de la sección DWARF. SECCIÓN puede ser algo de lo " "siguiente: abbrev, aranges, frame, info, loc, line, ranges, pubnames, str, " "macinfo, o exception" -#: src/readelf.c:93 +#: src/readelf.c:101 msgid "Dump the uninterpreted contents of SECTION, by number or name" msgstr "Vuelca los contenidos no interpretados de SECCIÓN, por número o nombre" -#: src/readelf.c:95 +#: src/readelf.c:103 msgid "Print string contents of sections" msgstr "Imprime contenido de cadena de secciones" -#: src/readelf.c:98 +#: src/readelf.c:106 msgid "Display the symbol index of an archive" msgstr "Muestra el índice de símbolos de un archivo" -#: src/readelf.c:100 +#: src/readelf.c:108 msgid "Output control:" msgstr "Control de salida:" -#: src/readelf.c:102 +#: src/readelf.c:110 msgid "Do not find symbol names for addresses in DWARF data" msgstr "" "No se encuentran los nombres de símbolos para direcciones en datos DWARF" -#: src/readelf.c:104 +#: src/readelf.c:112 +#, fuzzy +msgid "" +"Display just offsets instead of resolving values to addresses in DWARF data" +msgstr "" +"No se encuentran los nombres de símbolos para direcciones en datos DWARF" + +#: src/readelf.c:114 msgid "Ignored for compatibility (lines always wide)" msgstr "" -#: src/readelf.c:109 +#: src/readelf.c:119 msgid "Print information from ELF file in human-readable form." msgstr "" "Imprimir información del fichero ELF en una forma comprensible para los " "seres humanos." -#: src/readelf.c:410 +#: src/readelf.c:441 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "Sección de depuración DWARF desconocida `%s'.\n" -#: src/readelf.c:476 +#: src/readelf.c:520 src/readelf.c:631 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "no se puede crear descriptor ELF: %s" -#: src/readelf.c:488 +#: src/readelf.c:545 src/readelf.c:1099 src/readelf.c:1269 #, c-format -msgid "'%s' is not an archive, cannot print archive index" -msgstr "'%s' no es un archivo, no se puede imprimir índice de archivo" +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:9169 +#: src/unstrip.c:352 src/unstrip.c:383 src/unstrip.c:432 src/unstrip.c:540 +#: src/unstrip.c:557 src/unstrip.c:593 src/unstrip.c:791 src/unstrip.c:1059 +#: src/unstrip.c:1250 src/unstrip.c:1310 src/unstrip.c:1431 src/unstrip.c:1484 +#: src/unstrip.c:1591 src/unstrip.c:1780 +#, c-format +msgid "cannot get section header: %s" +msgstr "No se puede obtener encabezamiento de sección: %s" + +#: src/readelf.c:562 +#, fuzzy, c-format +msgid "cannot get section name" +msgstr "no se puede obtener encabezamiento de sección\n" + +#: src/readelf.c:571 src/readelf.c:5221 src/readelf.c:7414 src/readelf.c:7516 +#: src/readelf.c:7674 +#, c-format +msgid "cannot get %s content: %s" +msgstr "No se puede obtener el contenido %s: %s" + +#: src/readelf.c:587 +#, fuzzy, c-format +msgid "cannot create temp file '%s'" +msgstr "no se puede crear fichero nuevo '%s': %s" + +#: src/readelf.c:596 +#, fuzzy, c-format +msgid "cannot write section data" +msgstr "no se puede leer la sección de datos: %s" -#: src/readelf.c:493 +#: src/readelf.c:602 src/readelf.c:619 src/readelf.c:648 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "error al cerrar el descriptor ELF: %s" -#: src/readelf.c:585 +#: src/readelf.c:609 +#, fuzzy, c-format +msgid "error while rewinding file descriptor" +msgstr "error al cerrar el descriptor ELF: %s" + +#: src/readelf.c:643 +#, c-format +msgid "'%s' is not an archive, cannot print archive index" +msgstr "'%s' no es un archivo, no se puede imprimir índice de archivo" + +#: src/readelf.c:742 +#, fuzzy, c-format +msgid "No such section '%s' in '%s'" +msgstr "No se puede obtener contenido de sección %zu en '%s': %s" + +#: src/readelf.c:769 #, c-format msgid "cannot stat input file" msgstr "no sepudo stat archivo de entrada" -#: src/readelf.c:587 +#: src/readelf.c:771 #, c-format msgid "input file is empty" msgstr "archivo de entrada vacío" -#: src/readelf.c:589 +#: src/readelf.c:773 #, c-format msgid "failed reading '%s': %s" msgstr "Falló lectura de '%s': %s" -#: src/readelf.c:625 +#: src/readelf.c:814 #, c-format msgid "cannot read ELF header: %s" msgstr "no se pudo leer encabezamiento ELF: %s" -#: src/readelf.c:633 +#: src/readelf.c:822 #, c-format msgid "cannot create EBL handle" msgstr "no se puede crear EBL" -#: src/readelf.c:646 +#: src/readelf.c:835 #, c-format msgid "cannot determine number of program headers: %s" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/readelf.c:732 +#: src/readelf.c:921 msgid "NONE (None)" msgstr "NONE (Ninguno)" -#: src/readelf.c:733 +#: src/readelf.c:922 msgid "REL (Relocatable file)" msgstr "REL (Fichero reubicable)" -#: src/readelf.c:734 +#: src/readelf.c:923 msgid "EXEC (Executable file)" msgstr "EXEC (Fichero ejecutable)" -#: src/readelf.c:735 +#: src/readelf.c:924 msgid "DYN (Shared object file)" msgstr "DYN (Fichero objeto compartido)" -#: src/readelf.c:736 +#: src/readelf.c:925 msgid "CORE (Core file)" msgstr "CORE (Fichero núcleo)" -#: src/readelf.c:741 +#: src/readelf.c:930 #, c-format msgid "OS Specific: (%x)\n" msgstr "OS Specific: (%x)\n" -#: src/readelf.c:743 +#: src/readelf.c:932 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Específico del procesador: (%x)\n" -#: src/readelf.c:753 +#: src/readelf.c:942 msgid "" "ELF Header:\n" " Magic: " @@ -4378,7 +4512,7 @@ msgstr "" "Encabezamiento ELF:\n" " Mágico: " -#: src/readelf.c:757 +#: src/readelf.c:946 #, c-format msgid "" "\n" @@ -4387,119 +4521,119 @@ msgstr "" "\n" " Clase: %s\n" -#: src/readelf.c:762 +#: src/readelf.c:951 #, c-format msgid " Data: %s\n" msgstr " Datos: %s\n" -#: src/readelf.c:768 +#: src/readelf.c:957 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Versión ident: %hhd %s\n" -#: src/readelf.c:770 src/readelf.c:787 +#: src/readelf.c:959 src/readelf.c:976 msgid "(current)" msgstr "(actual)" -#: src/readelf.c:774 +#: src/readelf.c:963 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:777 +#: src/readelf.c:966 #, c-format msgid " ABI Version: %hhd\n" msgstr " Versión ABI: %hhd\n" -#: src/readelf.c:780 +#: src/readelf.c:969 msgid " Type: " msgstr " Tipo: " -#: src/readelf.c:783 +#: src/readelf.c:972 #, c-format msgid " Machine: %s\n" msgstr " Máquina: %s\n" -#: src/readelf.c:785 +#: src/readelf.c:974 #, c-format msgid " Version: %d %s\n" msgstr " Versión: %d %s\n" -#: src/readelf.c:789 +#: src/readelf.c:978 #, c-format msgid " Entry point address: %#\n" msgstr " Dirección de punto de entrada: %#\n" -#: src/readelf.c:792 +#: src/readelf.c:981 #, c-format msgid " Start of program headers: % %s\n" msgstr " Inicio de encabezamientos de programa: % %s\n" -#: src/readelf.c:793 src/readelf.c:796 +#: src/readelf.c:982 src/readelf.c:985 msgid "(bytes into file)" msgstr " (bytes en el archivo)" -#: src/readelf.c:795 +#: src/readelf.c:984 #, c-format msgid " Start of section headers: % %s\n" msgstr " Inicio de encabezamientos de sección: % %s\n" -#: src/readelf.c:798 +#: src/readelf.c:987 #, c-format msgid " Flags: %s\n" msgstr " Indicadores: %s\n" -#: src/readelf.c:801 +#: src/readelf.c:990 #, c-format msgid " Size of this header: % %s\n" msgstr " Tamaño de este encabezamiento: % %s\n" -#: src/readelf.c:802 src/readelf.c:805 src/readelf.c:822 +#: src/readelf.c:991 src/readelf.c:994 src/readelf.c:1011 msgid "(bytes)" msgstr "(bytes)" -#: src/readelf.c:804 +#: src/readelf.c:993 #, c-format msgid " Size of program header entries: % %s\n" msgstr "" " Tamaño de las entradas en encabezamiento del programa: % %s\n" -#: src/readelf.c:807 +#: src/readelf.c:996 #, c-format msgid " Number of program headers entries: %" msgstr " Cantidad de entradas de encabezados de programa: %" -#: src/readelf.c:814 +#: src/readelf.c:1003 #, c-format msgid " (% in [0].sh_info)" msgstr " (% in [0].sh_info)" -#: src/readelf.c:817 src/readelf.c:834 src/readelf.c:848 +#: src/readelf.c:1006 src/readelf.c:1023 src/readelf.c:1037 msgid " ([0] not available)" msgstr " ([0] no disponible)" -#: src/readelf.c:821 +#: src/readelf.c:1010 #, c-format msgid " Size of section header entries: % %s\n" msgstr "" " Tamaño de las entradas en el encabezamiento de sección: % %s\n" -#: src/readelf.c:824 +#: src/readelf.c:1013 #, c-format msgid " Number of section headers entries: %" msgstr " Cantidad de entradas en los encabezamientos de sección: %" -#: src/readelf.c:831 +#: src/readelf.c:1020 #, c-format msgid " (% in [0].sh_size)" msgstr " (% en [0].sh_size)" -#: src/readelf.c:844 +#: src/readelf.c:1033 #, c-format msgid " (% in [0].sh_link)" msgstr " (% en [0].sh_link)" -#: src/readelf.c:852 +#: src/readelf.c:1041 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4508,14 +4642,14 @@ msgstr "" " Índice de tabla de cadenas de sección de encabezamiento de : XINDEX%s\n" "\n" -#: src/readelf.c:856 +#: src/readelf.c:1045 #, c-format msgid "" " Section header string table index: %\n" "\n" msgstr " Índice de tabla de cadenas de sección de encabezamiento: %\n" -#: src/readelf.c:888 +#: src/readelf.c:1077 #, c-format msgid "" "There are %d section headers, starting at offset %#:\n" @@ -4524,11 +4658,11 @@ msgstr "" "Hay %d encabezamientos de sección, comenzando en compensación %#:\n" "\n" -#: src/readelf.c:898 +#: src/readelf.c:1087 msgid "Section Headers:" msgstr "encabezamientos de sección:" -#: src/readelf.c:901 +#: src/readelf.c:1090 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4536,7 +4670,7 @@ msgstr "" "[Nr] Nombre Tipo Dirección Off Tamaño Inf Al " "Enlace banderas ES" -#: src/readelf.c:903 +#: src/readelf.c:1092 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4544,32 +4678,18 @@ msgstr "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" -#: src/readelf.c:910 src/readelf.c:1063 -#, c-format -msgid "cannot get section: %s" -msgstr "No se puede encontrar la sección: %s" - -#: src/readelf.c:917 src/readelf.c:1071 src/readelf.c:8343 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 -#, c-format -msgid "cannot get section header: %s" -msgstr "No se puede obtener encabezamiento de sección: %s" - -#: src/readelf.c:975 +#: src/readelf.c:1164 msgid "Program Headers:" msgstr "encabezamientos de programa:" -#: src/readelf.c:977 +#: src/readelf.c:1166 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Tipo Compensación Dirección Virtual Dirección " "Física Tamaño de Fichero Tamaño de Memoria Alineación de bandera" -#: src/readelf.c:980 +#: src/readelf.c:1169 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4577,12 +4697,12 @@ msgstr "" " Tipo Compensación Dirección Virtual Dirección " "Física Tamaño de Fichero Tamaño de Memoria Alineación de bandera" -#: src/readelf.c:1020 +#: src/readelf.c:1226 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Solicitando intérprete de programa: %s]\n" -#: src/readelf.c:1041 +#: src/readelf.c:1247 msgid "" "\n" " Section to Segment mapping:\n" @@ -4592,12 +4712,12 @@ msgstr "" " Sección para asignación de segmento:\n" " Secciones de segmento..." -#: src/readelf.c:1052 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1835 src/unstrip.c:1874 src/unstrip.c:1881 #, c-format msgid "cannot get program header: %s" msgstr "no se puede obtener memoria para encabezamiento del programa: %s" -#: src/readelf.c:1193 +#: src/readelf.c:1401 #, c-format msgid "" "\n" @@ -4612,7 +4732,7 @@ msgstr[1] "" "\n" "Grupo de sección COMDAT [%2zu] '%s' con firma '%s' contiene entradas %zu:\n" -#: src/readelf.c:1198 +#: src/readelf.c:1406 #, c-format msgid "" "\n" @@ -4627,15 +4747,21 @@ msgstr[1] "" "\n" "Grupo de sección [%2zu] '%s' con firma '%s' contiene entradas %zu:\n" -#: src/readelf.c:1206 +#: src/readelf.c:1414 msgid "" msgstr "" -#: src/readelf.c:1220 +#: src/readelf.c:1428 msgid "" msgstr "" -#: src/readelf.c:1371 +#: src/readelf.c:1585 src/readelf.c:2202 src/readelf.c:2460 src/readelf.c:2530 +#: src/readelf.c:2812 src/readelf.c:2885 src/readelf.c:4488 +#, fuzzy, c-format +msgid "invalid sh_link value in section %Zu" +msgstr ".debug_line section inválida" + +#: src/readelf.c:1588 #, c-format msgid "" "\n" @@ -4656,36 +4782,36 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:1383 +#: src/readelf.c:1598 msgid " Type Value\n" msgstr " Tipo Valor\n" -#: src/readelf.c:1407 +#: src/readelf.c:1622 #, c-format msgid "Shared library: [%s]\n" msgstr "Biblioteca compartida: [%s]\n" -#: src/readelf.c:1412 +#: src/readelf.c:1627 #, c-format msgid "Library soname: [%s]\n" msgstr "Nombre-so de la biblioteca: [%s]\n" -#: src/readelf.c:1417 +#: src/readelf.c:1632 #, c-format msgid "Library rpath: [%s]\n" msgstr "Rpath de la biblioteca: [%s]\n" -#: src/readelf.c:1422 +#: src/readelf.c:1637 #, c-format msgid "Library runpath: [%s]\n" msgstr "Ruta de ejecución de la biblioteca: [%s]\n" -#: src/readelf.c:1442 +#: src/readelf.c:1657 #, c-format msgid "% (bytes)\n" msgstr "% (bytes)\n" -#: src/readelf.c:1554 src/readelf.c:1740 +#: src/readelf.c:1770 src/readelf.c:1957 #, c-format msgid "" "\n" @@ -4694,7 +4820,7 @@ msgstr "" "\n" "Tabla de símbolos inválida en compensación %#0\n" -#: src/readelf.c:1572 src/readelf.c:1757 +#: src/readelf.c:1788 src/readelf.c:1975 #, c-format msgid "" "\n" @@ -4713,7 +4839,7 @@ msgstr[1] "" "Sección de reubicación [%2zu] '%s' para sección [%2u] '%s' en compensación " "%#0 contiene entradas %d:\n" -#: src/readelf.c:1587 +#: src/readelf.c:1803 src/readelf.c:1990 #, c-format msgid "" "\n" @@ -4730,29 +4856,29 @@ msgstr[1] "" "Sección de reubicación [%2u] '%s' en compensación %#0 contiene " "entradas %d:\n" -#: src/readelf.c:1597 +#: src/readelf.c:1813 msgid " Offset Type Value Name\n" msgstr " Compensación Tipo Valor Nombre\n" -#: src/readelf.c:1599 +#: src/readelf.c:1815 msgid " Offset Type Value Name\n" msgstr " Compensación Tipo Valor Nombre\n" -#: src/readelf.c:1652 src/readelf.c:1663 src/readelf.c:1676 src/readelf.c:1694 -#: src/readelf.c:1706 src/readelf.c:1825 src/readelf.c:1837 src/readelf.c:1851 -#: src/readelf.c:1870 src/readelf.c:1883 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 +#: src/readelf.c:1922 src/readelf.c:2056 src/readelf.c:2068 src/readelf.c:2082 +#: src/readelf.c:2101 src/readelf.c:2114 msgid "" msgstr "" -#: src/readelf.c:1769 +#: src/readelf.c:2000 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:1771 +#: src/readelf.c:2002 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:1972 +#: src/readelf.c:2210 #, c-format msgid "" "\n" @@ -4767,40 +4893,40 @@ msgstr[1] "" "\n" "La tabla de símbolos [%2u] '%s' contiene entradas %u:\n" -#: src/readelf.c:1978 +#: src/readelf.c:2215 #, 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:1988 +#: src/readelf.c:2223 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:1990 +#: src/readelf.c:2225 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:2010 +#: src/readelf.c:2245 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2098 +#: src/readelf.c:2333 #, c-format msgid "bad dynamic symbol" msgstr "símbolo dinámico erróneo" -#: src/readelf.c:2180 +#: src/readelf.c:2415 msgid "none" msgstr "nada" -#: src/readelf.c:2197 +#: src/readelf.c:2432 msgid "| " msgstr "| " -#: src/readelf.c:2222 +#: src/readelf.c:2463 #, c-format msgid "" "\n" @@ -4821,17 +4947,17 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2245 +#: src/readelf.c:2484 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Versión: %hu Fichero: %s Conteo: %hu\n" -#: src/readelf.c:2258 +#: src/readelf.c:2497 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nombre: %s Banderas: %s Versión: %hu\n" -#: src/readelf.c:2289 +#: src/readelf.c:2534 #, c-format msgid "" "\n" @@ -4852,18 +4978,18 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2319 +#: src/readelf.c:2562 #, 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:2334 +#: src/readelf.c:2577 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Principal %d: %s\n" -#: src/readelf.c:2566 +#: src/readelf.c:2816 #, c-format msgid "" "\n" @@ -4884,15 +5010,15 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'" -#: src/readelf.c:2596 +#: src/readelf.c:2844 msgid " 0 *local* " msgstr " 0 *local* " -#: src/readelf.c:2601 +#: src/readelf.c:2849 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:2632 +#: src/readelf.c:2890 #, c-format msgid "" "\n" @@ -4917,22 +5043,22 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2656 +#: src/readelf.c:2912 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Longitud Número % of total Cobertura\n" -#: src/readelf.c:2658 +#: src/readelf.c:2914 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:2665 +#: src/readelf.c:2921 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:2678 +#: src/readelf.c:2934 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4941,12 +5067,12 @@ msgstr "" " Número promedio de pruebas: búsqueda exitosa: %f\n" " búsqueda sin éxito: %f\n" -#: src/readelf.c:2696 src/readelf.c:2738 src/readelf.c:2779 +#: src/readelf.c:2952 src/readelf.c:2994 src/readelf.c:3035 #, 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:2833 +#: src/readelf.c:3089 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4956,7 +5082,7 @@ msgstr "" " Tamaño de Bitmask: %zu bytes %%% bits establecen segundo " "cambio de dispersión: %u\n" -#: src/readelf.c:2907 +#: src/readelf.c:3164 #, c-format msgid "" "\n" @@ -4973,7 +5099,7 @@ msgstr[1] "" "Sección de lista de biblioteca [%2zu] '%s' en compensación %#0 " "contiene entradas %d:\n" -#: src/readelf.c:2921 +#: src/readelf.c:3178 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4981,7 +5107,7 @@ msgstr "" " Biblioteca Marca de tiempo Indicadores " "de versión de suma de verificación" -#: src/readelf.c:2971 +#: src/readelf.c:3228 #, c-format msgid "" "\n" @@ -4992,135 +5118,140 @@ msgstr "" "Sección de atributos de objeto [%2zu] '%s' de % bytes con " "desplazamiento %#0:\n" -#: src/readelf.c:2987 +#: src/readelf.c:3244 msgid " Owner Size\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:3013 +#: src/readelf.c:3270 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" -#: src/readelf.c:3045 +#: src/readelf.c:3302 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" -#: src/readelf.c:3050 +#: src/readelf.c:3307 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3085 +#: src/readelf.c:3342 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3088 +#: src/readelf.c:3345 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3091 +#: src/readelf.c:3348 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3098 +#: src/readelf.c:3355 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3101 +#: src/readelf.c:3358 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3137 +#: src/readelf.c:3403 #, c-format msgid "%s+%# <%s+%#>" msgstr "%s+%# <%s+%#>" -#: src/readelf.c:3140 +#: src/readelf.c:3406 #, c-format msgid "%s+%#0* <%s+%#>" msgstr "%s+%#0* <%s+%#>" -#: src/readelf.c:3145 +#: src/readelf.c:3411 #, c-format msgid "%# <%s+%#>" msgstr "%# <%s+%#>" -#: src/readelf.c:3148 +#: src/readelf.c:3414 #, c-format msgid "%#0* <%s+%#>" msgstr "%#0* <%s+%#>" -#: src/readelf.c:3154 +#: src/readelf.c:3420 #, c-format msgid "%s+%# <%s>" msgstr "%s+%# <%s>" -#: src/readelf.c:3157 +#: src/readelf.c:3423 #, c-format msgid "%s+%#0* <%s>" msgstr "%s+%#0* <%s>" -#: src/readelf.c:3161 +#: src/readelf.c:3427 #, c-format msgid "%# <%s>" msgstr "%# <%s>" -#: src/readelf.c:3164 +#: src/readelf.c:3430 #, c-format msgid "%#0* <%s>" msgstr "%#0* <%s>" -#: src/readelf.c:3169 +#: src/readelf.c:3435 #, c-format msgid "%s+%#" msgstr "%s+%#" -#: src/readelf.c:3172 +#: src/readelf.c:3438 #, c-format msgid "%s+%#0*" msgstr "%s+%#0*" -#: src/readelf.c:3554 +#: src/readelf.c:3820 msgid "empty block" msgstr "bloque vacío" -#: src/readelf.c:3557 +#: src/readelf.c:3823 #, c-format msgid "%zu byte block:" msgstr "bloque de byte %zu:" -#: src/readelf.c:3934 +#: src/readelf.c:4217 #, c-format msgid "%*s[%4] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:3970 +#: src/readelf.c:4274 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:3977 +#: src/readelf.c:4281 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# utilizado con offsetr de diferente tamaño" -#: src/readelf.c:4057 +#: src/readelf.c:4288 +#, fuzzy, c-format +msgid "%s %# used with different base addresses" +msgstr "%s %# utilizado con direcciones de diferente tamaño" + +#: src/readelf.c:4370 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4065 +#: src/readelf.c:4378 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] ... % bytes ...\n" -#: src/readelf.c:4087 +#: src/readelf.c:4404 #, c-format msgid "" "\n" @@ -5131,7 +5262,7 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#:\n" " [ Código]\n" -#: src/readelf.c:4095 +#: src/readelf.c:4412 #, c-format msgid "" "\n" @@ -5140,30 +5271,30 @@ msgstr "" "\n" "Sección de abreviatura en compensación %:\n" -#: src/readelf.c:4108 +#: src/readelf.c:4425 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** error en lectura de abreviatura: %s\n" -#: src/readelf.c:4124 +#: src/readelf.c:4441 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] compensación: %, hijos: %s, etiqueta: %s\n" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "yes" msgstr "sí" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "no" msgstr "no" -#: src/readelf.c:4162 +#: src/readelf.c:4478 src/readelf.c:4551 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "no se ha podido obtener contenido de .debug_aranges: %s" -#: src/readelf.c:4167 +#: src/readelf.c:4493 #, c-format msgid "" "\n" @@ -5178,12 +5309,12 @@ msgstr[1] "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entradas %zu:\n" -#: src/readelf.c:4198 +#: src/readelf.c:4524 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4200 +#: src/readelf.c:4526 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5191,13 +5322,8 @@ msgstr "" " Inicio [%*zu]: %0#*, longitud: %5, compensación CU DIE: " "%6\n" -#: src/readelf.c:4219 -#, c-format -msgid "cannot get .debug_ranges content: %s" -msgstr "no se ha podido obtener contenido de .debug_ranges: %s" - -#: src/readelf.c:4224 src/readelf.c:4728 src/readelf.c:5505 src/readelf.c:6006 -#: src/readelf.c:6121 src/readelf.c:6277 src/readelf.c:6699 +#: src/readelf.c:4556 src/readelf.c:4710 src/readelf.c:5231 src/readelf.c:6145 +#: src/readelf.c:6646 src/readelf.c:6766 src/readelf.c:6922 src/readelf.c:7345 #, c-format msgid "" "\n" @@ -5206,37 +5332,115 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#:\n" -#: src/readelf.c:4248 src/readelf.c:6031 +#: src/readelf.c:4569 src/readelf.c:6171 +#, c-format +msgid "" +"\n" +"Table at offset %Zu:\n" +msgstr "" +"\n" +"Tabla en compensación %Zu:\n" + +#: src/readelf.c:4573 src/readelf.c:5255 src/readelf.c:6180 +#, c-format +msgid "invalid data in section [%zu] '%s'" +msgstr "Datos inválidos en sección [%zu] '%s'" + +#: src/readelf.c:4589 +#, fuzzy, c-format +msgid "" +"\n" +" Length: %6\n" +msgstr " (compensación: %#)" + +#: src/readelf.c:4601 +#, fuzzy, c-format +msgid " DWARF version: %6\n" +msgstr " %s: %\n" + +#: src/readelf.c:4605 +#, c-format +msgid "unsupported aranges version" +msgstr "" + +#: src/readelf.c:4616 +#, fuzzy, c-format +msgid " CU offset: %6\n" +msgstr " (compensación: %#)" + +#: src/readelf.c:4622 +#, fuzzy, c-format +msgid " Address size: %6\n" +msgstr " (fin de compensación: %#)" + +#: src/readelf.c:4626 +#, fuzzy, c-format +msgid "unsupported address size" +msgstr "no hay valor de dirección" + +#: src/readelf.c:4631 +#, fuzzy, c-format +msgid "" +" Segment size: %6\n" +"\n" +msgstr " establecer archivo a %\n" + +#: src/readelf.c:4635 +#, c-format +msgid "unsupported segment size" +msgstr "" + +#: src/readelf.c:4675 +#, fuzzy, c-format +msgid " %s..%s (%)\n" +msgstr " %s: %\n" + +#: src/readelf.c:4678 +#, fuzzy, c-format +msgid " %s..%s\n" +msgstr " [%6tx] %s..%s\n" + +#: src/readelf.c:4687 +#, c-format +msgid " %Zu padding bytes\n" +msgstr "" + +#: src/readelf.c:4705 +#, c-format +msgid "cannot get .debug_ranges content: %s" +msgstr "no se ha podido obtener contenido de .debug_ranges: %s" + +#: src/readelf.c:4735 src/readelf.c:6673 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4270 src/readelf.c:6053 +#: src/readelf.c:4757 src/readelf.c:6695 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] (dirección base) %s\n" -#: src/readelf.c:4276 src/readelf.c:6059 +#: src/readelf.c:4764 src/readelf.c:6702 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] lista vacía\n" -#: src/readelf.c:4285 +#: src/readelf.c:4775 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4287 +#: src/readelf.c:4777 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:4717 src/readelf.c:6768 src/readelf.c:6870 src/readelf.c:7028 -#, c-format -msgid "cannot get %s content: %s" -msgstr "No se puede obtener el contenido %s: %s" +#: src/readelf.c:5210 +#, fuzzy, c-format +msgid "cannot get ELF: %s" +msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:4724 +#: src/readelf.c:5227 #, c-format msgid "" "\n" @@ -5246,12 +5450,7 @@ msgstr "" "Sección de información de marco de llamada [%2zu] '%s' en compensación " "%#:\n" -#: src/readelf.c:4752 src/readelf.c:5540 -#, c-format -msgid "invalid data in section [%zu] '%s'" -msgstr "Datos inválidos en sección [%zu] '%s'" - -#: src/readelf.c:4774 +#: src/readelf.c:5277 #, c-format msgid "" "\n" @@ -5260,50 +5459,50 @@ msgstr "" "\n" " [%6tx] Terminator cero\n" -#: src/readelf.c:4859 +#: src/readelf.c:5362 #, c-format msgid "invalid augmentation length" msgstr "longitud de aumento inválida" -#: src/readelf.c:4871 +#: src/readelf.c:5374 msgid "FDE address encoding: " msgstr "Codificación de dirección FDE:" -#: src/readelf.c:4877 +#: src/readelf.c:5380 msgid "LSDA pointer encoding: " msgstr "Codificación de puntero LSDA:" -#: src/readelf.c:4975 +#: src/readelf.c:5491 #, c-format msgid " (offset: %#)" msgstr " (compensación: %#)" -#: src/readelf.c:4982 +#: src/readelf.c:5498 #, c-format msgid " (end offset: %#)" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5009 +#: src/readelf.c:5525 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr "Puntero %-26sLSDA: %#\n" -#: src/readelf.c:5060 +#: src/readelf.c:5577 #, c-format msgid "cannot get attribute code: %s" msgstr "No se puede obtener código de atributo: %s" -#: src/readelf.c:5069 +#: src/readelf.c:5586 #, c-format msgid "cannot get attribute form: %s" msgstr "No se puede obtener forma de atributo: %s" -#: src/readelf.c:5084 +#: src/readelf.c:5601 #, c-format msgid "cannot get attribute value: %s" msgstr "No se puede obtener valor: %s" -#: src/readelf.c:5342 +#: src/readelf.c:5894 #, c-format msgid "" "\n" @@ -5314,7 +5513,7 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#:\n" " [Offset]\n" -#: src/readelf.c:5374 +#: src/readelf.c:5926 #, c-format msgid "" " Type unit at offset %:\n" @@ -5327,7 +5526,7 @@ msgstr "" "Tamaño de dirección: %, Tamaño de compensación: %\n" " Tipo de firma: %#, Tipo de compensación: %#\n" -#: src/readelf.c:5383 +#: src/readelf.c:5935 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5338,48 +5537,49 @@ msgstr "" " Versión: %, Compensación de sección de abreviatura: %, " "Tamaño de dirección: %, Tamaño de compensación: %\n" -#: src/readelf.c:5409 +#: src/readelf.c:5960 #, c-format msgid "cannot get DIE at offset % in section '%s': %s" msgstr "no se puede obtener DIE en compensación % en sección '%s': %s" -#: src/readelf.c:5421 +#: src/readelf.c:5974 #, c-format msgid "cannot get DIE offset: %s" msgstr "no se puede obtener DIE en compensación: %s" -#: src/readelf.c:5430 +#: src/readelf.c:5983 #, c-format msgid "cannot get tag of DIE at offset % in section '%s': %s" msgstr "" "no se ha podido obtener etiqueta de DIE en compensación% en sección " "'%s': %s" -#: src/readelf.c:5461 +#: src/readelf.c:6015 #, c-format msgid "cannot get next DIE: %s\n" msgstr "No se puede obtener próximo DIE: %s\n" -#: src/readelf.c:5469 +#: src/readelf.c:6023 #, c-format msgid "cannot get next DIE: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:5518 -#, 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:5531 -#, c-format +#: src/readelf.c:6059 +#, fuzzy, c-format msgid "" "\n" -"Table at offset %Zu:\n" +"DWARF section [%2zu] '%s' at offset %#:\n" +"\n" msgstr "" "\n" -"Tabla en compensación %Zu:\n" +"Sección DWARF [%2zu] '%s' en compensación %#:\n" -#: src/readelf.c:5586 +#: src/readelf.c:6158 +#, 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:6226 #, c-format msgid "" "\n" @@ -5408,19 +5608,19 @@ msgstr "" "\n" "Códigos operativos:\n" -#: src/readelf.c:5607 +#: src/readelf.c:6247 #, 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:5622 +#: src/readelf.c:6262 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] argumento %hhu \n" msgstr[1] " [%*] argumento %hhu\n" -#: src/readelf.c:5630 +#: src/readelf.c:6270 msgid "" "\n" "Directory table:" @@ -5428,7 +5628,7 @@ msgstr "" "\n" "Tabla de Directorio:" -#: src/readelf.c:5646 +#: src/readelf.c:6286 msgid "" "\n" "File name table:\n" @@ -5438,7 +5638,7 @@ msgstr "" "Tabla de nombre de archivo:\n" " Directorio de entrada Tiempo Tamaño Nombre" -#: src/readelf.c:5675 +#: src/readelf.c:6315 msgid "" "\n" "Line number statements:" @@ -5446,214 +5646,214 @@ msgstr "" "\n" " Declaraciones de número de Línea:" -#: src/readelf.c:5751 +#: src/readelf.c:6391 #, 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:5756 +#: src/readelf.c:6396 #, 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:5776 +#: src/readelf.c:6416 #, c-format msgid " extended opcode %u: " msgstr " Código operativo extendido %u: " -#: src/readelf.c:5781 +#: src/readelf.c:6421 #, fuzzy msgid " end of sequence" msgstr "Fin de secuencia" -#: src/readelf.c:5798 +#: src/readelf.c:6438 #, fuzzy, c-format msgid " set address to %s\n" msgstr "Establecer dirección a %s\n" -#: src/readelf.c:5819 +#: src/readelf.c:6459 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" "definir nuevo archivo: dir=%u, mtime=%, longitud=%, nombre=" "%s\n" -#: src/readelf.c:5832 +#: src/readelf.c:6472 #, c-format msgid " set discriminator to %u\n" msgstr " establecer discriminador a %u\n" -#: src/readelf.c:5837 +#: src/readelf.c:6477 #, fuzzy msgid " unknown opcode" msgstr "código operativo desconocido " -#: src/readelf.c:5849 +#: src/readelf.c:6489 msgid " copy" msgstr "Copiar" -#: src/readelf.c:5860 +#: src/readelf.c:6500 #, 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:5864 +#: src/readelf.c:6504 #, fuzzy, c-format msgid " advance address by %u to %s\n" msgstr "Dirección de avance por %u a %s\n" -#: src/readelf.c:5875 +#: src/readelf.c:6515 #, c-format msgid " advance line by constant %d to %\n" msgstr " línea de avance por la constante %d a %\n" -#: src/readelf.c:5883 +#: src/readelf.c:6523 #, c-format msgid " set file to %\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:5893 +#: src/readelf.c:6533 #, c-format msgid " set column to %\n" msgstr " Establecer columna a %\n" -#: src/readelf.c:5900 +#: src/readelf.c:6540 #, c-format msgid " set '%s' to %\n" msgstr "Establecer '%s' a %\n" -#: src/readelf.c:5906 +#: src/readelf.c:6546 msgid " set basic block flag" msgstr "Establecer bandera de bloque básico" -#: src/readelf.c:5915 +#: src/readelf.c:6555 #, 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:5919 +#: src/readelf.c:6559 #, 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:5937 +#: src/readelf.c:6577 #, 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:5946 +#: src/readelf.c:6586 msgid " set prologue end flag" msgstr " Establecer bandera prologue_end" -#: src/readelf.c:5951 +#: src/readelf.c:6591 msgid " set epilogue begin flag" msgstr " Establecer bandera epilogue_begin" -#: src/readelf.c:5960 +#: src/readelf.c:6600 #, c-format msgid " set isa to %u\n" msgstr " establecer isa para %u\n" -#: src/readelf.c:5969 +#: src/readelf.c:6609 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " opcódigo con parámetro % desconocido:" msgstr[1] " opcódigo con parámetros % desconocido:" -#: src/readelf.c:6001 +#: src/readelf.c:6641 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:6071 +#: src/readelf.c:6716 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6073 +#: src/readelf.c:6718 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6080 +#: src/readelf.c:6725 msgid " \n" msgstr " \n" -#: src/readelf.c:6132 src/readelf.c:6286 +#: src/readelf.c:6777 src/readelf.c:6931 #, 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:6211 +#: src/readelf.c:6856 #, 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:6327 +#: src/readelf.c:6972 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:6339 +#: src/readelf.c:6984 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:6345 src/readelf.c:7055 +#: src/readelf.c:6990 src/readelf.c:7703 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:6352 +#: src/readelf.c:6997 #, fuzzy, c-format msgid " Flag: 0x%\n" msgstr " Dirección de punto de entrada: %#\n" -#: src/readelf.c:6355 +#: src/readelf.c:7000 #, fuzzy, c-format msgid " Offset length: %\n" msgstr " (compensación: %#)" -#: src/readelf.c:6363 +#: src/readelf.c:7008 #, fuzzy, c-format msgid " .debug_line offset: 0x%\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:6375 +#: src/readelf.c:7021 #, fuzzy, c-format msgid " extension opcode table, % items:\n" msgstr " opcódigo con parámetro % desconocido:" -#: src/readelf.c:6382 +#: src/readelf.c:7028 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:6394 +#: src/readelf.c:7040 #, fuzzy, c-format msgid " % arguments:" msgstr " [%*] argumento %hhu \n" -#: src/readelf.c:6422 +#: src/readelf.c:7068 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:6657 +#: src/readelf.c:7303 #, c-format msgid "vendor opcode not verified?" msgstr "" -#: src/readelf.c:6685 +#: src/readelf.c:7331 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" " Compensación [%5d] DIE: %6, Compensación CU DIE: %6, " "nombre: %s\n" -#: src/readelf.c:6726 +#: src/readelf.c:7372 #, c-format msgid "" "\n" @@ -5664,12 +5864,12 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#:\n" " %*s String\n" -#: src/readelf.c:6740 +#: src/readelf.c:7386 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** error en lectura de cadenas: %s\n" -#: src/readelf.c:6760 +#: src/readelf.c:7406 #, c-format msgid "" "\n" @@ -5678,7 +5878,7 @@ msgstr "" "\n" "Sección de tabla de búsqueda de marco de llamada [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:6862 +#: src/readelf.c:7508 #, c-format msgid "" "\n" @@ -5687,22 +5887,22 @@ msgstr "" "\n" "Excepción en el manejo de la sección de tabla [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:6885 +#: src/readelf.c:7531 #, c-format msgid " LPStart encoding: %#x " msgstr "Codificación LPStart: %#x " -#: src/readelf.c:6897 +#: src/readelf.c:7543 #, c-format msgid " TType encoding: %#x " msgstr "Codificación TType: %#x " -#: src/readelf.c:6911 +#: src/readelf.c:7557 #, c-format msgid " Call site encoding: %#x " msgstr "Codificación de sitio de llamada: %#x " -#: src/readelf.c:6924 +#: src/readelf.c:7570 msgid "" "\n" " Call site table:" @@ -5710,7 +5910,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:6938 +#: src/readelf.c:7584 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5723,12 +5923,12 @@ msgstr "" " Landing pad: %#\n" " Action: %u\n" -#: src/readelf.c:6998 +#: src/readelf.c:7644 #, c-format msgid "invalid TType encoding" msgstr "Codificación TType inválida" -#: src/readelf.c:7019 +#: src/readelf.c:7665 #, fuzzy, c-format msgid "" "\n" @@ -5737,37 +5937,37 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:7048 +#: src/readelf.c:7694 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:7064 +#: src/readelf.c:7712 #, fuzzy, c-format msgid " CU offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:7071 +#: src/readelf.c:7719 #, fuzzy, c-format msgid " TU offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:7078 +#: src/readelf.c:7726 #, fuzzy, c-format msgid " address offset: %#\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:7085 +#: src/readelf.c:7733 #, fuzzy, c-format msgid " symbol offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:7092 +#: src/readelf.c:7740 #, fuzzy, c-format msgid " constant offset: %#\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:7099 +#: src/readelf.c:7747 #, fuzzy, c-format msgid "" "\n" @@ -5776,7 +5976,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:7121 +#: src/readelf.c:7769 #, fuzzy, c-format msgid "" "\n" @@ -5785,7 +5985,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:7147 +#: src/readelf.c:7795 #, fuzzy, c-format msgid "" "\n" @@ -5794,7 +5994,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:7174 +#: src/readelf.c:7824 #, fuzzy, c-format msgid "" "\n" @@ -5803,17 +6003,17 @@ msgstr "" "\n" "Tabla de símbolos inválida en compensación %#0\n" -#: src/readelf.c:7259 +#: src/readelf.c:7909 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "no se puede depurar descriptor de contexto: %s" -#: src/readelf.c:7409 src/readelf.c:8010 +#: src/readelf.c:8069 src/readelf.c:8675 src/readelf.c:8786 src/readelf.c:8844 #, c-format msgid "cannot convert core note data: %s" msgstr "no es posible convertir datos de la nota principal: %s" -#: src/readelf.c:7750 +#: src/readelf.c:8416 #, c-format msgid "" "\n" @@ -5822,21 +6022,21 @@ msgstr "" "\n" "%*s... ..." -#: src/readelf.c:8109 +#: src/readelf.c:8919 msgid " Owner Data size Type\n" msgstr " Owner Data size Type\n" -#: src/readelf.c:8127 +#: src/readelf.c:8937 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:8161 +#: src/readelf.c:8987 #, 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:8188 +#: src/readelf.c:9014 #, c-format msgid "" "\n" @@ -5845,7 +6045,7 @@ msgstr "" "\n" "Sección de nota [%2zu] '%s' de % bytes en compensación %#0:\n" -#: src/readelf.c:8211 +#: src/readelf.c:9037 #, c-format msgid "" "\n" @@ -5854,7 +6054,7 @@ msgstr "" "\n" "Segmento de nota de % bytes en compensación %#0:\n" -#: src/readelf.c:8257 +#: src/readelf.c:9083 #, c-format msgid "" "\n" @@ -5863,12 +6063,12 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:8263 src/readelf.c:8286 +#: src/readelf.c:9089 src/readelf.c:9112 #, 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:8267 +#: src/readelf.c:9093 #, c-format msgid "" "\n" @@ -5878,7 +6078,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', % bytes en compensación " "%#0:\n" -#: src/readelf.c:8280 +#: src/readelf.c:9106 #, c-format msgid "" "\n" @@ -5887,7 +6087,7 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:8290 +#: src/readelf.c:9116 #, c-format msgid "" "\n" @@ -5897,7 +6097,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene % bytes en compensación " "%#0:\n" -#: src/readelf.c:8338 +#: src/readelf.c:9164 #, c-format msgid "" "\n" @@ -5906,7 +6106,7 @@ msgstr "" "\n" "sección [%lu] no existe" -#: src/readelf.c:8367 +#: src/readelf.c:9193 #, c-format msgid "" "\n" @@ -5915,12 +6115,12 @@ msgstr "" "\n" "sección '%s' no existe" -#: src/readelf.c:8424 +#: src/readelf.c:9250 #, 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:8427 +#: src/readelf.c:9253 #, c-format msgid "" "\n" @@ -5929,7 +6129,7 @@ msgstr "" "\n" "Archivo '%s' no tiene índice de símbolo\n" -#: src/readelf.c:8431 +#: src/readelf.c:9257 #, c-format msgid "" "\n" @@ -5938,12 +6138,12 @@ msgstr "" "\n" "Índice de archivo '%s' tiene %Zu entradas:\n" -#: src/readelf.c:8449 +#: src/readelf.c:9275 #, 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:8454 +#: src/readelf.c:9280 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Miembro de archivo contiene '%s':\n" @@ -6009,12 +6209,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:581 +#: src/size.c:438 src/size.c:571 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:606 +#: src/size.c:596 msgid "(TOTALS)\n" msgstr "(TOTALES)\n" @@ -6054,27 +6254,27 @@ msgstr "Alias para --radix=o" msgid "Print the strings of printable characters in files." msgstr "Imprimir las cadenas de caracteres imprimibles en archivos." -#: src/strings.c:260 src/strings.c:295 +#: src/strings.c:267 src/strings.c:302 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "Valor inválido '%s' para parámetro %s" -#: src/strings.c:306 +#: src/strings.c:313 #, c-format msgid "invalid minimum length of matched string size" msgstr "longitud mínima inválida de tamaño de cadena coincidente" -#: src/strings.c:591 +#: src/strings.c:596 #, c-format msgid "lseek64 failed" msgstr "lseek64 falló" -#: src/strings.c:608 src/strings.c:672 +#: src/strings.c:613 src/strings.c:677 #, c-format msgid "re-mmap failed" msgstr "re-mmap falló" -#: src/strings.c:645 +#: src/strings.c:650 #, c-format msgid "mprotect failed" msgstr "mprotect falló" @@ -6142,7 +6342,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" @@ -6167,87 +6367,87 @@ msgstr "mientras se abría '%s'" msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" -#: src/strip.c:467 +#: src/strip.c:468 #, c-format msgid "cannot open EBL backend" msgstr "No se puede abrir el segundo plano EBL" -#: src/strip.c:517 src/strip.c:541 +#: src/strip.c:518 src/strip.c:542 #, c-format msgid "cannot create new file '%s': %s" msgstr "no se puede crear fichero nuevo '%s': %s" -#: src/strip.c:601 +#: src/strip.c:608 #, c-format msgid "illformed file '%s'" msgstr "Fichero illformed '%s'" -#: src/strip.c:905 src/strip.c:994 +#: src/strip.c:930 src/strip.c:1019 #, c-format msgid "while generating output file: %s" msgstr "al generar fichero de salida: %s" -#: src/strip.c:967 src/strip.c:1929 +#: src/strip.c:992 src/strip.c:1957 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:981 +#: src/strip.c:1006 #, c-format msgid "while preparing output for '%s'" msgstr "al preparar salida para '%s'" -#: src/strip.c:1032 src/strip.c:1088 +#: src/strip.c:1057 src/strip.c:1114 #, c-format msgid "while create section header section: %s" msgstr "al crear sección de encabezamiento de sección: %s" -#: src/strip.c:1038 +#: src/strip.c:1063 #, c-format msgid "cannot allocate section data: %s" msgstr "no se puede asignar espacio para los datos: %s" -#: src/strip.c:1097 +#: src/strip.c:1123 #, 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:1724 +#: src/strip.c:1752 #, fuzzy, c-format msgid "bad relocation" msgstr "Mostrar reubicaciones" -#: src/strip.c:1841 src/strip.c:1951 +#: src/strip.c:1869 src/strip.c:1979 #, c-format msgid "while writing '%s': %s" msgstr "al escribir '%s': %s" -#: src/strip.c:1852 +#: src/strip.c:1880 #, c-format msgid "while creating '%s'" msgstr "al crear '%s'" -#: src/strip.c:1874 +#: src/strip.c:1902 #, 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:1937 +#: src/strip.c:1965 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: error al leer el fichero: %s" -#: src/strip.c:1976 src/strip.c:1996 +#: src/strip.c:2004 src/strip.c:2024 #, c-format msgid "while writing '%s'" msgstr "al escribir '%s'" -#: src/strip.c:2030 src/strip.c:2037 +#: src/strip.c:2061 src/strip.c:2068 #, c-format msgid "error while finishing '%s': %s" msgstr "Error al terminar '%s': %s" -#: src/strip.c:2060 src/strip.c:2117 +#: src/strip.c:2091 src/strip.c:2148 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "no es posible establecer acceso y fecha de modificación de '%s'" @@ -6286,211 +6486,215 @@ 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:263 src/unstrip.c:1828 #, c-format msgid "cannot create program headers: %s" msgstr "No pueden crear encabezamientos de programa: %s" -#: src/unstrip.c:262 +#: src/unstrip.c:269 #, c-format msgid "cannot copy program header: %s" msgstr "no puede copiar encabezamiento de programa: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:279 #, 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:282 src/unstrip.c:1509 #, 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:284 src/unstrip.c:1511 #, c-format msgid "cannot copy section data: %s" msgstr "no pueden copiar datos de sección: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:308 #, 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:348 src/unstrip.c:765 src/unstrip.c:1543 #, 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:364 src/unstrip.c:582 src/unstrip.c:603 src/unstrip.c:615 +#: src/unstrip.c:1564 src/unstrip.c:1694 src/unstrip.c:1718 #, 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:374 #, 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:413 src/unstrip.c:424 #, c-format msgid "cannot update relocation: %s" msgstr "no se puede actualizar reubicación: %s" -#: src/unstrip.c:504 +#: src/unstrip.c:511 #, 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:523 #, 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:771 #, 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:913 src/unstrip.c:1254 #, 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:954 src/unstrip.c:973 src/unstrip.c:1006 #, 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:994 #, 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:1049 src/unstrip.c:1374 #, 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:1174 src/unstrip.c:1189 src/unstrip.c:1455 #, 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:1198 #, 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:1225 src/unstrip.c:1229 #, 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:1233 src/unstrip.c:1237 src/unstrip.c:1470 #, 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:1240 #, 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:1299 src/unstrip.c:1389 #, 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:1449 #, 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:1551 #, 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:1789 #, 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:1810 #, c-format msgid "cannot get ELF header: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/unstrip.c:1830 +#: src/unstrip.c:1838 #, 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:1843 src/unstrip.c:1922 #, 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:1891 #, 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:1894 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -6498,58 +6702,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:1913 src/unstrip.c:1964 src/unstrip.c:1976 src/unstrip.c:2062 #, 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:1955 +msgid "WARNING: " +msgstr "" + +#: src/unstrip.c:1957 +msgid ", use --force" +msgstr "" + +#: src/unstrip.c:1980 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1983 +msgid "ELF header type (e_type) different" +msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:1986 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:1989 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "" + +#: src/unstrip.c:2019 #, 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:2023 #, 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:2038 #, 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:2042 #, 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:2055 #, 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:2086 #, 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:2219 #, c-format msgid "no matching modules found" msgstr "No se encontraron módulos coincidentes" -#: src/unstrip.c:2203 +#: src/unstrip.c:2228 #, c-format msgid "matched more than one module" msgstr "coincidió con más de un módulo" -#: src/unstrip.c:2250 +#: src/unstrip.c:2275 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -6557,7 +6780,7 @@ msgstr "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" -#: src/unstrip.c:2251 +#: src/unstrip.c:2276 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" @@ -6607,6 +6830,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" diff --git a/po/ja.gmo b/po/ja.gmo index 6a4151def3aff157ad7c64ee228cd73c99e18d22..54d35b1847613b874ebb3dec53ea76f930c804e9 100644 GIT binary patch delta 28 kcmdlsi*?&9)(z|C^P1=ySm+v=D;OGD8JTU~J->P_0GJmFZ2$lO delta 28 kcmdlsi*?&9)(z|C^BUP_0GICyY5)KL diff --git a/po/ja.po b/po/ja.po index 0632bfd..3b9afaa 100644 --- a/po/ja.po +++ b/po/ja.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2012-08-27 20:34+0200\n" +"POT-Creation-Date: 2014-08-27 11:26+0200\n" "PO-Revision-Date: 2009-09-20 15:32+0900\n" "Last-Translator: Hyu_gabaru Ryu_ichi \n" "Language-Team: Japanese \n" @@ -19,18 +19,18 @@ 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:2842 -#: src/readelf.c:3181 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3098 +#: src/readelf.c:3447 src/readelf.c:8018 src/unstrip.c:2115 src/unstrip.c:2323 #, c-format msgid "memory exhausted" msgstr "メモリー消費済み" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:49 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:53 #: libelf/elf_error.c:60 msgid "no error" msgstr "エラー無し" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:51 +#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:55 #: libelf/elf_error.c:91 msgid "out of memory" msgstr "メモリー不足" @@ -69,7 +69,7 @@ msgstr "データの出力中にエラー" msgid "no backend support available" msgstr "バックエンドサポートが利用できません" -#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:50 +#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:54 #: libelf/elf_error.c:63 msgid "unknown error" msgstr "不明なエラー" @@ -166,7 +166,7 @@ msgstr "不当な DWARF バージョン" msgid "invalid directory index" msgstr "不当なディレクトリー索引" -#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:70 +#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:74 msgid "address out of range" msgstr "アドレスが範囲外です" @@ -186,7 +186,7 @@ msgstr "不当な行索引" msgid "invalid address range index" msgstr "不当なアドレス範囲索引" -#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:71 +#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:75 msgid "no matching address range" msgstr "アドレス範囲に対応しません" @@ -210,7 +210,7 @@ msgstr "不当な CFI セクション" msgid "no alternative debug link found" msgstr "" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdwfl/argp-std.c:46 src/unstrip.c:2265 msgid "Input selection options:" msgstr "選択オプションを入力してください:" @@ -246,139 +246,199 @@ msgstr "全てのモジュール付きのカーネル" msgid "Search path for separate debuginfo files" msgstr "分離した debuginfo ファイルべきパスを探す" -#: libdwfl/argp-std.c:142 +#: libdwfl/argp-std.c:157 msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "-e か、-p、-k、-K、--core のひとつだけが認められます" -#: libdwfl/argp-std.c:202 -#, c-format -msgid "cannot read ELF core file: %s" -msgstr "ELF コアファイルを読めません: %s" - -#: libdwfl/argp-std.c:220 -msgid "No modules recognized in core file" -msgstr "コアファイルの中にモジュールを認識できません" - -#: libdwfl/argp-std.c:232 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "カーネルシンボルをロードできません" -#: libdwfl/argp-std.c:236 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "カーネルモジュールを見つけられません" -#: libdwfl/argp-std.c:250 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "カーネルかモジュールを見つけられません" -#: libdwfl/libdwflP.h:52 +#: libdwfl/argp-std.c:290 +#, c-format +msgid "cannot read ELF core file: %s" +msgstr "ELF コアファイルを読めません: %s" + +#: libdwfl/argp-std.c:311 +msgid "No modules recognized in core file" +msgstr "コアファイルの中にモジュールを認識できません" + +#: libdwfl/libdwflP.h:56 msgid "See errno" msgstr "" -#: libdwfl/libdwflP.h:53 +#: libdwfl/libdwflP.h:57 msgid "See elf_errno" msgstr "" -#: libdwfl/libdwflP.h:54 +#: libdwfl/libdwflP.h:58 msgid "See dwarf_errno" msgstr "" -#: libdwfl/libdwflP.h:55 +#: libdwfl/libdwflP.h:59 msgid "See ebl_errno (XXX missing)" msgstr "" -#: libdwfl/libdwflP.h:56 +#: libdwfl/libdwflP.h:60 msgid "gzip decompression failed" msgstr "" -#: libdwfl/libdwflP.h:57 +#: libdwfl/libdwflP.h:61 msgid "bzip2 decompression failed" msgstr "" -#: libdwfl/libdwflP.h:58 +#: libdwfl/libdwflP.h:62 msgid "LZMA decompression failed" msgstr "" -#: libdwfl/libdwflP.h:59 +#: libdwfl/libdwflP.h:63 msgid "no support library found for machine" msgstr "" -#: libdwfl/libdwflP.h:60 +#: libdwfl/libdwflP.h:64 msgid "Callbacks missing for ET_REL file" msgstr "" -#: libdwfl/libdwflP.h:61 +#: libdwfl/libdwflP.h:65 msgid "Unsupported relocation type" msgstr "" -#: libdwfl/libdwflP.h:62 +#: libdwfl/libdwflP.h:66 msgid "r_offset is bogus" msgstr "" -#: libdwfl/libdwflP.h:63 libelf/elf_error.c:111 libelf/elf_error.c:171 +#: libdwfl/libdwflP.h:67 libelf/elf_error.c:111 libelf/elf_error.c:171 msgid "offset out of range" msgstr "オフセットが範囲を越えている" -#: libdwfl/libdwflP.h:64 +#: libdwfl/libdwflP.h:68 #, fuzzy msgid "relocation refers to undefined symbol" msgstr "定義されたシンボルの印刷サイズ" -#: libdwfl/libdwflP.h:65 +#: libdwfl/libdwflP.h:69 msgid "Callback returned failure" msgstr "" -#: libdwfl/libdwflP.h:66 +#: libdwfl/libdwflP.h:70 #, fuzzy msgid "No DWARF information found" msgstr "DWARF 情報がありません" -#: libdwfl/libdwflP.h:67 +#: libdwfl/libdwflP.h:71 msgid "No symbol table found" msgstr "" -#: libdwfl/libdwflP.h:68 +#: libdwfl/libdwflP.h:72 #, fuzzy msgid "No ELF program headers" msgstr "プログラムヘッダーを得られません: %s" -#: libdwfl/libdwflP.h:69 +#: libdwfl/libdwflP.h:73 msgid "address range overlaps an existing module" msgstr "" -#: libdwfl/libdwflP.h:72 +#: libdwfl/libdwflP.h:76 msgid "image truncated" msgstr "" -#: libdwfl/libdwflP.h:73 +#: libdwfl/libdwflP.h:77 #, fuzzy msgid "ELF file opened" msgstr "ファイルのオープンを追跡します。" -#: libdwfl/libdwflP.h:74 +#: libdwfl/libdwflP.h:78 #, fuzzy msgid "not a valid ELF file" msgstr "不当な ELF ファイル" -#: libdwfl/libdwflP.h:75 +#: libdwfl/libdwflP.h:79 #, fuzzy msgid "cannot handle DWARF type description" msgstr "Elf 記述子を生成できません: %s" -#: libdwfl/libdwflP.h:76 +#: libdwfl/libdwflP.h:80 msgid "ELF file does not match build ID" msgstr "" -#: libdwfl/libdwflP.h:77 +#: libdwfl/libdwflP.h:81 #, fuzzy msgid "corrupt .gnu.prelink_undo section data" msgstr "ラインデータセクションデータを得られません: %s" +#: libdwfl/libdwflP.h:82 +msgid "Internal error due to ebl" +msgstr "" + +#: libdwfl/libdwflP.h:83 +msgid "Missing data in core file" +msgstr "" + +#: libdwfl/libdwflP.h:84 +#, fuzzy +msgid "Invalid register" +msgstr "不当なパラメーター" + +#: libdwfl/libdwflP.h:85 +msgid "Error reading process memory" +msgstr "" + +#: libdwfl/libdwflP.h:86 +msgid "Couldn't find architecture of any ELF" +msgstr "" + +#: libdwfl/libdwflP.h:87 +msgid "Error parsing /proc filesystem" +msgstr "" + +#: libdwfl/libdwflP.h:88 +#, fuzzy +msgid "Invalid DWARF" +msgstr "不当な DWARF" + +#: libdwfl/libdwflP.h:89 +msgid "Unsupported DWARF" +msgstr "" + +#: libdwfl/libdwflP.h:90 +msgid "Unable to find more threads" +msgstr "" + +#: libdwfl/libdwflP.h:91 +msgid "Dwfl already has attached state" +msgstr "" + +#: libdwfl/libdwflP.h:92 +msgid "Dwfl has no attached state" +msgstr "" + +#: libdwfl/libdwflP.h:93 +msgid "Unwinding not supported for this architecture" +msgstr "" + +#: libdwfl/libdwflP.h:94 +#, fuzzy +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 "バックエンドがありません" -#: libebl/eblcorenotetypename.c:86 libebl/eblobjecttypename.c:57 +#: libebl/eblcorenotetypename.c:102 libebl/eblobjecttypename.c:57 #: libebl/eblobjnotetypename.c:73 libebl/eblosabiname.c:77 #: libebl/eblsectionname.c:89 libebl/eblsectiontypename.c:119 #: libebl/eblsegmenttypename.c:83 @@ -474,7 +534,7 @@ msgstr "ソース演算子の大きさが無効" msgid "invalid size of destination operand" msgstr "宛先演算子の大きさが無効" -#: libelf/elf_error.c:87 src/readelf.c:4697 +#: libelf/elf_error.c:87 src/readelf.c:5190 #, c-format msgid "invalid encoding" msgstr "無効なエンコード" @@ -556,8 +616,8 @@ msgstr "データ/scnが不整合です" msgid "invalid section header" msgstr "不当なセクションヘッダー" -#: libelf/elf_error.c:187 src/readelf.c:6335 src/readelf.c:6780 -#: src/readelf.c:6881 src/readelf.c:7043 +#: libelf/elf_error.c:187 src/readelf.c:6980 src/readelf.c:7426 +#: src/readelf.c:7527 src/readelf.c:7689 #, c-format msgid "invalid data" msgstr "不当なデータ" @@ -622,31 +682,41 @@ msgid "Also show symbol or section names" msgstr "" #: src/addr2line.c:64 +msgid "Also show symbol and the section names" +msgstr "" + +#: src/addr2line.c:65 msgid "Also show line table flags" msgstr "" -#: src/addr2line.c:66 +#: src/addr2line.c:67 msgid "Treat addresses as offsets relative to NAME section." msgstr "" -#: src/addr2line.c:68 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 +#: src/addr2line.c:69 +msgid "" +"Show all source locations that caused inline expansion of subroutines at the " +"address." +msgstr "" + +#: src/addr2line.c:72 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 #: src/strings.c:75 msgid "Miscellaneous:" msgstr "雑則:" -#: src/addr2line.c:77 +#: src/addr2line.c:81 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" -#: src/addr2line.c:81 +#: src/addr2line.c:85 msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:181 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:231 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 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:460 src/size.c:211 src/strings.c:219 -#: src/strip.c:213 src/unstrip.c:226 +#: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -657,30 +727,30 @@ 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:186 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:236 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 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:465 src/size.c:216 src/strings.c:224 -#: src/strip.c:218 src/unstrip.c:231 +#: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "%s によって書かれました。\n" -#: src/addr2line.c:405 +#: src/addr2line.c:474 #, c-format msgid "Section syntax requires exactly one module" msgstr "" -#: src/addr2line.c:428 +#: src/addr2line.c:497 #, c-format msgid "offset %# lies outside section '%s'" msgstr "" -#: src/addr2line.c:469 +#: src/addr2line.c:563 #, c-format msgid "cannot find symbol '%s'" msgstr "" -#: src/addr2line.c:474 +#: src/addr2line.c:568 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "" @@ -1117,8 +1187,8 @@ msgstr "" #: src/elfcmp.c:722 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:175 src/strip.c:450 src/strip.c:487 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1911 +#: src/unstrip.c:1940 #, c-format msgid "cannot open '%s'" msgstr "'%s' を開けません" @@ -1171,160 +1241,160 @@ msgstr "" msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "ELF ファイルが gABI/psABI 仕様へ準拠しているかの厳密なチェック。" -#: src/elflint.c:78 src/readelf.c:113 +#: src/elflint.c:78 src/readelf.c:123 msgid "FILE..." msgstr "ふぁいる..." -#: src/elflint.c:151 src/readelf.c:271 +#: src/elflint.c:155 src/readelf.c:292 #, c-format msgid "cannot open input file" msgstr "入力ファイルを開けません" -#: src/elflint.c:158 +#: src/elflint.c:162 #, c-format msgid "cannot generate Elf descriptor: %s\n" msgstr "Elf 記述子を生成できません: %s\n" -#: src/elflint.c:177 +#: src/elflint.c:181 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "Elf 記述子を閉じている時にエラー: %s\n" -#: src/elflint.c:181 +#: src/elflint.c:185 msgid "No errors" msgstr "エラーはありません" -#: src/elflint.c:215 src/readelf.c:434 +#: src/elflint.c:219 src/readelf.c:468 msgid "Missing file name.\n" msgstr "ファイル名がありません。\n" -#: src/elflint.c:294 +#: src/elflint.c:298 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr "副-ELF 記述子を解放している時にエラー: %s\n" -#: src/elflint.c:302 +#: src/elflint.c:306 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "ELF ファイルではありません - 最初に誤ったマジックバイトがあります\n" -#: src/elflint.c:363 +#: src/elflint.c:371 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d は既知のクラスではありません\n" -#: src/elflint.c:368 +#: src/elflint.c:376 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d は既知のデータエンコードではありません\n" -#: src/elflint.c:372 +#: src/elflint.c:380 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "不明な ELF ヘッダーバージョン数 e_ident[%d] == %d\n" -#: src/elflint.c:378 +#: src/elflint.c:386 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "不明な OS ABI e_ident[%d] == '%s'\n" -#: src/elflint.c:384 +#: src/elflint.c:392 #, c-format msgid "unsupport ABI version e_ident[%d] == %d\n" msgstr "不明な ABI バージョン e_ident[%d] == %d\n" -#: src/elflint.c:389 +#: src/elflint.c:397 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] がゼロではありません\n" -#: src/elflint.c:394 +#: src/elflint.c:402 #, c-format msgid "unknown object file type %d\n" msgstr "不明なオブジェクトファイルタイプ %d\n" -#: src/elflint.c:401 +#: src/elflint.c:409 #, c-format msgid "unknown machine type %d\n" msgstr "不明なマシンタイプ %d\n" -#: src/elflint.c:405 +#: src/elflint.c:413 #, c-format msgid "unknown object file version\n" msgstr "不明なオブジェクトファイルバージョン\n" -#: src/elflint.c:411 +#: src/elflint.c:419 #, c-format msgid "invalid program header offset\n" msgstr "不当なプログラムヘッダーオフセット\n" -#: src/elflint.c:413 +#: src/elflint.c:421 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" "実行ファイルと DSO はプログラムヘッダーオフセットが 0 であってはいけません\n" -#: src/elflint.c:417 +#: src/elflint.c:425 #, c-format msgid "invalid number of program header entries\n" msgstr "プログラムヘッダー項目数として不当な数\n" -#: src/elflint.c:425 +#: src/elflint.c:433 #, c-format msgid "invalid section header table offset\n" msgstr "不当なセクションヘッダーテーブルオフセット\n" -#: src/elflint.c:428 +#: src/elflint.c:436 #, c-format msgid "section header table must be present\n" msgstr "セクションヘッダーテーブルがなければなりません\n" -#: src/elflint.c:442 +#: src/elflint.c:450 #, c-format msgid "invalid number of section header table entries\n" msgstr "セクションヘッダーテーブル項目数として不当な数\n" -#: src/elflint.c:459 +#: src/elflint.c:467 #, c-format msgid "invalid section header index\n" msgstr "不当なセクションヘッダーインデックス\n" -#: src/elflint.c:473 +#: src/elflint.c:481 #, fuzzy, c-format msgid "invalid number of program header table entries\n" msgstr "プログラムヘッダー項目数として不当な数\n" -#: src/elflint.c:482 +#: src/elflint.c:490 #, c-format msgid "invalid machine flags: %s\n" msgstr "不当なマシンフラグ: %s\n" -#: src/elflint.c:489 src/elflint.c:506 +#: src/elflint.c:497 src/elflint.c:514 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "不当な ELF ヘッダーサイズ: %hd\n" -#: src/elflint.c:492 src/elflint.c:509 +#: src/elflint.c:500 src/elflint.c:517 #, c-format msgid "invalid program header size: %hd\n" msgstr "不当なプログラムヘッダーサイズ: %hd\n" -#: src/elflint.c:495 src/elflint.c:512 +#: src/elflint.c:503 src/elflint.c:520 #, c-format msgid "invalid program header position or size\n" msgstr "不当なプログラムヘッダー位置かサイズ\n" -#: src/elflint.c:498 src/elflint.c:515 +#: src/elflint.c:506 src/elflint.c:523 #, c-format msgid "invalid section header size: %hd\n" msgstr "不当なセクションヘッダーサイズ: %hd\n" -#: src/elflint.c:501 src/elflint.c:518 +#: src/elflint.c:509 src/elflint.c:526 #, c-format msgid "invalid section header position or size\n" msgstr "不当なセクションヘッダー位置かサイズ\n" -#: src/elflint.c:562 +#: src/elflint.c:570 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1333,7 +1403,7 @@ msgstr "" "セクション [%2d] '%s': SHF_GROUP フラグのあるセクションにセクショングループの" "一部分が設定されていません\n" -#: src/elflint.c:566 +#: src/elflint.c:574 #, fuzzy, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" @@ -1341,14 +1411,14 @@ msgstr "" "セクション [%2d] '%s': セクショングループ [%2zu] '%s' がグループメンバーを継" "続していません\n" -#: src/elflint.c:582 src/elflint.c:1426 src/elflint.c:1476 src/elflint.c:1581 -#: src/elflint.c:2166 src/elflint.c:2680 src/elflint.c:2841 src/elflint.c:2971 -#: src/elflint.c:3143 src/elflint.c:4045 +#: 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:595 src/elflint.c:1588 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1357,7 +1427,7 @@ msgstr "" "セクション [%2d] '%s': セクション [%2d] '%s' 用の文字列テーブルとして参照され" "ていますが、タイプが SHT_STRTAB ではありません\n" -#: src/elflint.c:618 +#: src/elflint.c:626 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1366,38 +1436,38 @@ msgstr "" "セクション [%2d] '%s': シンボルテーブルは 1 個を越える拡張インデックスセク" "ションを持てません\n" -#: src/elflint.c:629 +#: src/elflint.c:638 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "セクション [%2u] '%s': 項目サイズが ElfXX_Sym と一致しません\n" -#: src/elflint.c:638 +#: src/elflint.c:647 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "セクション [%2d] '%s': シンボル %d を得られません: %s\n" -#: src/elflint.c:643 src/elflint.c:646 src/elflint.c:649 src/elflint.c:652 -#: src/elflint.c:655 src/elflint.c:658 +#: src/elflint.c:652 src/elflint.c:655 src/elflint.c:658 src/elflint.c:661 +#: src/elflint.c:664 src/elflint.c:667 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "セクション [%2d] '%s': 0番目の項目にある '%s' ゼロではありません\n" -#: src/elflint.c:661 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "セクション [%2d] '%s': 0番目の項目用の XINDEX がゼロではありません\n" -#: src/elflint.c:671 +#: src/elflint.c:680 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "セクション [%2d] '%s': シンボル %zu を得られません: %s\n" -#: src/elflint.c:680 +#: src/elflint.c:689 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "セクション [%2d] '%s': シンボル %zu: 不当な名前の値\n" -#: src/elflint.c:694 +#: src/elflint.c:704 #, c-format msgid "" "section [%2d] '%s': symbol %zu: too large section index but no extended " @@ -1406,7 +1476,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 大きすぎるセクションインデックスだが、拡" "張セクションインデックスセクションがありません\n" -#: src/elflint.c:700 +#: src/elflint.c:710 #, c-format msgid "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " @@ -1415,29 +1485,29 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: st_shndx (%) に適合するインデッ" "クス用に使われる XINDEX\n" -#: src/elflint.c:712 +#: src/elflint.c:722 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid section index\n" msgstr "セクション [%2d] '%s': シンボル %zu: 不当なセクションインデックス\n" -#: src/elflint.c:720 +#: src/elflint.c:730 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown type\n" msgstr "セクション [%2d] '%s': シンボル %zu: 不明なタイプ\n" -#: src/elflint.c:726 +#: src/elflint.c:736 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" msgstr "セクション [%2d] '%s': シンボル %zu: 不明なシンボルバインディング\n" -#: src/elflint.c:731 +#: src/elflint.c:741 #, c-format msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" msgstr "" "セクション [%2d] '%s': シンボル %zu: オブジェクトタイプと異なる固有のシンボ" "ル\n" -#: src/elflint.c:739 +#: src/elflint.c:749 #, c-format msgid "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" @@ -1445,14 +1515,14 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: COMMON はリロケータブルファイル内のみで" "許されます\n" -#: src/elflint.c:743 +#: src/elflint.c:753 #, c-format msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" msgstr "" "セクション [%2d] '%s': シンボル %zu: ローカルな COMMON シンボルは意味がありま" "せん\n" -#: src/elflint.c:747 +#: src/elflint.c:757 #, c-format msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" @@ -1460,12 +1530,12 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: COMMON セクションの機能は意味がありませ" "ん\n" -#: src/elflint.c:779 +#: 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:785 src/elflint.c:810 src/elflint.c:853 +#: 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 " @@ -1474,7 +1544,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu は参照されるセクション [%2d] '%s' とは完" "全に一致しません\n" -#: src/elflint.c:794 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1483,7 +1553,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 参照されるセクション [%2d] '%s' は " "SHF_TLS フラグが設定されていません\n" -#: src/elflint.c:804 src/elflint.c:846 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1492,7 +1562,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: st_value 参照されるセクション [%2d] " "'%s' の境界外\n" -#: src/elflint.c:831 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" @@ -1500,7 +1570,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: TLS プログラムヘッダー項目がない TLS シ" "ンボル\n" -#: src/elflint.c:839 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1509,7 +1579,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 参照されるセクション [%2d] '%s' の" "st_value 不足\n" -#: src/elflint.c:866 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1518,7 +1588,7 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: sh_info に記述された範囲外のローカルシン" "ボル\n" -#: src/elflint.c:873 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1527,12 +1597,12 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: sh_info に記述された範囲外の非ローカルシ" "ンボル\n" -#: src/elflint.c:880 +#: 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:930 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1541,7 +1611,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルが間違ったセクション " "[%2d] を参照しています\n" -#: src/elflint.c:937 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1550,7 +1620,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルはセクション [%2d] '%s' " "を参照しています\n" -#: src/elflint.c:953 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -1559,7 +1629,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボル値 %# は %s のセ" "クションアドレス %# と一致しません\n" -#: src/elflint.c:960 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -1568,7 +1638,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルサイズ % は %s " "のセクションサイズ % と一致しません\n" -#: src/elflint.c:968 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1577,7 +1647,7 @@ msgstr "" "セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルはありますが、.got セク" "ションがありません\n" -#: src/elflint.c:984 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -1586,7 +1656,7 @@ msgstr "" "セクション [%2d] '%s': _DYNAMIC_ シンボル値 %# は動的セグメントアドレ" "ス %# と一致しません\n" -#: src/elflint.c:991 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -1595,7 +1665,7 @@ msgstr "" "セクション [%2d] '%s': _DYNAMIC シンボルサイズ % は動的セグメントサイ" "ズ % と一致しません\n" -#: src/elflint.c:1004 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1604,24 +1674,24 @@ msgstr "" "セクション [%2d] '%s': シンボル %zu: 省略以外の可視性を持った動的シンボルテー" "ブル中のシンボル\n" -#: src/elflint.c:1008 +#: 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:1053 +#: 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:1062 src/elflint.c:1114 +#: 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:1087 src/elflint.c:1139 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1630,7 +1700,7 @@ msgstr "" "セクション [%2d] '%s': UT_RELOCOUNT で指定されたインデックス %d 後の相対リロ" "ケーション\n" -#: src/elflint.c:1093 src/elflint.c:1145 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1639,51 +1709,51 @@ msgstr "" "セクション [%2d] '%s': インデックス %zu での非相対リロケーション; %d 相対リ" "ロケーションで指定された DT_RELCOUNT\n" -#: src/elflint.c:1105 +#: 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:1187 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "セクション [%2d] '%s': 不当な宛先セクションインデックス\n" -#: src/elflint.c:1200 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "セクション [%2d] '%s': 不当な宛先セクションタイプ\n" -#: src/elflint.c:1208 +#: 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:1215 +#: 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:1222 +#: 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:1282 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" "テキストリロケーションフラグが設定されていますが、読込み専用セグメントがあり" "ません\n" -#: src/elflint.c:1309 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "セクション [%2d] '%s': リロケーション %zu: 不当なタイプ\n" -#: src/elflint.c:1317 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1692,13 +1762,13 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: このファイル用のリロケーションタイ" "プは不当です\n" -#: src/elflint.c:1325 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "" "セクション [%2d] '%s': リロケーション %zu: 不当なシンボルインデックス\n" -#: src/elflint.c:1343 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -1707,12 +1777,12 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: シンボル '_GLOBAL_OFFSET_TABLE_' " "のみが %s と一緒に使用できます\n" -#: src/elflint.c:1360 +#: 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:1375 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1721,7 +1791,7 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: タイプ %s のシンボルに対するコピー" "リロケーション\n" -#: src/elflint.c:1396 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1730,1109 +1800,1109 @@ msgstr "" "セクション [%2d] '%s': リロケーション %zu: 読込み専用セクションが変更されまし" "たが、テキストリロケーションフラグが設定されていません\n" -#: src/elflint.c:1411 +#: 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:1450 src/elflint.c:1500 +#: src/elflint.c:1482 src/elflint.c:1533 #, c-format msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" msgstr "" -#: src/elflint.c:1576 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "" -#: src/elflint.c:1594 +#: src/elflint.c:1628 #, c-format msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" msgstr "" -#: src/elflint.c:1599 src/elflint.c:1882 +#: src/elflint.c:1633 src/elflint.c:1918 #, c-format msgid "section [%2d] '%s': sh_info not zero\n" msgstr "" -#: src/elflint.c:1609 +#: src/elflint.c:1643 #, c-format msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" msgstr "" -#: src/elflint.c:1617 +#: src/elflint.c:1651 #, c-format msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" msgstr "" -#: src/elflint.c:1624 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "" -#: src/elflint.c:1635 +#: src/elflint.c:1669 #, c-format msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" msgstr "" -#: src/elflint.c:1645 +#: src/elflint.c:1679 #, c-format msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" msgstr "" -#: src/elflint.c:1663 +#: 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:1676 +#: 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:1719 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" msgstr "" -#: src/elflint.c:1734 +#: 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:1754 src/elflint.c:1782 +#: 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:1766 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "" -#: src/elflint.c:1775 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "" -#: src/elflint.c:1790 src/elflint.c:1797 +#: 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:1807 src/elflint.c:1811 +#: 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:1817 +#: src/elflint.c:1851 #, c-format msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" msgstr "" -#: src/elflint.c:1828 src/elflint.c:1832 src/elflint.c:1836 src/elflint.c:1840 +#: 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:1852 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" msgstr "" -#: src/elflint.c:1862 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" msgstr "" -#: src/elflint.c:1867 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "" -#: src/elflint.c:1870 +#: src/elflint.c:1904 #, c-format msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" msgstr "" -#: src/elflint.c:1877 +#: src/elflint.c:1913 #, c-format msgid "section [%2d] '%s': extended index table too small for symbol table\n" msgstr "" -#: src/elflint.c:1892 +#: 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:1903 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "" -#: src/elflint.c:1915 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "" -#: src/elflint.c:1920 +#: src/elflint.c:1962 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" -#: src/elflint.c:1936 src/elflint.c:1977 +#: 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:1948 src/elflint.c:1989 +#: src/elflint.c:1990 src/elflint.c:2041 #, c-format msgid "section [%2d] '%s': chain array too large\n" msgstr "" -#: src/elflint.c:1957 src/elflint.c:1998 +#: 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:1963 +#: src/elflint.c:2014 #, c-format msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" msgstr "" -#: src/elflint.c:2004 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" -#: src/elflint.c:2019 +#: src/elflint.c:2081 #, c-format msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" msgstr "" -#: src/elflint.c:2030 +#: src/elflint.c:2092 #, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" msgstr "" -#: src/elflint.c:2038 +#: src/elflint.c:2100 #, c-format msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" msgstr "" -#: src/elflint.c:2070 +#: 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:2091 +#: 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:2102 +#: 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:2133 +#: src/elflint.c:2195 #, c-format msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" msgstr "" -#: src/elflint.c:2138 +#: 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:2144 +#: src/elflint.c:2206 #, c-format msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" msgstr "" -#: src/elflint.c:2157 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" -#: src/elflint.c:2175 +#: src/elflint.c:2237 #, c-format msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" msgstr "" -#: src/elflint.c:2183 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "" -#: src/elflint.c:2188 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "" -#: src/elflint.c:2193 +#: 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:2241 +#: src/elflint.c:2303 #, c-format msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" msgstr "" -#: src/elflint.c:2319 src/elflint.c:2323 +#: src/elflint.c:2381 src/elflint.c:2385 #, c-format msgid "section [%2zu] '%s': reference to symbol index 0\n" msgstr "" -#: src/elflint.c:2330 +#: 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:2342 +#: 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:2358 +#: src/elflint.c:2420 #, c-format msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" msgstr "" -#: src/elflint.c:2378 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" msgstr "" -#: src/elflint.c:2389 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "" -#: src/elflint.c:2394 +#: src/elflint.c:2456 #, c-format msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" msgstr "" -#: src/elflint.c:2400 +#: src/elflint.c:2462 #, c-format msgid "section [%2d] '%s': invalid symbol index in sh_info\n" msgstr "" -#: src/elflint.c:2405 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "" -#: src/elflint.c:2412 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "" -#: src/elflint.c:2417 +#: 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:2423 +#: src/elflint.c:2485 #, c-format msgid "section [%2d] '%s': sh_flags not set correctly\n" msgstr "" -#: src/elflint.c:2429 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "" -#: src/elflint.c:2438 +#: src/elflint.c:2500 #, c-format msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" msgstr "" -#: src/elflint.c:2443 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "" -#: src/elflint.c:2449 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "" -#: src/elflint.c:2453 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "" -#: src/elflint.c:2464 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "" -#: src/elflint.c:2476 +#: src/elflint.c:2538 #, c-format msgid "section [%2d] '%s': section index %Zu out of range\n" msgstr "" -#: src/elflint.c:2485 +#: src/elflint.c:2547 #, c-format msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" msgstr "" -#: src/elflint.c:2492 +#: src/elflint.c:2554 #, c-format msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" msgstr "" -#: src/elflint.c:2498 +#: 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:2505 +#: src/elflint.c:2567 #, c-format msgid "section [%2d] '%s' is contained in more than one section group\n" msgstr "" -#: src/elflint.c:2694 +#: 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:2705 +#: 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:2721 +#: src/elflint.c:2784 #, c-format msgid "section [%2d] '%s': symbol %d: cannot read version data\n" msgstr "" -#: src/elflint.c:2737 +#: src/elflint.c:2800 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" msgstr "" -#: src/elflint.c:2745 +#: src/elflint.c:2808 #, c-format msgid "section [%2d] '%s': symbol %d: local symbol with version\n" msgstr "" -#: src/elflint.c:2759 +#: src/elflint.c:2822 #, c-format msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" msgstr "" -#: src/elflint.c:2764 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" msgstr "" -#: src/elflint.c:2774 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" msgstr "" -#: src/elflint.c:2826 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "" -#: src/elflint.c:2834 src/elflint.c:2963 +#: 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:2857 src/elflint.c:3015 +#: 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:2863 src/elflint.c:3021 +#: 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:2871 +#: src/elflint.c:2934 #, c-format msgid "section [%2d] '%s': entry %d has invalid file reference\n" msgstr "" -#: src/elflint.c:2879 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "" -#: src/elflint.c:2891 +#: src/elflint.c:2954 #, c-format msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:2898 +#: 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:2905 +#: 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:2915 +#: 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:2926 +#: 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:2942 src/elflint.c:3100 +#: 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:2955 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "" -#: src/elflint.c:3000 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "" -#: src/elflint.c:3004 +#: src/elflint.c:3067 #, c-format msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" msgstr "" -#: src/elflint.c:3010 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "" -#: src/elflint.c:3034 +#: src/elflint.c:3097 #, c-format msgid "section [%2d] '%s': entry %d has invalid name reference\n" msgstr "" -#: src/elflint.c:3041 +#: src/elflint.c:3104 #, c-format msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" msgstr "" -#: src/elflint.c:3050 +#: src/elflint.c:3113 #, c-format msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" msgstr "" -#: src/elflint.c:3069 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" msgstr "" -#: src/elflint.c:3084 +#: src/elflint.c:3147 #, c-format msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" msgstr "" -#: src/elflint.c:3106 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "" -#: src/elflint.c:3122 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "" -#: src/elflint.c:3135 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "" -#: src/elflint.c:3156 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "" -#: src/elflint.c:3172 +#: src/elflint.c:3235 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute section\n" msgstr "" -#: src/elflint.c:3181 +#: src/elflint.c:3244 #, c-format msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" msgstr "" -#: src/elflint.c:3193 +#: src/elflint.c:3256 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" msgstr "" -#: src/elflint.c:3210 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" msgstr "" -#: src/elflint.c:3219 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "" -#: src/elflint.c:3228 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" msgstr "" -#: src/elflint.c:3241 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" msgstr "" -#: src/elflint.c:3252 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" msgstr "" -#: src/elflint.c:3270 +#: src/elflint.c:3333 #, c-format msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" msgstr "" -#: src/elflint.c:3281 +#: src/elflint.c:3344 #, c-format msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" msgstr "" -#: src/elflint.c:3294 +#: src/elflint.c:3357 #, c-format msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" msgstr "" -#: src/elflint.c:3298 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" msgstr "" -#: src/elflint.c:3308 +#: src/elflint.c:3371 #, c-format msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" msgstr "" -#: src/elflint.c:3314 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" msgstr "" -#: src/elflint.c:3403 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "" -#: src/elflint.c:3407 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "" -#: src/elflint.c:3409 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "" -#: src/elflint.c:3411 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "" -#: src/elflint.c:3413 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "" -#: src/elflint.c:3415 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "" -#: src/elflint.c:3417 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "" -#: src/elflint.c:3419 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "" -#: src/elflint.c:3422 +#: 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:3426 +#: 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:3430 +#: 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:3447 +#: src/elflint.c:3510 #, c-format msgid "cannot get section header for section [%2zu] '%s': %s\n" msgstr "" -#: src/elflint.c:3456 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "" -#: src/elflint.c:3483 +#: src/elflint.c:3546 #, c-format msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3499 +#: src/elflint.c:3562 #, c-format msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" msgstr "" -#: src/elflint.c:3516 +#: 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:3534 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "" -#: src/elflint.c:3540 src/elflint.c:3572 +#: 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:3545 src/elflint.c:3577 +#: 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:3553 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" msgstr "" -#: src/elflint.c:3596 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "" -#: src/elflint.c:3601 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "" -#: src/elflint.c:3611 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "" -#: src/elflint.c:3625 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" msgstr "" -#: src/elflint.c:3632 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "" -#: src/elflint.c:3640 +#: src/elflint.c:3703 #, c-format msgid "section [%2zu] '%s': thread-local data sections address not zero\n" msgstr "" -#: src/elflint.c:3648 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" -#: src/elflint.c:3653 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" -#: src/elflint.c:3660 +#: src/elflint.c:3723 #, c-format msgid "section [%2zu] '%s': strings flag set without merge flag\n" msgstr "" -#: src/elflint.c:3665 +#: src/elflint.c:3728 #, c-format msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" msgstr "" -#: src/elflint.c:3683 +#: src/elflint.c:3746 #, c-format msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" msgstr "" -#: src/elflint.c:3692 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "" -#: src/elflint.c:3721 +#: 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:3729 +#: 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:3738 +#: 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:3749 +#: src/elflint.c:3812 #, c-format msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" msgstr "" -#: src/elflint.c:3759 +#: src/elflint.c:3822 #, c-format msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" msgstr "" -#: src/elflint.c:3769 +#: 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:3775 +#: 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:3783 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" msgstr "" -#: src/elflint.c:3834 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "" -#: src/elflint.c:3857 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "" -#: src/elflint.c:3868 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" msgstr "" -#: src/elflint.c:3874 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" -#: src/elflint.c:3885 +#: 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:3898 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "" -#: src/elflint.c:3912 +#: src/elflint.c:3975 #, c-format msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" msgstr "" -#: src/elflint.c:3961 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" -#: src/elflint.c:3965 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" msgstr "" -#: src/elflint.c:3988 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" msgstr "" -#: src/elflint.c:3992 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" msgstr "" -#: src/elflint.c:4009 +#: src/elflint.c:4072 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4028 +#: src/elflint.c:4091 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4031 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4052 +#: src/elflint.c:4115 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4059 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4062 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4080 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4095 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4104 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" -#: src/elflint.c:4115 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4123 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4130 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4144 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4147 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4157 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4178 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4181 +#: src/elflint.c:4244 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4189 src/elflint.c:4212 +#: src/elflint.c:4252 src/elflint.c:4275 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4218 +#: src/elflint.c:4281 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4242 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4245 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4258 +#: src/elflint.c:4321 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4266 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4269 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4273 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4276 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4281 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4284 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4295 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4302 +#: src/elflint.c:4365 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4305 +#: 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:4318 +#: 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:4352 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4378 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3347,7 +3417,8 @@ msgstr "" "警告: `%1$s の大きさが %3$s の %2$ から %5$s の %4$ に変更さ" "れました" -#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:640 src/strip.c:562 +#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 +#: src/readelf.c:829 src/strip.c:563 #, c-format msgid "cannot determine number of sections: %s" msgstr "セクション数を決定できません: %s" @@ -3585,7 +3656,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:1818 #, c-format msgid "cannot update ELF header: %s" msgstr "ELF ヘッダーを更新できません: %s" @@ -3752,7 +3823,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:2124 +#: src/strip.c:2155 #, c-format msgid "while closing '%s'" msgstr "'%s' を閉じている最中" @@ -3796,17 +3867,17 @@ msgstr "%s%s%s: ファイル形式を認識できません" msgid "cannot create search tree" msgstr "検索ツリーを生成できません" -#: src/nm.c:757 src/nm.c:1156 src/objdump.c:787 src/readelf.c:896 -#: src/readelf.c:1039 src/readelf.c:1187 src/readelf.c:1369 src/readelf.c:1569 -#: src/readelf.c:1755 src/readelf.c:1965 src/readelf.c:2219 src/readelf.c:2285 -#: src/readelf.c:2363 src/readelf.c:2861 src/readelf.c:2897 src/readelf.c:2959 -#: src/readelf.c:7270 src/readelf.c:8176 src/readelf.c:8323 src/readelf.c:8391 -#: src/size.c:417 src/size.c:491 src/strip.c:502 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 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:2196 src/readelf.c:2454 +#: src/readelf.c:2524 src/readelf.c:2606 src/readelf.c:3117 src/readelf.c:3153 +#: src/readelf.c:3216 src/readelf.c:7920 src/readelf.c:9002 src/readelf.c:9149 +#: src/readelf.c:9217 src/size.c:417 src/size.c:487 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "セクションヘッダー文字列テーブル索引が得られません" -#: src/nm.c:782 +#: src/nm.c:784 #, c-format msgid "" "\n" @@ -3819,7 +3890,7 @@ msgstr "" "%s からのシンボル:\n" "\n" -#: src/nm.c:785 +#: src/nm.c:787 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3828,22 +3899,22 @@ msgstr "" "%*s%-*s %-*s クラス タイプ %-*s %*s セクション\n" "\n" -#: src/nm.c:1166 +#: src/nm.c:1173 #, c-format msgid "%s: entry size in section `%s' is not what we expect" msgstr "%s: セクションの項目の大きさ `%s' は予期したものとは異なります" -#: src/nm.c:1170 +#: src/nm.c:1177 #, c-format msgid "%s: size of section `%s' is not multiple of entry size" msgstr "%s: セクション `%s' の大きさは項目の大きさの整数倍ではありません" -#: src/nm.c:1428 +#: src/nm.c:1435 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: 不当な操作" -#: src/nm.c:1485 +#: src/nm.c:1492 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: シンボルがありません" @@ -3877,7 +3948,7 @@ msgstr "" msgid "Show information from FILEs (a.out by default)." msgstr "" -#: src/objdump.c:236 src/readelf.c:439 +#: src/objdump.c:236 src/readelf.c:473 msgid "No operation specified.\n" msgstr "操作が指定されていません。\n" @@ -3886,11 +3957,11 @@ msgstr "操作が指定されていません。\n" msgid "while close `%s'" msgstr "" -#: src/objdump.c:379 src/readelf.c:1664 src/readelf.c:1838 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2069 msgid "INVALID SYMBOL" msgstr "不当なシンボル" -#: src/objdump.c:394 src/readelf.c:1695 src/readelf.c:1871 +#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2102 msgid "INVALID SECTION" msgstr "不当なセクション" @@ -3944,186 +4015,247 @@ msgstr "" msgid "error while freeing sub-ELF descriptor: %s" msgstr "" -#: src/readelf.c:67 +#: src/readelf.c:71 +#, fuzzy +msgid "ELF input selection:" +msgstr "出力選択:" + +#: src/readelf.c:73 +msgid "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" +msgstr "" + +#: src/readelf.c:75 #, fuzzy msgid "ELF output selection:" msgstr "出力選択:" -#: src/readelf.c:69 +#: src/readelf.c:77 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "" -#: src/readelf.c:70 +#: src/readelf.c:78 msgid "Display the dynamic segment" msgstr "動的セグメントを表示" -#: src/readelf.c:71 +#: src/readelf.c:79 msgid "Display the ELF file header" msgstr "ELF ファイルヘッダーを表示" -#: src/readelf.c:73 +#: src/readelf.c:81 msgid "Display histogram of bucket list lengths" msgstr "バケットリスト長の柱状図を表示" -#: src/readelf.c:74 +#: src/readelf.c:82 msgid "Display the program headers" msgstr "プログラムヘッダーを表示" -#: src/readelf.c:76 +#: src/readelf.c:84 msgid "Display relocations" msgstr "リロケーションを表示" -#: src/readelf.c:77 +#: src/readelf.c:85 #, fuzzy msgid "Display the sections' headers" msgstr "セクションのヘッダーを表示" -#: src/readelf.c:79 +#: src/readelf.c:87 msgid "Display the symbol table" msgstr "シンボルテーブルを表示" -#: src/readelf.c:80 +#: src/readelf.c:88 msgid "Display versioning information" msgstr "バージョニング情報の表示" -#: src/readelf.c:81 +#: src/readelf.c:89 #, fuzzy msgid "Display the ELF notes" msgstr "コアノートを表示" -#: src/readelf.c:83 +#: src/readelf.c:91 #, fuzzy msgid "Display architecture specific information, if any" msgstr "(もしあれば)アーキテクチャー固有の情報を表示" -#: src/readelf.c:85 +#: src/readelf.c:93 msgid "Display sections for exception handling" msgstr "例外を取り扱うためのセクションを表示" -#: src/readelf.c:87 +#: src/readelf.c:95 #, fuzzy msgid "Additional output selection:" msgstr "出力選択:" -#: src/readelf.c:89 +#: src/readelf.c:97 #, fuzzy msgid "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" msgstr "" "DWARF セクションの内容を表示。SECTION は addrevか、aranges、frame、info、" "loc、ranges、pubnames、str、macinfo、exception のいずれかです" -#: src/readelf.c:93 +#: src/readelf.c:101 msgid "Dump the uninterpreted contents of SECTION, by number or name" msgstr "数字か名前で解釈できないセクションの内容をダンプする" -#: src/readelf.c:95 +#: src/readelf.c:103 msgid "Print string contents of sections" msgstr "セクションの文字列内容を印刷する" -#: src/readelf.c:98 +#: src/readelf.c:106 msgid "Display the symbol index of an archive" msgstr "アーカイブのシンボル索引を表示" -#: src/readelf.c:100 +#: src/readelf.c:108 msgid "Output control:" msgstr "出力制御:" -#: src/readelf.c:102 +#: src/readelf.c:110 msgid "Do not find symbol names for addresses in DWARF data" msgstr "DWARFデータ中のアドレスのためのシンボル名を探さない" -#: src/readelf.c:104 +#: src/readelf.c:112 +#, fuzzy +msgid "" +"Display just offsets instead of resolving values to addresses in DWARF data" +msgstr "DWARFデータ中のアドレスのためのシンボル名を探さない" + +#: src/readelf.c:114 msgid "Ignored for compatibility (lines always wide)" msgstr "" -#: src/readelf.c:109 +#: src/readelf.c:119 msgid "Print information from ELF file in human-readable form." msgstr "ELF ファイルから人間が読める形で情報を印刷する。" -#: src/readelf.c:410 +#: src/readelf.c:441 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "不明な DWARF デバッグセクション `%s'.\n" -#: src/readelf.c:476 +#: src/readelf.c:520 src/readelf.c:631 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "Elf 記述子を生成できません: %s" -#: src/readelf.c:488 +#: src/readelf.c:545 src/readelf.c:1099 src/readelf.c:1269 #, c-format -msgid "'%s' is not an archive, cannot print archive index" -msgstr "'%s' はアーカイブではなく、アーカイブ索引を印刷できません" +msgid "cannot get section: %s" +msgstr "セクションを得られません: %s" + +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9169 +#: src/unstrip.c:352 src/unstrip.c:383 src/unstrip.c:432 src/unstrip.c:540 +#: src/unstrip.c:557 src/unstrip.c:593 src/unstrip.c:791 src/unstrip.c:1059 +#: src/unstrip.c:1250 src/unstrip.c:1310 src/unstrip.c:1431 src/unstrip.c:1484 +#: src/unstrip.c:1591 src/unstrip.c:1780 +#, c-format +msgid "cannot get section header: %s" +msgstr "セクションヘッダーを得られません: %s" + +#: src/readelf.c:562 +#, fuzzy, c-format +msgid "cannot get section name" +msgstr "セクションを得られません: %s" + +#: src/readelf.c:571 src/readelf.c:5221 src/readelf.c:7414 src/readelf.c:7516 +#: src/readelf.c:7674 +#, c-format +msgid "cannot get %s content: %s" +msgstr "%s の内容を得られません: %s" + +#: src/readelf.c:587 +#, fuzzy, c-format +msgid "cannot create temp file '%s'" +msgstr "新しいファイル '%s' を生成できません: %s" + +#: src/readelf.c:596 +#, fuzzy, c-format +msgid "cannot write section data" +msgstr "セクションデータを割り当てられません: %s" -#: src/readelf.c:493 +#: src/readelf.c:602 src/readelf.c:619 src/readelf.c:648 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "Elf 記述子を閉じている時にエラー: %s" -#: src/readelf.c:585 +#: src/readelf.c:609 +#, fuzzy, c-format +msgid "error while rewinding file descriptor" +msgstr "Elf 記述子を閉じている時にエラー: %s" + +#: src/readelf.c:643 +#, c-format +msgid "'%s' is not an archive, cannot print archive index" +msgstr "'%s' はアーカイブではなく、アーカイブ索引を印刷できません" + +#: src/readelf.c:742 +#, fuzzy, c-format +msgid "No such section '%s' in '%s'" +msgstr "セクション [%Zu] '%s' からデータが得られません: %s" + +#: src/readelf.c:769 #, c-format msgid "cannot stat input file" msgstr "入力ファイルを stat できません" -#: src/readelf.c:587 +#: src/readelf.c:771 #, c-format msgid "input file is empty" msgstr "入力ファイルが空です" -#: src/readelf.c:589 +#: src/readelf.c:773 #, c-format msgid "failed reading '%s': %s" msgstr "'%s' の読込みに失敗: %s" -#: src/readelf.c:625 +#: src/readelf.c:814 #, c-format msgid "cannot read ELF header: %s" msgstr "ELF ヘッダーが読めません: %s" -#: src/readelf.c:633 +#: src/readelf.c:822 #, c-format msgid "cannot create EBL handle" msgstr "EBL ヘッダーを生成できません" -#: src/readelf.c:646 +#: src/readelf.c:835 #, fuzzy, c-format msgid "cannot determine number of program headers: %s" msgstr "セクション数を決定できません: %s" -#: src/readelf.c:732 +#: src/readelf.c:921 msgid "NONE (None)" msgstr "なし (なし)" -#: src/readelf.c:733 +#: src/readelf.c:922 msgid "REL (Relocatable file)" msgstr "REL (リロケータブルファイル)" -#: src/readelf.c:734 +#: src/readelf.c:923 msgid "EXEC (Executable file)" msgstr "(EXEC (実行ファイル)" -#: src/readelf.c:735 +#: src/readelf.c:924 msgid "DYN (Shared object file)" msgstr "DYN (共用オブジェクトファイル)" -#: src/readelf.c:736 +#: src/readelf.c:925 msgid "CORE (Core file)" msgstr "CORE (コアファイル)" -#: src/readelf.c:741 +#: src/readelf.c:930 #, c-format msgid "OS Specific: (%x)\n" msgstr "OS 固有: (%x)\n" -#: src/readelf.c:743 +#: src/readelf.c:932 #, c-format msgid "Processor Specific: (%x)\n" msgstr "プロセッサー固有: (%x)\n" -#: src/readelf.c:753 +#: src/readelf.c:942 msgid "" "ELF Header:\n" " Magic: " @@ -4131,7 +4263,7 @@ msgstr "" "ELF ヘッダー:\n" " マジック: " -#: src/readelf.c:757 +#: src/readelf.c:946 #, c-format msgid "" "\n" @@ -4140,117 +4272,117 @@ msgstr "" "\n" " クラス: %s\n" -#: src/readelf.c:762 +#: src/readelf.c:951 #, c-format msgid " Data: %s\n" msgstr " データ: %s\n" -#: src/readelf.c:768 +#: src/readelf.c:957 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " 識別バージョン: %hhd %s\n" -#: src/readelf.c:770 src/readelf.c:787 +#: src/readelf.c:959 src/readelf.c:976 msgid "(current)" msgstr "(現在)" -#: src/readelf.c:774 +#: src/readelf.c:963 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:777 +#: src/readelf.c:966 #, c-format msgid " ABI Version: %hhd\n" msgstr " ABI バージョン: %hhd\n" -#: src/readelf.c:780 +#: src/readelf.c:969 msgid " Type: " msgstr " タイプ: " -#: src/readelf.c:783 +#: src/readelf.c:972 #, c-format msgid " Machine: %s\n" msgstr " マシン : %s\n" -#: src/readelf.c:785 +#: src/readelf.c:974 #, c-format msgid " Version: %d %s\n" msgstr " バージョン: %d %s\n" -#: src/readelf.c:789 +#: src/readelf.c:978 #, c-format msgid " Entry point address: %#\n" msgstr " 入口点アドレス : %#\n" -#: src/readelf.c:792 +#: src/readelf.c:981 #, c-format msgid " Start of program headers: % %s\n" msgstr " プログラムヘッダーの開始: % %s\n" -#: src/readelf.c:793 src/readelf.c:796 +#: src/readelf.c:982 src/readelf.c:985 msgid "(bytes into file)" msgstr "(ファイルへのバイト数)" -#: src/readelf.c:795 +#: src/readelf.c:984 #, c-format msgid " Start of section headers: % %s\n" msgstr " セクションヘッダーの開始: % %s\n" -#: src/readelf.c:798 +#: src/readelf.c:987 #, c-format msgid " Flags: %s\n" msgstr " フラグ: %s\n" -#: src/readelf.c:801 +#: src/readelf.c:990 #, c-format msgid " Size of this header: % %s\n" msgstr " このヘッダーの大きさ: % %s\n" -#: src/readelf.c:802 src/readelf.c:805 src/readelf.c:822 +#: src/readelf.c:991 src/readelf.c:994 src/readelf.c:1011 msgid "(bytes)" msgstr "(バイト)" -#: src/readelf.c:804 +#: src/readelf.c:993 #, c-format msgid " Size of program header entries: % %s\n" msgstr " プログラムヘッダー項目の大きさ:% %s\n" -#: src/readelf.c:807 +#: src/readelf.c:996 #, fuzzy, c-format msgid " Number of program headers entries: %" msgstr " プログラムヘッダー項目の数 : %\n" -#: src/readelf.c:814 +#: src/readelf.c:1003 #, fuzzy, c-format msgid " (% in [0].sh_info)" msgstr "([0].sh_link の %)" -#: src/readelf.c:817 src/readelf.c:834 src/readelf.c:848 +#: src/readelf.c:1006 src/readelf.c:1023 src/readelf.c:1037 msgid " ([0] not available)" msgstr "([0]は使えません)" -#: src/readelf.c:821 +#: src/readelf.c:1010 #, c-format msgid " Size of section header entries: % %s\n" msgstr " セクションヘッダー項目の大きさ:% %s\n" -#: src/readelf.c:824 +#: src/readelf.c:1013 #, c-format msgid " Number of section headers entries: %" msgstr " セクションヘッダー項目の数 : %" -#: src/readelf.c:831 +#: src/readelf.c:1020 #, c-format msgid " (% in [0].sh_size)" msgstr " ([0].sh_size の %)" -#: src/readelf.c:844 +#: src/readelf.c:1033 #, c-format msgid " (% in [0].sh_link)" msgstr "([0].sh_link の %)" -#: src/readelf.c:852 +#: src/readelf.c:1041 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4259,7 +4391,7 @@ msgstr "" " セクションヘッダー文字列テーブル索引: XINDEX%s\n" "\n" -#: src/readelf.c:856 +#: src/readelf.c:1045 #, c-format msgid "" " Section header string table index: %\n" @@ -4268,7 +4400,7 @@ msgstr "" " セクションヘッダー文字列テーブル索引: %\n" "\n" -#: src/readelf.c:888 +#: src/readelf.c:1077 #, c-format msgid "" "There are %d section headers, starting at offset %#:\n" @@ -4277,11 +4409,11 @@ msgstr "" "オフセット %2$# から始まる %1$d 個のセクションヘッダーがあります:\n" "\n" -#: src/readelf.c:898 +#: src/readelf.c:1087 msgid "Section Headers:" msgstr "セクションヘッダー:" -#: src/readelf.c:901 +#: src/readelf.c:1090 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4289,7 +4421,7 @@ msgstr "" "[番] 名前 タイプ アドレス オフセ 大きさ ES フラグLk " "Inf Al" -#: src/readelf.c:903 +#: src/readelf.c:1092 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4297,31 +4429,17 @@ msgstr "" "[番] 名前 タイプ アドレス オフセ 大きさ ES " "フラグLk Inf Al" -#: src/readelf.c:910 src/readelf.c:1063 -#, c-format -msgid "cannot get section: %s" -msgstr "セクションを得られません: %s" - -#: src/readelf.c:917 src/readelf.c:1071 src/readelf.c:8343 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 -#, c-format -msgid "cannot get section header: %s" -msgstr "セクションヘッダーを得られません: %s" - -#: src/readelf.c:975 +#: src/readelf.c:1164 msgid "Program Headers:" msgstr "プログラムヘッダー:" -#: src/readelf.c:977 +#: src/readelf.c:1166 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " タイプ オフセ 仮アドレス 物アドレス ファイ量 メモ量 Flg 調整 " -#: src/readelf.c:980 +#: src/readelf.c:1169 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4329,12 +4447,12 @@ msgstr "" " タイプ オフセ 仮想アドレス 物理アドレス ファイル量メモ" "量 Flg 調整 " -#: src/readelf.c:1020 +#: src/readelf.c:1226 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[プログラム割込みを要求: %s]\n" -#: src/readelf.c:1041 +#: src/readelf.c:1247 msgid "" "\n" " Section to Segment mapping:\n" @@ -4344,12 +4462,12 @@ msgstr "" " セクションからセグメントへのマッビング:\n" " セグメント セクション..." -#: src/readelf.c:1052 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1835 src/unstrip.c:1874 src/unstrip.c:1881 #, c-format msgid "cannot get program header: %s" msgstr "プログラムヘッダーを得られません: %s" -#: src/readelf.c:1193 +#: src/readelf.c:1401 #, c-format msgid "" "\n" @@ -4362,7 +4480,7 @@ msgstr[0] "" "署名 '%3$s' を持つ COMDAT セクショングループ [%1$2zu] '%2$s' には %4$zu 個の" "項目があります:\n" -#: src/readelf.c:1198 +#: src/readelf.c:1406 #, c-format msgid "" "\n" @@ -4375,15 +4493,21 @@ msgstr[0] "" "署名 '%3$s' を持つセクショングループ [%1$2zu] '%2$s' には %4$zu 個の項目があ" "ります:\n" -#: src/readelf.c:1206 +#: src/readelf.c:1414 msgid "" msgstr "<不当なシンボル>" -#: src/readelf.c:1220 +#: src/readelf.c:1428 msgid "" msgstr "<不当なセクション>" -#: src/readelf.c:1371 +#: src/readelf.c:1585 src/readelf.c:2202 src/readelf.c:2460 src/readelf.c:2530 +#: src/readelf.c:2812 src/readelf.c:2885 src/readelf.c:4488 +#, fuzzy, c-format +msgid "invalid sh_link value in section %Zu" +msgstr "不当な .debug_line セクション" + +#: src/readelf.c:1588 #, c-format msgid "" "\n" @@ -4399,36 +4523,36 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:1383 +#: src/readelf.c:1598 msgid " Type Value\n" msgstr " タイプ 値\n" -#: src/readelf.c:1407 +#: src/readelf.c:1622 #, c-format msgid "Shared library: [%s]\n" msgstr "共用ライブラリー: [%s]\n" -#: src/readelf.c:1412 +#: src/readelf.c:1627 #, c-format msgid "Library soname: [%s]\n" msgstr "ライブラリー so 名: [%s]\n" -#: src/readelf.c:1417 +#: src/readelf.c:1632 #, c-format msgid "Library rpath: [%s]\n" msgstr "ライブラリー rパス: [%s]\n" -#: src/readelf.c:1422 +#: src/readelf.c:1637 #, c-format msgid "Library runpath: [%s]\n" msgstr "ライブラリー run パス: [%s]\n" -#: src/readelf.c:1442 +#: src/readelf.c:1657 #, c-format msgid "% (bytes)\n" msgstr "% (バイト)\n" -#: src/readelf.c:1554 src/readelf.c:1740 +#: src/readelf.c:1770 src/readelf.c:1957 #, c-format msgid "" "\n" @@ -4437,7 +4561,7 @@ msgstr "" "\n" "オフセット %#0 に不当なシンボルテーブル\n" -#: src/readelf.c:1572 src/readelf.c:1757 +#: src/readelf.c:1788 src/readelf.c:1975 #, c-format msgid "" "\n" @@ -4452,7 +4576,7 @@ msgstr[0] "" "オフセット %5$#0 のセクション [%3$2u] '%4$s' 用のリロケーションセク" "ション [%1$2zu] '%2$s' には %6$d 個の項目があります:\n" -#: src/readelf.c:1587 +#: src/readelf.c:1803 src/readelf.c:1990 #, c-format msgid "" "\n" @@ -4465,29 +4589,29 @@ msgstr[0] "" "オフセット %3$#0 のリロケーションセクション [%1$2u] '%2$s' には %4$d " "個の項目があります:\n" -#: src/readelf.c:1597 +#: src/readelf.c:1813 msgid " Offset Type Value Name\n" msgstr " オフセット タイプ 値 名前\n" -#: src/readelf.c:1599 +#: src/readelf.c:1815 msgid " Offset Type Value Name\n" msgstr " オフセット タイプ 値 名前\n" -#: src/readelf.c:1652 src/readelf.c:1663 src/readelf.c:1676 src/readelf.c:1694 -#: src/readelf.c:1706 src/readelf.c:1825 src/readelf.c:1837 src/readelf.c:1851 -#: src/readelf.c:1870 src/readelf.c:1883 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 +#: src/readelf.c:1922 src/readelf.c:2056 src/readelf.c:2068 src/readelf.c:2082 +#: src/readelf.c:2101 src/readelf.c:2114 msgid "" msgstr "<不当なRELOC>" -#: src/readelf.c:1769 +#: src/readelf.c:2000 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 付加名\n" -#: src/readelf.c:1771 +#: src/readelf.c:2002 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 付加名\n" -#: src/readelf.c:1972 +#: src/readelf.c:2210 #, c-format msgid "" "\n" @@ -4499,39 +4623,39 @@ msgstr[0] "" "\n" "シンボルテーブル [%2u] '%s' には %u 個の項目があります:\n" -#: src/readelf.c:1978 +#: src/readelf.c:2215 #, 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:1988 +#: src/readelf.c:2223 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" -#: src/readelf.c:1990 +#: src/readelf.c:2225 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" -#: src/readelf.c:2010 +#: src/readelf.c:2245 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2098 +#: src/readelf.c:2333 #, c-format msgid "bad dynamic symbol" msgstr "不正な動的シンボル" -#: src/readelf.c:2180 +#: src/readelf.c:2415 msgid "none" msgstr "なし" -#: src/readelf.c:2197 +#: src/readelf.c:2432 msgid "| " msgstr "| <不明>" -#: src/readelf.c:2222 +#: src/readelf.c:2463 #, c-format msgid "" "\n" @@ -4547,17 +4671,17 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2245 +#: src/readelf.c:2484 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: バージョン: %hu ファイル: %s 数: %hu\n" -#: src/readelf.c:2258 +#: src/readelf.c:2497 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: 名前: %s フラグ: %s バージョン: %hu\n" -#: src/readelf.c:2289 +#: src/readelf.c:2534 #, c-format msgid "" "\n" @@ -4573,17 +4697,17 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2319 +#: src/readelf.c:2562 #, 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:2334 +#: src/readelf.c:2577 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: 親 %d: %s\n" -#: src/readelf.c:2566 +#: src/readelf.c:2816 #, c-format msgid "" "\n" @@ -4599,15 +4723,15 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'" -#: src/readelf.c:2596 +#: src/readelf.c:2844 msgid " 0 *local* " msgstr " 0 *ローカル* " -#: src/readelf.c:2601 +#: src/readelf.c:2849 msgid " 1 *global* " msgstr " 1 *グローバル* " -#: src/readelf.c:2632 +#: src/readelf.c:2890 #, c-format msgid "" "\n" @@ -4625,22 +4749,22 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2656 +#: src/readelf.c:2912 #, fuzzy, no-c-format msgid " Length Number % of total Coverage\n" msgstr " 長さ 数 全体の% 範囲 \n" -#: src/readelf.c:2658 +#: src/readelf.c:2914 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:2665 +#: src/readelf.c:2921 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:2678 +#: src/readelf.c:2934 #, fuzzy, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4649,12 +4773,12 @@ msgstr "" " テストの平均数: 検索成功: %f\n" " 検索失敗: %f\n" -#: src/readelf.c:2696 src/readelf.c:2738 src/readelf.c:2779 +#: src/readelf.c:2952 src/readelf.c:2994 src/readelf.c:3035 #, c-format msgid "cannot get data for section %d: %s" msgstr "セクションからデータを得られません %d: %s" -#: src/readelf.c:2833 +#: src/readelf.c:3089 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4664,7 +4788,7 @@ msgstr "" " ビットマスクの大きさ: %zu バイト %%% ビット設定 第2ハッシュシフ" "ト: %u\n" -#: src/readelf.c:2907 +#: src/readelf.c:3164 #, c-format msgid "" "\n" @@ -4677,7 +4801,7 @@ msgstr[0] "" "オフセット %3$#0 のライブラリー一覧セクション [%1$2zu] '%2$s' には " "%4$d 個の項目があります:\n" -#: src/readelf.c:2921 +#: src/readelf.c:3178 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4685,7 +4809,7 @@ msgstr "" " ライブラリー タイムスタンプ チェックサム バー" "ジョン フラグ" -#: src/readelf.c:2971 +#: src/readelf.c:3228 #, c-format msgid "" "\n" @@ -4696,135 +4820,140 @@ msgstr "" "オフセット %4$#0 の %3$ バイトのオブジェクト属性セクション " "[%1$2zu] '%2$s':\n" -#: src/readelf.c:2987 +#: src/readelf.c:3244 msgid " Owner Size\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:3013 +#: src/readelf.c:3270 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" -#: src/readelf.c:3045 +#: src/readelf.c:3302 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" -#: src/readelf.c:3050 +#: src/readelf.c:3307 #, c-format msgid " File: %11\n" msgstr " ファイル: %11\n" -#: src/readelf.c:3085 +#: src/readelf.c:3342 #, c-format msgid " %s: %, %s\n" msgstr " %s: %、%s\n" -#: src/readelf.c:3088 +#: src/readelf.c:3345 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3091 +#: src/readelf.c:3348 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3098 +#: src/readelf.c:3355 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3101 +#: src/readelf.c:3358 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3137 +#: src/readelf.c:3403 #, c-format msgid "%s+%# <%s+%#>" msgstr "%s+%# <%s+%#>" -#: src/readelf.c:3140 +#: src/readelf.c:3406 #, c-format msgid "%s+%#0* <%s+%#>" msgstr "%s+%#0* <%s+%#>" -#: src/readelf.c:3145 +#: src/readelf.c:3411 #, c-format msgid "%# <%s+%#>" msgstr "%# <%s+%#>" -#: src/readelf.c:3148 +#: src/readelf.c:3414 #, c-format msgid "%#0* <%s+%#>" msgstr "%#0* <%s+%#>" -#: src/readelf.c:3154 +#: src/readelf.c:3420 #, c-format msgid "%s+%# <%s>" msgstr "%s+%# <%s>" -#: src/readelf.c:3157 +#: src/readelf.c:3423 #, c-format msgid "%s+%#0* <%s>" msgstr "%s+%#0* <%s>" -#: src/readelf.c:3161 +#: src/readelf.c:3427 #, c-format msgid "%# <%s>" msgstr "%# <%s>" -#: src/readelf.c:3164 +#: src/readelf.c:3430 #, c-format msgid "%#0* <%s>" msgstr "%#0* <%s>" -#: src/readelf.c:3169 +#: src/readelf.c:3435 #, c-format msgid "%s+%#" msgstr "%s+%#" -#: src/readelf.c:3172 +#: src/readelf.c:3438 #, c-format msgid "%s+%#0*" msgstr "%s+%#0*" -#: src/readelf.c:3554 +#: src/readelf.c:3820 msgid "empty block" msgstr "空ブロック" -#: src/readelf.c:3557 +#: src/readelf.c:3823 #, c-format msgid "%zu byte block:" msgstr "%zu バイトのブロック:" -#: src/readelf.c:3934 +#: src/readelf.c:4217 #, c-format msgid "%*s[%4] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:3970 +#: src/readelf.c:4274 #, c-format msgid "%s %# used with different address sizes" msgstr "" -#: src/readelf.c:3977 +#: src/readelf.c:4281 #, c-format msgid "%s %# used with different offset sizes" msgstr "" -#: src/readelf.c:4057 +#: src/readelf.c:4288 +#, c-format +msgid "%s %# used with different base addresses" +msgstr "" + +#: src/readelf.c:4370 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4065 +#: src/readelf.c:4378 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr "" -#: src/readelf.c:4087 +#: src/readelf.c:4404 #, c-format msgid "" "\n" @@ -4835,7 +4964,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" " [ コード]\n" -#: src/readelf.c:4095 +#: src/readelf.c:4412 #, c-format msgid "" "\n" @@ -4844,30 +4973,30 @@ msgstr "" "\n" "オフセット % の略語セクション:\n" -#: src/readelf.c:4108 +#: src/readelf.c:4425 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** 略語を読んでいる間にエラー: %s\n" -#: src/readelf.c:4124 +#: src/readelf.c:4441 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] オフセット: %、子: %s、タグ: %s\n" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "yes" msgstr "はい" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "no" msgstr "いいえ" -#: src/readelf.c:4162 +#: src/readelf.c:4478 src/readelf.c:4551 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr ".debug_aragnes の内容を得られません: %s" -#: src/readelf.c:4167 +#: src/readelf.c:4493 #, c-format msgid "" "\n" @@ -4880,25 +5009,20 @@ msgstr[0] "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:4198 +#: src/readelf.c:4524 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4200 +#: src/readelf.c:4526 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" " [%*zu] 開始: %0#*、長さ: %5、CU DIE オフセット: %6\n" -#: src/readelf.c:4219 -#, c-format -msgid "cannot get .debug_ranges content: %s" -msgstr ".degub_ranges の内容を得られません: %s" - -#: src/readelf.c:4224 src/readelf.c:4728 src/readelf.c:5505 src/readelf.c:6006 -#: src/readelf.c:6121 src/readelf.c:6277 src/readelf.c:6699 +#: src/readelf.c:4556 src/readelf.c:4710 src/readelf.c:5231 src/readelf.c:6145 +#: src/readelf.c:6646 src/readelf.c:6766 src/readelf.c:6922 src/readelf.c:7345 #, c-format msgid "" "\n" @@ -4907,39 +5031,117 @@ msgstr "" "\n" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:4248 src/readelf.c:6031 +#: src/readelf.c:4569 src/readelf.c:6171 +#, c-format +msgid "" +"\n" +"Table at offset %Zu:\n" +msgstr "" +"\n" +"オフセット %Zu のテーブル:\n" + +#: src/readelf.c:4573 src/readelf.c:5255 src/readelf.c:6180 +#, c-format +msgid "invalid data in section [%zu] '%s'" +msgstr "セクション [%zu] '%s' の不当なデータ" + +#: src/readelf.c:4589 +#, fuzzy, c-format +msgid "" +"\n" +" Length: %6\n" +msgstr " (オフセット: %#)" + +#: src/readelf.c:4601 +#, fuzzy, c-format +msgid " DWARF version: %6\n" +msgstr " %s: %\n" + +#: src/readelf.c:4605 +#, c-format +msgid "unsupported aranges version" +msgstr "" + +#: src/readelf.c:4616 +#, fuzzy, c-format +msgid " CU offset: %6\n" +msgstr " (オフセット: %#)" + +#: src/readelf.c:4622 +#, fuzzy, c-format +msgid " Address size: %6\n" +msgstr " (終了オフセット: %#)" + +#: src/readelf.c:4626 +#, fuzzy, c-format +msgid "unsupported address size" +msgstr "アドレス値ではありません" + +#: src/readelf.c:4631 +#, fuzzy, c-format +msgid "" +" Segment size: %6\n" +"\n" +msgstr " ファイルを % に設定する\n" + +#: src/readelf.c:4635 +#, c-format +msgid "unsupported segment size" +msgstr "" + +#: src/readelf.c:4675 +#, fuzzy, c-format +msgid " %s..%s (%)\n" +msgstr " %s: %\n" + +#: src/readelf.c:4678 +#, fuzzy, c-format +msgid " %s..%s\n" +msgstr " [%6tx] %s..%s\n" + +#: src/readelf.c:4687 +#, c-format +msgid " %Zu padding bytes\n" +msgstr "" + +#: src/readelf.c:4705 +#, c-format +msgid "cannot get .debug_ranges content: %s" +msgstr ".degub_ranges の内容を得られません: %s" + +#: src/readelf.c:4735 src/readelf.c:6673 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:4270 src/readelf.c:6053 +#: src/readelf.c:4757 src/readelf.c:6695 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] ベースアドレス %s\n" -#: src/readelf.c:4276 src/readelf.c:6059 +#: src/readelf.c:4764 src/readelf.c:6702 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:4285 +#: src/readelf.c:4775 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4287 +#: src/readelf.c:4777 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:4717 src/readelf.c:6768 src/readelf.c:6870 src/readelf.c:7028 -#, c-format -msgid "cannot get %s content: %s" -msgstr "%s の内容を得られません: %s" +#: src/readelf.c:5210 +#, fuzzy, c-format +msgid "cannot get ELF: %s" +msgstr "次の DIE を得られません: %s" -#: src/readelf.c:4724 +#: src/readelf.c:5227 #, c-format msgid "" "\n" @@ -4948,12 +5150,7 @@ msgstr "" "\n" "オフセット %3$# の フレーム情報呼出しセクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:4752 src/readelf.c:5540 -#, c-format -msgid "invalid data in section [%zu] '%s'" -msgstr "セクション [%zu] '%s' の不当なデータ" - -#: src/readelf.c:4774 +#: src/readelf.c:5277 #, c-format msgid "" "\n" @@ -4962,50 +5159,50 @@ msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:4859 +#: src/readelf.c:5362 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "不当な拡大エンコード" -#: src/readelf.c:4871 +#: src/readelf.c:5374 msgid "FDE address encoding: " msgstr "FDE アドレスエンコード" -#: src/readelf.c:4877 +#: src/readelf.c:5380 msgid "LSDA pointer encoding: " msgstr "LSDA ポインターエンコード:" -#: src/readelf.c:4975 +#: src/readelf.c:5491 #, c-format msgid " (offset: %#)" msgstr " (オフセット: %#)" -#: src/readelf.c:4982 +#: src/readelf.c:5498 #, c-format msgid " (end offset: %#)" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5009 +#: src/readelf.c:5525 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sLSDA ポインター: %#\n" -#: src/readelf.c:5060 +#: src/readelf.c:5577 #, c-format msgid "cannot get attribute code: %s" msgstr "属性コードを得られません: %s" -#: src/readelf.c:5069 +#: src/readelf.c:5586 #, c-format msgid "cannot get attribute form: %s" msgstr "属性様式を得られません: %s" -#: src/readelf.c:5084 +#: src/readelf.c:5601 #, c-format msgid "cannot get attribute value: %s" msgstr "属性値を得られません: %s" -#: src/readelf.c:5342 +#: src/readelf.c:5894 #, c-format msgid "" "\n" @@ -5016,7 +5213,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" " [オフセット]\n" -#: src/readelf.c:5374 +#: src/readelf.c:5926 #, fuzzy, c-format msgid "" " Type unit at offset %:\n" @@ -5028,7 +5225,7 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:5383 +#: src/readelf.c:5935 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5039,49 +5236,50 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:5409 +#: src/readelf.c:5960 #, c-format msgid "cannot get DIE at offset % in section '%s': %s" msgstr "" "セクション '%2$s' の オフセット %1$ の DIE を得られません: %3$s" -#: src/readelf.c:5421 +#: src/readelf.c:5974 #, c-format msgid "cannot get DIE offset: %s" msgstr "DIE オフセットを得られません: %s" -#: src/readelf.c:5430 +#: src/readelf.c:5983 #, c-format msgid "cannot get tag of DIE at offset % in section '%s': %s" msgstr "" "セクション '%2$s' 中のオフセット %1$ の DIE のタグを得られません: " "%3$s" -#: src/readelf.c:5461 +#: src/readelf.c:6015 #, c-format msgid "cannot get next DIE: %s\n" msgstr "次の DIE を得られません: %s\n" -#: src/readelf.c:5469 +#: src/readelf.c:6023 #, c-format msgid "cannot get next DIE: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:5518 -#, c-format -msgid "cannot get line data section data: %s" -msgstr "ラインデータセクションデータを得られません: %s" - -#: src/readelf.c:5531 -#, c-format +#: src/readelf.c:6059 +#, fuzzy, c-format msgid "" "\n" -"Table at offset %Zu:\n" +"DWARF section [%2zu] '%s' at offset %#:\n" +"\n" msgstr "" "\n" -"オフセット %Zu のテーブル:\n" +"オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:5586 +#: src/readelf.c:6158 +#, c-format +msgid "cannot get line data section data: %s" +msgstr "ラインデータセクションデータを得られません: %s" + +#: src/readelf.c:6226 #, fuzzy, c-format msgid "" "\n" @@ -5109,18 +5307,18 @@ msgstr "" "\n" "命令コード:\n" -#: src/readelf.c:5607 +#: src/readelf.c:6247 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "セクション [%2$zu] '%3$s' 中のオフセット %1$tu に不当なデータ" -#: src/readelf.c:5622 +#: src/readelf.c:6262 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] %hhu パラメーター\n" -#: src/readelf.c:5630 +#: src/readelf.c:6270 msgid "" "\n" "Directory table:" @@ -5128,7 +5326,7 @@ msgstr "" "\n" "ディレクトリーテーブル:" -#: src/readelf.c:5646 +#: src/readelf.c:6286 msgid "" "\n" "File name table:\n" @@ -5138,7 +5336,7 @@ msgstr "" "ファイル名テーブル:\n" " Entry Dir 時刻 大きさ 名前" -#: src/readelf.c:5675 +#: src/readelf.c:6315 msgid "" "\n" "Line number statements:" @@ -5146,205 +5344,205 @@ msgstr "" "\n" "行 番号 文:" -#: src/readelf.c:5751 +#: src/readelf.c:6391 #, 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:5756 +#: src/readelf.c:6396 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n" -#: src/readelf.c:5776 +#: src/readelf.c:6416 #, c-format msgid " extended opcode %u: " msgstr " 拡張命令コード %u: " -#: src/readelf.c:5781 +#: src/readelf.c:6421 #, fuzzy msgid " end of sequence" msgstr "列の終わり" -#: src/readelf.c:5798 +#: src/readelf.c:6438 #, fuzzy, c-format msgid " set address to %s\n" msgstr "アドレスを %s に設定する\n" -#: src/readelf.c:5819 +#: src/readelf.c:6459 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" "新ファイルを定義する: dir=%u、mtime=%、長さh=%、名前=%s\n" -#: src/readelf.c:5832 +#: src/readelf.c:6472 #, fuzzy, c-format msgid " set discriminator to %u\n" msgstr "カラムを % に設定する\n" -#: src/readelf.c:5837 +#: src/readelf.c:6477 #, fuzzy msgid " unknown opcode" msgstr "不明な命令コード" -#: src/readelf.c:5849 +#: src/readelf.c:6489 msgid " copy" msgstr "複写" -#: src/readelf.c:5860 +#: src/readelf.c:6500 #, fuzzy, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr "アドレスを %u だけ進めて %s にする\n" -#: src/readelf.c:5864 +#: src/readelf.c:6504 #, fuzzy, c-format msgid " advance address by %u to %s\n" msgstr "アドレスを %u だけ進めて %s にする\n" -#: src/readelf.c:5875 +#: src/readelf.c:6515 #, c-format msgid " advance line by constant %d to %\n" msgstr "行を定数 %d だけ進めて % にする\n" -#: src/readelf.c:5883 +#: src/readelf.c:6523 #, c-format msgid " set file to %\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:5893 +#: src/readelf.c:6533 #, c-format msgid " set column to %\n" msgstr "カラムを % に設定する\n" -#: src/readelf.c:5900 +#: src/readelf.c:6540 #, c-format msgid " set '%s' to %\n" msgstr " '%s' を % に設定する\n" -#: src/readelf.c:5906 +#: src/readelf.c:6546 msgid " set basic block flag" msgstr "基本ブロックフラグを設定する" -#: src/readelf.c:5915 +#: src/readelf.c:6555 #, fuzzy, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr "アドレスを定数 %u だけ済めて %s にする\n" -#: src/readelf.c:5919 +#: src/readelf.c:6559 #, fuzzy, c-format msgid " advance address by constant %u to %s\n" msgstr "アドレスを定数 %u だけ済めて %s にする\n" -#: src/readelf.c:5937 +#: src/readelf.c:6577 #, fuzzy, c-format msgid " advance address by fixed value %u to %s\n" msgstr "アドレスを固定値 %u だけ進めて %s にする\n" -#: src/readelf.c:5946 +#: src/readelf.c:6586 msgid " set prologue end flag" msgstr "プロローグ終了フラグを設定する" -#: src/readelf.c:5951 +#: src/readelf.c:6591 msgid " set epilogue begin flag" msgstr "エピローグ開始フラグを設定する" -#: src/readelf.c:5960 +#: src/readelf.c:6600 #, fuzzy, c-format msgid " set isa to %u\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:5969 +#: src/readelf.c:6609 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " % 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:6001 +#: src/readelf.c:6641 #, c-format msgid "cannot get .debug_loc content: %s" msgstr ".debug_loc の内容を得られません: %s" -#: src/readelf.c:6071 +#: src/readelf.c:6716 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6073 +#: src/readelf.c:6718 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6080 +#: src/readelf.c:6725 #, fuzzy msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:6132 src/readelf.c:6286 +#: src/readelf.c:6777 src/readelf.c:6931 #, c-format msgid "cannot get macro information section data: %s" msgstr "マクロ情報セクションのデータを得られません: %s" -#: src/readelf.c:6211 +#: src/readelf.c:6856 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** 最後のセクションの終端していない文字列" -#: src/readelf.c:6327 +#: src/readelf.c:6972 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:6339 +#: src/readelf.c:6984 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:6345 src/readelf.c:7055 +#: src/readelf.c:6990 src/readelf.c:7703 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:6352 +#: src/readelf.c:6997 #, fuzzy, c-format msgid " Flag: 0x%\n" msgstr " 入口点アドレス : %#\n" -#: src/readelf.c:6355 +#: src/readelf.c:7000 #, fuzzy, c-format msgid " Offset length: %\n" msgstr " (オフセット: %#)" -#: src/readelf.c:6363 +#: src/readelf.c:7008 #, fuzzy, c-format msgid " .debug_line offset: 0x%\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:6375 +#: src/readelf.c:7021 #, fuzzy, c-format msgid " extension opcode table, % items:\n" msgstr " % 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:6382 +#: src/readelf.c:7028 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:6394 +#: src/readelf.c:7040 #, fuzzy, c-format msgid " % arguments:" msgstr " [%*] %hhu パラメーター\n" -#: src/readelf.c:6422 +#: src/readelf.c:7068 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:6657 +#: src/readelf.c:7303 #, c-format msgid "vendor opcode not verified?" msgstr "" -#: src/readelf.c:6685 +#: src/readelf.c:7331 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" @@ -5352,7 +5550,7 @@ msgstr "" # # "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" # # " %4$*s 文字列\n" がエラーになるのは何故? 取り敢えず fuzzy扱い -#: src/readelf.c:6726 +#: src/readelf.c:7372 #, fuzzy, c-format msgid "" "\n" @@ -5363,12 +5561,12 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" " %4$*s 文字列\n" -#: src/readelf.c:6740 +#: src/readelf.c:7386 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** 文字列の読込み中にエラー: %s\n" -#: src/readelf.c:6760 +#: src/readelf.c:7406 #, c-format msgid "" "\n" @@ -5377,7 +5575,7 @@ msgstr "" "\n" "呼出しフレーム検索テーブルセクション [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:6862 +#: src/readelf.c:7508 #, c-format msgid "" "\n" @@ -5386,22 +5584,22 @@ msgstr "" "\n" "例外取扱いテーブルセクション [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:6885 +#: src/readelf.c:7531 #, c-format msgid " LPStart encoding: %#x " msgstr " LPStart コード化: %#x " -#: src/readelf.c:6897 +#: src/readelf.c:7543 #, c-format msgid " TType encoding: %#x " msgstr "TType コード化: %#x " -#: src/readelf.c:6911 +#: src/readelf.c:7557 #, c-format msgid " Call site encoding: %#x " msgstr "呼出しサイトコード化: %#x " -#: src/readelf.c:6924 +#: src/readelf.c:7570 msgid "" "\n" " Call site table:" @@ -5409,7 +5607,7 @@ msgstr "" "\n" " 呼出しサイトテーブル:" -#: src/readelf.c:6938 +#: src/readelf.c:7584 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5422,12 +5620,12 @@ msgstr "" " 離着陸場: %#\n" " 行動: %u\n" -#: src/readelf.c:6998 +#: src/readelf.c:7644 #, c-format msgid "invalid TType encoding" msgstr "不当な TType コード化" -#: src/readelf.c:7019 +#: src/readelf.c:7665 #, fuzzy, c-format msgid "" "\n" @@ -5437,37 +5635,37 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:7048 +#: src/readelf.c:7694 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:7064 +#: src/readelf.c:7712 #, fuzzy, c-format msgid " CU offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:7071 +#: src/readelf.c:7719 #, fuzzy, c-format msgid " TU offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:7078 +#: src/readelf.c:7726 #, fuzzy, c-format msgid " address offset: %#\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:7085 +#: src/readelf.c:7733 #, fuzzy, c-format msgid " symbol offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:7092 +#: src/readelf.c:7740 #, fuzzy, c-format msgid " constant offset: %#\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:7099 +#: src/readelf.c:7747 #, fuzzy, c-format msgid "" "\n" @@ -5477,7 +5675,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:7121 +#: src/readelf.c:7769 #, fuzzy, c-format msgid "" "\n" @@ -5487,7 +5685,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:7147 +#: src/readelf.c:7795 #, fuzzy, c-format msgid "" "\n" @@ -5497,7 +5695,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:7174 +#: src/readelf.c:7824 #, fuzzy, c-format msgid "" "\n" @@ -5506,17 +5704,17 @@ msgstr "" "\n" "オフセット %#0 に不当なシンボルテーブル\n" -#: src/readelf.c:7259 +#: src/readelf.c:7909 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "デバッグ内容記述子を得られません: %s" -#: src/readelf.c:7409 src/readelf.c:8010 +#: src/readelf.c:8069 src/readelf.c:8675 src/readelf.c:8786 src/readelf.c:8844 #, c-format msgid "cannot convert core note data: %s" msgstr "コアノートデータの変換ができません: %s" -#: src/readelf.c:7750 +#: src/readelf.c:8416 #, c-format msgid "" "\n" @@ -5525,21 +5723,21 @@ msgstr "" "\n" "%*s... < %u 回の繰返し> ..." -#: src/readelf.c:8109 +#: src/readelf.c:8919 msgid " Owner Data size Type\n" msgstr " 所有者 データ大きさタイプ\n" -#: src/readelf.c:8127 +#: src/readelf.c:8937 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:8161 +#: src/readelf.c:8987 #, c-format msgid "cannot get content of note section: %s" msgstr "ノートセクションの内容を得られません: %s" -#: src/readelf.c:8188 +#: src/readelf.c:9014 #, c-format msgid "" "\n" @@ -5549,7 +5747,7 @@ msgstr "" "オフセット %4$#0 の %3$ バイトのノートセクション [%1$2zu] " "'%2$s':\n" -#: src/readelf.c:8211 +#: src/readelf.c:9037 #, c-format msgid "" "\n" @@ -5558,7 +5756,7 @@ msgstr "" "\n" "オフセット %2$#0 の %1$ バイトのノートセグメント:\n" -#: src/readelf.c:8257 +#: src/readelf.c:9083 #, c-format msgid "" "\n" @@ -5567,12 +5765,12 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:8263 src/readelf.c:8286 +#: src/readelf.c:9089 src/readelf.c:9112 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "セクション [%Zu] '%s' からデータが得られません: %s" -#: src/readelf.c:8267 +#: src/readelf.c:9093 #, c-format msgid "" "\n" @@ -5582,7 +5780,7 @@ msgstr "" "オフセット %4$#0 のセクション [%1$Zu] '%2$s' の16進ダン" "プ、%3$ バイト:\n" -#: src/readelf.c:8280 +#: src/readelf.c:9106 #, fuzzy, c-format msgid "" "\n" @@ -5591,7 +5789,7 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:8290 +#: src/readelf.c:9116 #, c-format msgid "" "\n" @@ -5601,7 +5799,7 @@ msgstr "" "オフセット %4$#0 文字列セクション [%1$Zu] '%2$s' には %3$ バ" "イトあります:\n" -#: src/readelf.c:8338 +#: src/readelf.c:9164 #, c-format msgid "" "\n" @@ -5610,7 +5808,7 @@ msgstr "" "\n" "セクション [%lu] がありません" -#: src/readelf.c:8367 +#: src/readelf.c:9193 #, c-format msgid "" "\n" @@ -5619,12 +5817,12 @@ msgstr "" "\n" "セクション '%s' がありません" -#: src/readelf.c:8424 +#: src/readelf.c:9250 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "アーカイブのシンボル索引 '%s' を得られません: %s" -#: src/readelf.c:8427 +#: src/readelf.c:9253 #, c-format msgid "" "\n" @@ -5633,7 +5831,7 @@ msgstr "" "\n" "アーカイブ '%s' にはシンボル索引がありません\n" -#: src/readelf.c:8431 +#: src/readelf.c:9257 #, c-format msgid "" "\n" @@ -5642,12 +5840,12 @@ msgstr "" "\n" "アーカイブ '%s' の索引には %Zu 項目あります:\n" -#: src/readelf.c:8449 +#: src/readelf.c:9275 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "'%2$s' の オフセット %1$Zu のメンバーを抽出できません: %3$s" -#: src/readelf.c:8454 +#: src/readelf.c:9280 #, c-format msgid "Archive member '%s' contains:\n" msgstr "アーカイブメンバー '%s' には以下があります:\n" @@ -5711,12 +5909,12 @@ msgstr "不当な基数: %s" msgid "%s: file format not recognized" msgstr "%s: ファイル形式を認識できません" -#: src/size.c:438 src/size.c:581 +#: src/size.c:438 src/size.c:571 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:606 +#: src/size.c:596 msgid "(TOTALS)\n" msgstr "(合計)\n" @@ -5754,27 +5952,27 @@ msgstr "" msgid "Print the strings of printable characters in files." msgstr "" -#: src/strings.c:260 src/strings.c:295 +#: src/strings.c:267 src/strings.c:302 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "" -#: src/strings.c:306 +#: src/strings.c:313 #, c-format msgid "invalid minimum length of matched string size" msgstr "" -#: src/strings.c:591 +#: src/strings.c:596 #, c-format msgid "lseek64 failed" msgstr "" -#: src/strings.c:608 src/strings.c:672 +#: src/strings.c:613 src/strings.c:677 #, c-format msgid "re-mmap failed" msgstr "" -#: src/strings.c:645 +#: src/strings.c:650 #, c-format msgid "mprotect failed" msgstr "" @@ -5842,7 +6040,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 回指定されています" @@ -5867,87 +6065,87 @@ msgstr "'%s' を開いている間" msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: アーカイブから抜き出している時は -o や -f は使えません" -#: src/strip.c:467 +#: src/strip.c:468 #, c-format msgid "cannot open EBL backend" msgstr "EBL バックエンドを開けません" -#: src/strip.c:517 src/strip.c:541 +#: src/strip.c:518 src/strip.c:542 #, c-format msgid "cannot create new file '%s': %s" msgstr "新しいファイル '%s' を生成できません: %s" -#: src/strip.c:601 +#: src/strip.c:608 #, c-format msgid "illformed file '%s'" msgstr "不適格なファイル '%s'" -#: src/strip.c:905 src/strip.c:994 +#: src/strip.c:930 src/strip.c:1019 #, c-format msgid "while generating output file: %s" msgstr "出力ファイルを生成している間: %s" -#: src/strip.c:967 src/strip.c:1929 +#: src/strip.c:992 src/strip.c:1957 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" -#: src/strip.c:981 +#: src/strip.c:1006 #, c-format msgid "while preparing output for '%s'" msgstr "'%s' のための出力を準備している間" -#: src/strip.c:1032 src/strip.c:1088 +#: src/strip.c:1057 src/strip.c:1114 #, c-format msgid "while create section header section: %s" msgstr "セクションヘッダーセクションを生成している間: %s" -#: src/strip.c:1038 +#: src/strip.c:1063 #, c-format msgid "cannot allocate section data: %s" msgstr "セクションデータを割り当てられません: %s" -#: src/strip.c:1097 +#: src/strip.c:1123 #, c-format msgid "while create section header string table: %s" msgstr "セクションヘッダー文字列テーブルを生成中: %s" -#: src/strip.c:1724 +#: src/strip.c:1752 #, fuzzy, c-format msgid "bad relocation" msgstr "リロケーションを表示" -#: src/strip.c:1841 src/strip.c:1951 +#: src/strip.c:1869 src/strip.c:1979 #, c-format msgid "while writing '%s': %s" msgstr "'%s' を書込み中: %s" -#: src/strip.c:1852 +#: src/strip.c:1880 #, c-format msgid "while creating '%s'" msgstr "'%s' を生成中" -#: src/strip.c:1874 +#: src/strip.c:1902 #, c-format msgid "while computing checksum for debug information" msgstr "デバッグ情報のチェックサムを計算中" -#: src/strip.c:1937 +#: src/strip.c:1965 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: ファイルを読込み中にエラー: %s" -#: src/strip.c:1976 src/strip.c:1996 +#: src/strip.c:2004 src/strip.c:2024 #, fuzzy, c-format msgid "while writing '%s'" msgstr "'%s' を書込み中: %s" -#: src/strip.c:2030 src/strip.c:2037 +#: src/strip.c:2061 src/strip.c:2068 #, c-format msgid "error while finishing '%s': %s" msgstr "'%s' の終了中にエラー: %s" -#: src/strip.c:2060 src/strip.c:2117 +#: src/strip.c:2091 src/strip.c:2148 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "'%s' のアクセスと変更日付を設定できません" @@ -5984,265 +6182,288 @@ 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:263 src/unstrip.c:1828 #, c-format msgid "cannot create program headers: %s" msgstr "" -#: src/unstrip.c:262 +#: src/unstrip.c:269 #, c-format msgid "cannot copy program header: %s" msgstr "" -#: src/unstrip.c:272 +#: src/unstrip.c:279 #, c-format msgid "cannot copy section header: %s" msgstr "" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:282 src/unstrip.c:1509 #, c-format msgid "cannot get section data: %s" msgstr "" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:284 src/unstrip.c:1511 #, c-format msgid "cannot copy section data: %s" msgstr "" -#: src/unstrip.c:301 +#: src/unstrip.c:308 #, c-format msgid "cannot create directory '%s'" msgstr "" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:348 src/unstrip.c:765 src/unstrip.c:1543 #, 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:364 src/unstrip.c:582 src/unstrip.c:603 src/unstrip.c:615 +#: src/unstrip.c:1564 src/unstrip.c:1694 src/unstrip.c:1718 #, c-format msgid "cannot update symbol table: %s" msgstr "" -#: src/unstrip.c:367 +#: src/unstrip.c:374 #, c-format msgid "cannot update section header: %s" msgstr "" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:413 src/unstrip.c:424 #, c-format msgid "cannot update relocation: %s" msgstr "" -#: src/unstrip.c:504 +#: src/unstrip.c:511 #, c-format msgid "cannot get symbol version: %s" msgstr "" -#: src/unstrip.c:516 +#: src/unstrip.c:523 #, c-format msgid "unexpected section type in [%Zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:764 +#: src/unstrip.c:771 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:913 src/unstrip.c:1254 #, 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:954 src/unstrip.c:973 src/unstrip.c:1006 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:987 +#: src/unstrip.c:994 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1049 src/unstrip.c:1374 #, 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:1174 src/unstrip.c:1189 src/unstrip.c:1455 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1190 +#: src/unstrip.c:1198 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1225 src/unstrip.c:1229 #, 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:1233 src/unstrip.c:1237 src/unstrip.c:1470 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1232 +#: src/unstrip.c:1240 #, 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:1299 src/unstrip.c:1389 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1441 +#: src/unstrip.c:1449 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1543 +#: src/unstrip.c:1551 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "" -#: src/unstrip.c:1781 +#: src/unstrip.c:1789 #, fuzzy, c-format msgid "cannot read section data: %s" msgstr "セクションデータを割り当てられません: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1810 #, c-format msgid "cannot get ELF header: %s" msgstr "" -#: src/unstrip.c:1830 +#: src/unstrip.c:1838 #, c-format msgid "cannot update program header: %s" msgstr "" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1843 src/unstrip.c:1922 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:1883 +#: src/unstrip.c:1891 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:1886 +#: src/unstrip.c:1894 #, 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:1913 src/unstrip.c:1964 src/unstrip.c:1976 src/unstrip.c:2062 #, 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:1955 +msgid "WARNING: " msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:1957 +msgid ", use --force" +msgstr "" + +#: src/unstrip.c:1980 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1983 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1986 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:1989 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "" + +#: src/unstrip.c:2019 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:1998 +#: src/unstrip.c:2023 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2013 +#: src/unstrip.c:2038 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2017 +#: src/unstrip.c:2042 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2030 +#: src/unstrip.c:2055 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2061 +#: src/unstrip.c:2086 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2194 +#: src/unstrip.c:2219 #, c-format msgid "no matching modules found" msgstr "" -#: src/unstrip.c:2203 +#: src/unstrip.c:2228 #, c-format msgid "matched more than one module" msgstr "" -#: src/unstrip.c:2250 +#: src/unstrip.c:2275 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2251 +#: src/unstrip.c:2276 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" @@ -6269,6 +6490,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" diff --git a/po/pl.gmo b/po/pl.gmo index d3813605ddd33d92645ddd8cb21e4b3c747c21f8..98d93d39324dd143388110d840f5bc89e5bb3afe 100644 GIT binary patch delta 32455 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 delta 27714 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 JA5hTq{{VWKy7K@4 diff --git a/po/pl.po b/po/pl.po index af0032a..b5224dc 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,13 +1,13 @@ # translation of pl.po to Polish # Jakub Bogusz , 2003-2007. -# Piotr Drąg , 2010. +# Piotr Drąg , 2010-2012. # msgid "" msgstr "" "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2012-08-27 20:34+0200\n" -"PO-Revision-Date: 2011-02-13 16:25+0100\n" +"POT-Creation-Date: 2014-08-27 11:26+0200\n" +"PO-Revision-Date: 2012-09-02 19:12+0200\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" @@ -17,18 +17,18 @@ 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:2842 -#: src/readelf.c:3181 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3098 +#: src/readelf.c:3447 src/readelf.c:8018 src/unstrip.c:2115 src/unstrip.c:2323 #, c-format msgid "memory exhausted" msgstr "pamięć wyczerpana" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:49 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:53 #: libelf/elf_error.c:60 msgid "no error" msgstr "brak błędu" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:51 +#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:55 #: libelf/elf_error.c:91 msgid "out of memory" msgstr "brak pamięci" @@ -67,7 +67,7 @@ msgstr "błąd podczas wyprowadzania danych" msgid "no backend support available" msgstr "brak dostępnej obsługi zaplecza" -#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:50 +#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:54 #: libelf/elf_error.c:63 msgid "unknown error" msgstr "nieznany błąd" @@ -164,7 +164,7 @@ msgstr "nieprawidłowa wersja DWARF" msgid "invalid directory index" msgstr "nieprawidłowy indeks katalogu" -#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:70 +#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:74 msgid "address out of range" msgstr "adres jest spoza zakresu" @@ -184,7 +184,7 @@ msgstr "nieprawidłowy indeks wiersza" msgid "invalid address range index" msgstr "nieprawidłowy indeks zakresu adresów" -#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:71 +#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:75 msgid "no matching address range" msgstr "brak pasującego zakresu adresów" @@ -206,9 +206,9 @@ msgstr "nieprawidłowa wersja CFI" #: libdw/dwarf_error.c:94 msgid "no alternative debug link found" -msgstr "" +msgstr "nie odnaleziono alternatywnego dowiązania debugowania" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdwfl/argp-std.c:46 src/unstrip.c:2265 msgid "Input selection options:" msgstr "Opcje wyboru wejścia:" @@ -244,132 +244,192 @@ msgstr "Jądro ze wszystkimi modułami" msgid "Search path for separate debuginfo files" msgstr "Wyszukuje ścieżkę dla oddzielnych plików debuginfo" -#: libdwfl/argp-std.c:142 +#: libdwfl/argp-std.c:157 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:202 -#, c-format -msgid "cannot read ELF core file: %s" -msgstr "nie można odczytać pliku core ELF: %s" - -#: libdwfl/argp-std.c:220 -msgid "No modules recognized in core file" -msgstr "Nie rozpoznano żadnych modułów w pliku core" - -#: libdwfl/argp-std.c:232 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "nie można wczytać symboli jądra" -#: libdwfl/argp-std.c:236 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "nie można odnaleźć modułów jądra" -#: libdwfl/argp-std.c:250 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "nie można odnaleźć jądra lub modułów" -#: libdwfl/libdwflP.h:52 +#: 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:311 +msgid "No modules recognized in core file" +msgstr "Nie rozpoznano żadnych modułów w pliku core" + +#: libdwfl/libdwflP.h:56 msgid "See errno" msgstr "Proszę zobaczyć errno" -#: libdwfl/libdwflP.h:53 +#: libdwfl/libdwflP.h:57 msgid "See elf_errno" msgstr "Proszę zobaczyć elf_errno" -#: libdwfl/libdwflP.h:54 +#: libdwfl/libdwflP.h:58 msgid "See dwarf_errno" msgstr "Proszę zobaczyć dwarf_errno" -#: libdwfl/libdwflP.h:55 +#: libdwfl/libdwflP.h:59 msgid "See ebl_errno (XXX missing)" msgstr "Proszę zobaczyć ebl_errno (brak XXX)" -#: libdwfl/libdwflP.h:56 +#: libdwfl/libdwflP.h:60 msgid "gzip decompression failed" msgstr "dekompresja gzip nie powiodła się" -#: libdwfl/libdwflP.h:57 +#: libdwfl/libdwflP.h:61 msgid "bzip2 decompression failed" msgstr "dekompresja bzip2 nie powiodła się" -#: libdwfl/libdwflP.h:58 +#: libdwfl/libdwflP.h:62 msgid "LZMA decompression failed" msgstr "dekompresja LZMA nie powiodła się" -#: libdwfl/libdwflP.h:59 +#: libdwfl/libdwflP.h:63 msgid "no support library found for machine" msgstr "nie odnaleziono biblioteki obsługi dla komputera" -#: libdwfl/libdwflP.h:60 +#: libdwfl/libdwflP.h:64 msgid "Callbacks missing for ET_REL file" msgstr "Brak wywołań zwrotnych dla pliku ET_REL" -#: libdwfl/libdwflP.h:61 +#: libdwfl/libdwflP.h:65 msgid "Unsupported relocation type" msgstr "Nieobsługiwany typ relokacji" -#: libdwfl/libdwflP.h:62 +#: libdwfl/libdwflP.h:66 msgid "r_offset is bogus" msgstr "r_offset jest fałszywe" -#: libdwfl/libdwflP.h:63 libelf/elf_error.c:111 libelf/elf_error.c:171 +#: libdwfl/libdwflP.h:67 libelf/elf_error.c:111 libelf/elf_error.c:171 msgid "offset out of range" msgstr "offset spoza zakresu" -#: libdwfl/libdwflP.h:64 +#: libdwfl/libdwflP.h:68 msgid "relocation refers to undefined symbol" msgstr "relokacja odnosi się do nieokreślonego symbolu" -#: libdwfl/libdwflP.h:65 +#: libdwfl/libdwflP.h:69 msgid "Callback returned failure" msgstr "Wywołanie zwrotne zwróciło niepowodzenie" -#: libdwfl/libdwflP.h:66 +#: libdwfl/libdwflP.h:70 msgid "No DWARF information found" msgstr "Nie odnaleziono informacji DWARF" -#: libdwfl/libdwflP.h:67 +#: libdwfl/libdwflP.h:71 msgid "No symbol table found" msgstr "Nie odnaleziono tabeli symboli" -#: libdwfl/libdwflP.h:68 +#: libdwfl/libdwflP.h:72 msgid "No ELF program headers" msgstr "Brak nagłówków programu ELF" -#: libdwfl/libdwflP.h:69 +#: libdwfl/libdwflP.h:73 msgid "address range overlaps an existing module" msgstr "zakres adresów pokrywa się z istniejącym modułem" -#: libdwfl/libdwflP.h:72 +#: libdwfl/libdwflP.h:76 msgid "image truncated" msgstr "skrócono obraz" -#: libdwfl/libdwflP.h:73 +#: libdwfl/libdwflP.h:77 msgid "ELF file opened" msgstr "otwarto plik ELF" -#: libdwfl/libdwflP.h:74 +#: libdwfl/libdwflP.h:78 msgid "not a valid ELF file" msgstr "nie jest prawidłowym plikiem ELF" -#: libdwfl/libdwflP.h:75 +#: libdwfl/libdwflP.h:79 msgid "cannot handle DWARF type description" msgstr "nie można obsłużyć opisu typu DWARF" -#: libdwfl/libdwflP.h:76 +#: libdwfl/libdwflP.h:80 msgid "ELF file does not match build ID" msgstr "plik ELF nie posiada pasującego identyfikatora kopii" -#: libdwfl/libdwflP.h:77 +#: libdwfl/libdwflP.h:81 msgid "corrupt .gnu.prelink_undo section data" msgstr "uszkodzone dane sekcji .gnu.prelink_undo" +#: libdwfl/libdwflP.h:82 +msgid "Internal error due to ebl" +msgstr "" + +#: libdwfl/libdwflP.h:83 +msgid "Missing data in core file" +msgstr "" + +#: libdwfl/libdwflP.h:84 +#, fuzzy +msgid "Invalid register" +msgstr "nieprawidłowy parametr" + +#: libdwfl/libdwflP.h:85 +msgid "Error reading process memory" +msgstr "" + +#: libdwfl/libdwflP.h:86 +msgid "Couldn't find architecture of any ELF" +msgstr "" + +#: libdwfl/libdwflP.h:87 +msgid "Error parsing /proc filesystem" +msgstr "" + +#: libdwfl/libdwflP.h:88 +#, fuzzy +msgid "Invalid DWARF" +msgstr "nieprawidłowy DWARF" + +#: libdwfl/libdwflP.h:89 +msgid "Unsupported DWARF" +msgstr "" + +#: libdwfl/libdwflP.h:90 +msgid "Unable to find more threads" +msgstr "" + +#: libdwfl/libdwflP.h:91 +msgid "Dwfl already has attached state" +msgstr "" + +#: libdwfl/libdwflP.h:92 +msgid "Dwfl has no attached state" +msgstr "" + +#: libdwfl/libdwflP.h:93 +msgid "Unwinding not supported for this architecture" +msgstr "" + +#: libdwfl/libdwflP.h:94 +#, fuzzy +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" -#: libebl/eblcorenotetypename.c:86 libebl/eblobjecttypename.c:57 +#: libebl/eblcorenotetypename.c:102 libebl/eblobjecttypename.c:57 #: libebl/eblobjnotetypename.c:73 libebl/eblosabiname.c:77 #: libebl/eblsectionname.c:89 libebl/eblsectiontypename.c:119 #: libebl/eblsegmenttypename.c:83 @@ -382,44 +442,44 @@ msgid ": %#" msgstr ": %#" #: libebl/eblobjnote.c:55 -#, fuzzy, c-format +#, c-format msgid "unknown SDT version %u\n" -msgstr "nieznana wersja" +msgstr "nieznana wersja SDT %u\n" #: libebl/eblobjnote.c:73 -#, fuzzy, c-format +#, c-format msgid "invalid SDT probe descriptor\n" -msgstr "nieprawidłowy deskryptor pliku" +msgstr "nieprawidłowy deskryptor sondy SDT\n" #: libebl/eblobjnote.c:123 #, c-format msgid " PC: " -msgstr "" +msgstr " PC: " #: libebl/eblobjnote.c:125 #, c-format msgid " Base: " -msgstr "" +msgstr " Podstawa: " #: libebl/eblobjnote.c:127 #, c-format msgid " Semaphore: " -msgstr "" +msgstr " Semafor: " #: libebl/eblobjnote.c:129 #, c-format msgid " Provider: " -msgstr "" +msgstr " Dostawca: " #: libebl/eblobjnote.c:131 #, c-format msgid " Name: " -msgstr "" +msgstr " Nazwa: " #: libebl/eblobjnote.c:133 #, c-format msgid " Args: " -msgstr "" +msgstr " Parametry: " #: libebl/eblobjnote.c:143 #, c-format @@ -465,7 +525,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:4697 +#: libelf/elf_error.c:87 src/readelf.c:5190 #, c-format msgid "invalid encoding" msgstr "nieprawidłowe kodowanie" @@ -546,8 +606,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:6335 src/readelf.c:6780 -#: src/readelf.c:6881 src/readelf.c:7043 +#: libelf/elf_error.c:187 src/readelf.c:6980 src/readelf.c:7426 +#: src/readelf.c:7527 src/readelf.c:7689 #, c-format msgid "invalid data" msgstr "nieprawidłowe dane" @@ -612,33 +672,44 @@ msgid "Also show symbol or section names" msgstr "Wyświetla także nazwy symboli ub sekcji" #: src/addr2line.c:64 +#, fuzzy +msgid "Also show symbol and the section names" +msgstr "Wyświetla także nazwy symboli ub sekcji" + +#: src/addr2line.c:65 msgid "Also show line table flags" msgstr "Wyświetla także flagi tabeli wierszy" -#: src/addr2line.c:66 +#: src/addr2line.c:67 msgid "Treat addresses as offsets relative to NAME section." msgstr "Traktuje adresy jako offsety względne do sekcji NAZWA." -#: src/addr2line.c:68 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 +#: src/addr2line.c:69 +msgid "" +"Show all source locations that caused inline expansion of subroutines at the " +"address." +msgstr "" + +#: src/addr2line.c:72 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 #: src/strings.c:75 msgid "Miscellaneous:" msgstr "Różne:" -#: src/addr2line.c:77 +#: src/addr2line.c:81 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" "Odnajdywanie plików źródłowych i informacji o wierszu dla ADRESU (domyślne w " "a.out)." -#: src/addr2line.c:81 +#: src/addr2line.c:85 msgid "[ADDR...]" msgstr "[ADRES...]" -#: src/addr2line.c:181 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:231 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 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:460 src/size.c:211 src/strings.c:219 -#: src/strip.c:213 src/unstrip.c:226 +#: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -651,30 +722,30 @@ msgstr "" "BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI\n" "HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ.\n" -#: src/addr2line.c:186 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:236 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 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:465 src/size.c:216 src/strings.c:224 -#: src/strip.c:218 src/unstrip.c:231 +#: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "Napisane przez %s.\n" -#: src/addr2line.c:405 +#: src/addr2line.c:474 #, c-format msgid "Section syntax requires exactly one module" msgstr "Składnia sekcji wymaga dokładnie jednego modułu" -#: src/addr2line.c:428 +#: src/addr2line.c:497 #, c-format msgid "offset %# lies outside section '%s'" msgstr "offset %# leży poza sekcją \"%s\"" -#: src/addr2line.c:469 +#: src/addr2line.c:563 #, c-format msgid "cannot find symbol '%s'" msgstr "nie można odnaleźć symbolu \"%s\"" -#: src/addr2line.c:474 +#: src/addr2line.c:568 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "offset %# leży poza zawartością \"%s\"" @@ -809,7 +880,7 @@ msgstr "wymagana jest nazwa archiwum" #: src/ar.c:249 #, c-format msgid "command option required" -msgstr "" +msgstr "wymagana jest opcja polecenia" #: src/ar.c:314 #, c-format @@ -958,7 +1029,7 @@ msgstr "Ignorowanie permutacji kubełków w sekcji SHT_HASH" #: src/elfcmp.c:69 msgid "Ignore differences in build ID" -msgstr "Ignorowanie różnic w identyfikatorze budowania" +msgstr "Ignorowanie różnic w identyfikatorze kopii" #: src/elfcmp.c:70 msgid "Output nothing; yield exit status only" @@ -1059,12 +1130,12 @@ msgstr "%s %s różnią się: sekcja [%zu] \"%s\" notatka \"%s\" typ" #: src/elfcmp.c:462 #, c-format msgid "%s %s differ: build ID length" -msgstr "%s %s różnią się: długość identyfikatora budowania" +msgstr "%s %s różnią się: długość identyfikatora kopii" #: src/elfcmp.c:470 #, c-format msgid "%s %s differ: build ID content" -msgstr "%s %s różnią się: zawartość identyfikatora budowania" +msgstr "%s %s różnią się: zawartość identyfikatora kopii" #: src/elfcmp.c:479 #, c-format @@ -1113,8 +1184,8 @@ msgstr "Nieprawidłowa wartość \"%s\" dla parametru --gaps." #: src/elfcmp.c:722 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:175 src/strip.c:450 src/strip.c:487 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1911 +#: src/unstrip.c:1940 #, c-format msgid "cannot open '%s'" msgstr "nie można otworzyć \"%s\"" @@ -1169,160 +1240,160 @@ msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "" "Szczegółowe sprawdzanie zgodności plików ELF ze specyfikacją gABI/psABI." -#: src/elflint.c:78 src/readelf.c:113 +#: src/elflint.c:78 src/readelf.c:123 msgid "FILE..." msgstr "PLIK..." -#: src/elflint.c:151 src/readelf.c:271 +#: src/elflint.c:155 src/readelf.c:292 #, c-format msgid "cannot open input file" msgstr "nie można otworzyć pliku wejściowego" -#: src/elflint.c:158 +#: src/elflint.c:162 #, c-format msgid "cannot generate Elf descriptor: %s\n" msgstr "nie można utworzyć deskryptora ELF: %s\n" -#: src/elflint.c:177 +#: src/elflint.c:181 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "błąd podczas zamykania deskryptora ELF: %s\n" -#: src/elflint.c:181 +#: src/elflint.c:185 msgid "No errors" msgstr "Brak błędów" -#: src/elflint.c:215 src/readelf.c:434 +#: src/elflint.c:219 src/readelf.c:468 msgid "Missing file name.\n" msgstr "Brak nazwy pliku.\n" -#: src/elflint.c:294 +#: src/elflint.c:298 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr " błąd podczas zwalniania deskryptora pod-ELF: %s\n" -#: src/elflint.c:302 +#: src/elflint.c:306 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "To nie jest plik ELF - posiada błędne bajty magiczne na początku\n" -#: src/elflint.c:363 +#: src/elflint.c:371 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d nie jest znaną klasą\n" -#: src/elflint.c:368 +#: src/elflint.c:376 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d nie jest znanym kodowaniem danych\n" -#: src/elflint.c:372 +#: src/elflint.c:380 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "nieznany numer wersji nagłówka ELF e_ident[%d] == %d\n" -#: src/elflint.c:378 +#: src/elflint.c:386 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "nieobsługiwane ABI systemu operacyjnego e_ident[%d] == \"%s\"\n" -#: src/elflint.c:384 +#: src/elflint.c:392 #, c-format msgid "unsupport ABI version e_ident[%d] == %d\n" msgstr "nieobsługiwana wersja ABI e_ident[%d] == %d\n" -#: src/elflint.c:389 +#: src/elflint.c:397 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] nie wynosi zero\n" -#: src/elflint.c:394 +#: src/elflint.c:402 #, c-format msgid "unknown object file type %d\n" msgstr "nieznany typ pliku obiektu %d\n" -#: src/elflint.c:401 +#: src/elflint.c:409 #, c-format msgid "unknown machine type %d\n" msgstr "nieznany typ komputera %d\n" -#: src/elflint.c:405 +#: src/elflint.c:413 #, c-format msgid "unknown object file version\n" msgstr "nieznana wersja pliku obiektu\n" -#: src/elflint.c:411 +#: src/elflint.c:419 #, c-format msgid "invalid program header offset\n" msgstr "nieprawidłowy offset nagłówka programu\n" -#: src/elflint.c:413 +#: src/elflint.c:421 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" "pliki wykonywalne i DSO nie mogą mieć zerowego offsetu nagłówka programu\n" -#: src/elflint.c:417 +#: src/elflint.c:425 #, c-format msgid "invalid number of program header entries\n" msgstr "nieprawidłowa liczba wpisów nagłówka programu\n" -#: src/elflint.c:425 +#: src/elflint.c:433 #, c-format msgid "invalid section header table offset\n" msgstr "nieprawidłowy offset tabeli nagłówków sekcji\n" -#: src/elflint.c:428 +#: src/elflint.c:436 #, c-format msgid "section header table must be present\n" msgstr "tabela nagłówków sekcji musi istnieć\n" -#: src/elflint.c:442 +#: src/elflint.c:450 #, c-format msgid "invalid number of section header table entries\n" msgstr "nieprawidłowa liczba wpisów tabeli nagłówków sekcji\n" -#: src/elflint.c:459 +#: src/elflint.c:467 #, c-format msgid "invalid section header index\n" msgstr "nieprawidłowy indeks nagłówka sekcji\n" -#: src/elflint.c:473 +#: src/elflint.c:481 #, c-format msgid "invalid number of program header table entries\n" msgstr "nieprawidłowa liczba wpisów tabeli nagłówka programu\n" -#: src/elflint.c:482 +#: src/elflint.c:490 #, c-format msgid "invalid machine flags: %s\n" msgstr "nieprawidłowe flagi komputera: %s\n" -#: src/elflint.c:489 src/elflint.c:506 +#: src/elflint.c:497 src/elflint.c:514 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "nieprawidłowy rozmiar nagłówka ELF: %hd\n" -#: src/elflint.c:492 src/elflint.c:509 +#: src/elflint.c:500 src/elflint.c:517 #, c-format msgid "invalid program header size: %hd\n" msgstr "nieprawidłowa rozmiar nagłówka programu: %hd\n" -#: src/elflint.c:495 src/elflint.c:512 +#: src/elflint.c:503 src/elflint.c:520 #, c-format msgid "invalid program header position or size\n" msgstr "nieprawidłowe położenie lub rozmiar nagłówka programu\n" -#: src/elflint.c:498 src/elflint.c:515 +#: src/elflint.c:506 src/elflint.c:523 #, c-format msgid "invalid section header size: %hd\n" msgstr "nieprawidłowy rozmiar nagłówka sekcji: %hd\n" -#: src/elflint.c:501 src/elflint.c:518 +#: src/elflint.c:509 src/elflint.c:526 #, c-format msgid "invalid section header position or size\n" msgstr "nieprawidłowe położenie lub rozmiar nagłówka sekcji\n" -#: src/elflint.c:562 +#: src/elflint.c:570 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1330,7 +1401,7 @@ msgid "" msgstr "" "sekcja [%2d] \"%s\": sekcja z flagą SHF_GROUP nie jest częścią grupy sekcji\n" -#: src/elflint.c:566 +#: src/elflint.c:574 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" @@ -1338,14 +1409,14 @@ msgstr "" "sekcja [%2d] \"%s\": grupa sekcji [%2zu] \"%s\" nie poprzedza elementu " "grupy\n" -#: src/elflint.c:582 src/elflint.c:1426 src/elflint.c:1476 src/elflint.c:1581 -#: src/elflint.c:2166 src/elflint.c:2680 src/elflint.c:2841 src/elflint.c:2971 -#: src/elflint.c:3143 src/elflint.c:4045 +#: 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:595 src/elflint.c:1588 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1354,7 +1425,7 @@ msgstr "" "sekcja [%2d] \"%s\": użyta jako tabela ciągów dla sekcji [%2d] \"%s\", ale " "nie jest typu SHT_STRTAB\n" -#: src/elflint.c:618 +#: src/elflint.c:626 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1363,38 +1434,38 @@ msgstr "" "sekcja [%2d] \"%s\": tabela symboli nie może mieć więcej niż jednej " "rozszerzonej sekcji indeksów\n" -#: src/elflint.c:629 +#: src/elflint.c:638 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "sekcja [%2u] \"%s\": rozmiar wpisu nie zgadza się z ElfXX_Sym\n" -#: src/elflint.c:638 +#: src/elflint.c:647 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "sekcja [%2d] \"%s\": nie można uzyskać symbolu %d: %s\n" -#: src/elflint.c:643 src/elflint.c:646 src/elflint.c:649 src/elflint.c:652 -#: src/elflint.c:655 src/elflint.c:658 +#: src/elflint.c:652 src/elflint.c:655 src/elflint.c:658 src/elflint.c:661 +#: src/elflint.c:664 src/elflint.c:667 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "sekcja [%2d] \"%s\": \"%s\" w zerowym wpisie nie jest zerem\n" -#: src/elflint.c:661 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "sekcja [%2d] \"%s\": XINDEX dla zerowego wpisu nie jest zerem\n" -#: src/elflint.c:671 +#: src/elflint.c:680 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "sekcja [%2d] \"%s\": nie można uzyskać symbolu %zu: %s\n" -#: src/elflint.c:680 +#: src/elflint.c:689 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: nieprawidłowa wartość nazwy\n" -#: src/elflint.c:694 +#: src/elflint.c:704 #, c-format msgid "" "section [%2d] '%s': symbol %zu: too large section index but no extended " @@ -1403,7 +1474,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: za duży indeks sekcji, ale nie posiada " "sekcji rozszerzonych indeksów sekcji\n" -#: src/elflint.c:700 +#: src/elflint.c:710 #, c-format msgid "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " @@ -1412,28 +1483,28 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: XINDEX użyty dla indeksu, który zmieściłby " "się w st_shndx (%)\n" -#: src/elflint.c:712 +#: src/elflint.c:722 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid section index\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: nieprawidłowy indeks sekcji\n" -#: src/elflint.c:720 +#: src/elflint.c:730 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown type\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: nieznany typ\n" -#: src/elflint.c:726 +#: src/elflint.c:736 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: nieznane dowiązanie symbolu\n" -#: src/elflint.c:731 +#: src/elflint.c:741 #, c-format msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" msgstr "" "sekcja [%2d] \"%s\": symbol %zu: unikalny symbol nie jest typem obiektu\n" -#: src/elflint.c:739 +#: src/elflint.c:749 #, c-format msgid "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" @@ -1441,23 +1512,23 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: COMMON jest dozwolone tylko w plikach " "relokowalnych\n" -#: src/elflint.c:743 +#: src/elflint.c:753 #, c-format msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: lokalne symbole COMMON to nonsens\n" -#: src/elflint.c:747 +#: src/elflint.c:757 #, c-format msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" msgstr "sekcja [%2d] \"%s\": symbol %zu: funkcja w sekcji COMMON to nonsens\n" -#: src/elflint.c:779 +#: 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:785 src/elflint.c:810 src/elflint.c:853 +#: 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 " @@ -1466,7 +1537,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu nie mieści się w całości we wskazywanej " "sekcji [%2d] \"%s\"\n" -#: src/elflint.c:794 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1475,7 +1546,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: wskazywana sekcja [%2d] \"%s\" nie posiada " "ustawionej flagi SHF_TLS\n" -#: src/elflint.c:804 src/elflint.c:846 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1484,7 +1555,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: st_value spoza zakresu wskazywanej sekcji " "[%2d] \"%s\"\n" -#: src/elflint.c:831 +#: src/elflint.c:856 #, c-format msgid "" "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" @@ -1492,7 +1563,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: symbol TLS, ale brak wpisu TLS nagłówka " "programu\n" -#: src/elflint.c:839 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1501,7 +1572,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: st_value pomija wskazywaną sekcję [%2d] \"%s" "\"\n" -#: src/elflint.c:866 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1510,7 +1581,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: lokalny symbol spoza zakresu określonego w " "sh_info\n" -#: src/elflint.c:873 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1519,12 +1590,12 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: nielokalny symbol spoza zakresu określonego " "w sh_info\n" -#: src/elflint.c:880 +#: 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:930 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1533,7 +1604,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol _GLOBAL_OFFSET_TABLE_ odnosi się do błędnej " "sekcji [%2d]\n" -#: src/elflint.c:937 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1542,7 +1613,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol _GLOBAL_OFFSET_TABLE_ odnosi się do sekcji [%2d] " "\"%s\"\n" -#: src/elflint.c:953 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -1551,7 +1622,7 @@ msgstr "" "sekcja [%2d] \"%s\": wartość symbolu _GLOBAL_OFFSET_TABLE_ %# nie " "pasuje do adresu sekcji %s %#\n" -#: src/elflint.c:960 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -1560,7 +1631,7 @@ msgstr "" "sekcja [%2d] \"%s\": rozmiar symbolu _GLOBAL_OFFSET_TABLE_ % nie " "pasuje do rozmiaru sekcji %s %\n" -#: src/elflint.c:968 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1569,7 +1640,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol _GLOBAL_OFFSET_TABLE_ istnieje, ale brak sekcji ." "got\n" -#: src/elflint.c:984 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -1578,7 +1649,7 @@ msgstr "" "sekcja [%2d] \"%s\": wartość symbolu _DYNAMIC_ %# nie pasuje do " "adresu segmentu dynamicznego %#\n" -#: src/elflint.c:991 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -1587,7 +1658,7 @@ msgstr "" "sekcja [%2d] \"%s\": rozmiar symbolu _DYNAMIC_ % nie pasuje do " "rozmiaru segmentu dynamicznego %\n" -#: src/elflint.c:1004 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1596,22 +1667,22 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %zu: symbol w dynamicznej tabeli symboli z " "niedomyślną widocznością\n" -#: src/elflint.c:1008 +#: 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:1053 +#: 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:1062 src/elflint.c:1114 +#: 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:1087 src/elflint.c:1139 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1620,7 +1691,7 @@ msgstr "" "sekcja [%2d] \"%s\": relokacje względne po indeksie %d podanym przez " "DT_RELCOUNT\n" -#: src/elflint.c:1093 src/elflint.c:1145 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1629,50 +1700,50 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja bezwzględna pod indeksem %zu; DT_RELCOUNT " "podał %d relokacji względnych\n" -#: src/elflint.c:1105 +#: 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:1187 +#: 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:1200 +#: 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:1208 +#: 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:1215 +#: 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:1222 +#: 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:1282 +#: 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:1309 +#: 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:1317 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1681,12 +1752,12 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja %zu: typ relokacji nieprawidłowy dla tego " "typu pliku\n" -#: src/elflint.c:1325 +#: 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:1343 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -1695,12 +1766,12 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja %zu: z %s można użyć tylko symbolu " "\"_GLOBAL_OFFSET_TABLE_\"\n" -#: src/elflint.c:1360 +#: 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:1375 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1709,7 +1780,7 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja %zu: relokacja kopii względem symbolu typu " "%s\n" -#: src/elflint.c:1396 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1718,60 +1789,60 @@ msgstr "" "sekcja [%2d] \"%s\": relokacja %zu: sekcja tylko do odczytu została " "zmodyfikowana, ale nie ustawiono flagi relokacji tekstu\n" -#: src/elflint.c:1411 +#: 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:1450 src/elflint.c:1500 +#: 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:1576 +#: 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:1594 +#: 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:1599 src/elflint.c:1882 +#: 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:1609 +#: 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:1617 +#: 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:1624 +#: 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:1635 +#: 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:1645 +#: 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:1663 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" @@ -1779,7 +1850,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %zu: wartość DT_PLTREL musi wynosić DT_REL lub " "DT_RELA\n" -#: src/elflint.c:1676 +#: src/elflint.c:1710 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -1788,7 +1859,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %zu: wskaźnik nie pasuje do adresu sekcji [%2d] " "\"%s\" wskazywanej przez sh_link\n" -#: src/elflint.c:1719 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" @@ -1796,7 +1867,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %zu: wartość %s musi wskazywać na wczytany " "segment\n" -#: src/elflint.c:1734 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -1805,48 +1876,48 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %zu: wartość %s musi być prawidłowym offsetem w " "sekcji [%2d] \"%s\"\n" -#: src/elflint.c:1754 src/elflint.c:1782 +#: 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:1766 +#: 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:1775 +#: 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:1790 src/elflint.c:1797 +#: 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:1807 src/elflint.c:1811 +#: 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:1817 +#: 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:1828 src/elflint.c:1832 src/elflint.c:1836 src/elflint.c:1840 +#: 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:1852 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" @@ -1854,7 +1925,7 @@ msgstr "" "sekcja [%2d] \"%s\": tylko pliki relokowalne mogą mieć rozszerzoną sekcję " "indeksów\n" -#: src/elflint.c:1862 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" @@ -1862,24 +1933,24 @@ msgstr "" "sekcja [%2d] \"%s\": sekcja rozszerzonych indeksów sekcji nie dla tabeli " "symboli\n" -#: src/elflint.c:1867 +#: 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:1870 +#: 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:1877 +#: 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:1892 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -1888,24 +1959,24 @@ msgstr "" "sekcja [%2d] \"%s\": rozszerzony indeks sekcji w sekcji [%2zu] \"%s\" " "odwołuje się do tej samej tabeli symboli\n" -#: src/elflint.c:1903 +#: 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:1915 +#: 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:1920 +#: src/elflint.c:1962 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" "rozszerzony indeks sekcji wynosi %, ale indeks symbolu nie wynosi " "XINDEX\n" -#: src/elflint.c:1936 src/elflint.c:1977 +#: 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" @@ -1913,52 +1984,52 @@ msgstr "" "sekcja [%2d] \"%s\": sekcja tabeli mieszającej jest za mała (%ld, oczekiwano " "%ld)\n" -#: src/elflint.c:1948 src/elflint.c:1989 +#: 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:1957 src/elflint.c:1998 +#: 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:1963 +#: 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:2004 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" "sekcja [%2d] \"%s\": odwołanie do łańcucha skrótu % jest spoza " "zakresu\n" -#: src/elflint.c:2019 +#: 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:2030 -#, c-format +#: src/elflint.c:2092 +#, fuzzy, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" msgstr "" "sekcja [%2d] \"%s\": sekcja tabeli mieszającej jest za mała (%ld, oczekiwano " "co najmniej %ld)\n" -#: src/elflint.c:2038 +#: 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:2070 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" @@ -1966,7 +2037,7 @@ msgstr "" "sekcja [%2d] \"%s\": łańcuch mieszający dla kubełka %zu jest mniejszy niż " "przesunięcie indeksu symboli\n" -#: src/elflint.c:2091 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -1975,7 +2046,7 @@ msgstr "" "sekcja [%2d] \"%s\": symbol %u wskazywany w łańcuchu dla kubełka %zu jest " "nieokreślony\n" -#: src/elflint.c:2102 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" @@ -1983,13 +2054,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:2133 +#: 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:2138 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" @@ -1997,36 +2068,36 @@ msgstr "" "sekcja [%2d] \"%s\": odwołanie do symbolu w łańcuchu dla kubełka %zu jest " "spoza zakresu\n" -#: src/elflint.c:2144 +#: 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:2157 +#: 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:2175 +#: 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:2183 +#: 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:2188 +#: 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:2193 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2035,18 +2106,18 @@ msgstr "" "sekcja [%2d] \"%s\": tabela mieszająca nie posiada miejsca nawet na " "początkowe wpisy administracyjne\n" -#: src/elflint.c:2241 +#: 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:2319 src/elflint.c:2323 +#: 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:2330 +#: src/elflint.c:2392 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2055,7 +2126,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:2342 +#: src/elflint.c:2404 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2064,12 +2135,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:2358 +#: 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:2378 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" @@ -2077,92 +2148,92 @@ msgstr "" "sekcja [%2d] \"%s\": w plikach obiektów relokowalnych dozwolone są tylko " "grupy sekcji\n" -#: src/elflint.c:2389 +#: 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:2394 +#: 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:2400 +#: 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:2405 +#: 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:2412 +#: 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:2417 +#: 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:2423 +#: 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:2429 +#: 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:2438 +#: 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" +"sekcja [%2d] \"%s\": rozmiar sekcji nie jest wielokrotnością " +"sizeof(Elf32_Word)\n" -#: src/elflint.c:2443 +#: 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:2449 +#: 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:2453 +#: 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:2464 +#: 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:2476 +#: 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:2485 +#: 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:2492 +#: 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:2498 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " @@ -2171,12 +2242,12 @@ msgstr "" "sekcja [%2d] \"%s\": element %Zu odwołuje się do sekcji [%2d] \"%s\" bez " "flagi SHF_GROUP\n" -#: src/elflint.c:2505 +#: 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:2694 +#: src/elflint.c:2756 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2185,7 +2256,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:2705 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2194,78 +2265,78 @@ msgstr "" "sekcja [%2d] \"%s\" posiada inną liczbę wpisów niż tabela symboli [%2d] \"%s" "\"\n" -#: src/elflint.c:2721 +#: 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:2737 +#: 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:2745 +#: 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:2759 +#: 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:2764 +#: 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:2774 +#: 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:2826 +#: 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:2834 src/elflint.c:2963 +#: 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:2857 src/elflint.c:3015 +#: 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:2863 src/elflint.c:3021 +#: 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:2871 +#: 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:2879 +#: 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:2891 +#: 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:2898 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2274,7 +2345,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis dodatkowy %d do wpisu %d posiada nieprawidłowe " "odniesienie do nazwy\n" -#: src/elflint.c:2905 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2283,7 +2354,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis dodatkowy %d do wpisu %d posiada błędną wartość " "skrótu: %#x, oczekiwano %#x\n" -#: src/elflint.c:2915 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2292,7 +2363,7 @@ msgstr "" "sekcja [%2d] \"%s\": wpis dodatkowy %d do wpisu %d posiada powtórzoną nazwę " "wersji \"%s\"\n" -#: src/elflint.c:2926 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" @@ -2300,52 +2371,52 @@ msgstr "" "sekcja [%2d] \"%s\": wpis dodatkowy %d do wpisu %d posiada błędne następne " "pole\n" -#: src/elflint.c:2942 src/elflint.c:3100 +#: 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:2955 +#: 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:3000 +#: 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:3004 +#: 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:3010 +#: 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:3034 +#: 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:3041 +#: 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:3050 +#: 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:3069 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" @@ -2353,52 +2424,52 @@ msgstr "" "sekcja [%2d] \"%s\": wpis %d posiada nieprawidłowe odniesienie do nazwy w " "danych dodatkowych\n" -#: src/elflint.c:3084 +#: 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:3106 +#: 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:3122 +#: 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:3135 +#: 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:3156 +#: 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:3172 +#: 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:3181 +#: 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:3193 +#: 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:3210 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -2406,12 +2477,12 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: niekończące się ULEB128 w znaczniku " "podsekcji atrybutów\n" -#: src/elflint.c:3219 +#: 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:3228 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -2419,7 +2490,7 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: zerowej długości pole w podsekcji " "atrybutów\n" -#: src/elflint.c:3241 +#: src/elflint.c:3304 #, c-format msgid "" "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" @@ -2427,7 +2498,7 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: nieprawidłowa długość w podsekcji " "atrybutów\n" -#: src/elflint.c:3252 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -2435,24 +2506,24 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: podsekcja atrybutów posiada nieoczekiwany " "znacznik %u\n" -#: src/elflint.c:3270 +#: 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:3281 +#: 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:3294 +#: 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:3298 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" @@ -2460,12 +2531,12 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: atrybut %s posiada nierozpoznaną wartość " "%\n" -#: src/elflint.c:3308 +#: 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:3314 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -2473,47 +2544,47 @@ msgstr "" "sekcja [%2d] \"%s\": offset %zu: dodatkowe bajty po ostatniej sekcji " "atrybutów\n" -#: src/elflint.c:3403 +#: 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:3407 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "sekcja zerowa posiada niezerową nazwę\n" -#: src/elflint.c:3409 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "sekcja zerowa posiada niezerowy typ\n" -#: src/elflint.c:3411 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "sekcja zerowa posiada niezerowe flagi\n" -#: src/elflint.c:3413 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "sekcja zerowa posiada niezerowy adres\n" -#: src/elflint.c:3415 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "sekcja zerowa posiada niezerowy offset\n" -#: src/elflint.c:3417 +#: 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:3419 +#: 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:3422 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2522,7 +2593,7 @@ msgstr "" "sekcja zerowa posiada niezerową wartość rozmiaru, a nagłówek ELF posiada " "niezerową wartość shnum\n" -#: src/elflint.c:3426 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2531,7 +2602,7 @@ msgstr "" "sekcja zerowa posiada niezerową wartość dowiązań, a nagłówek ELF nie " "wskazuje przepełnienia w shstrndx\n" -#: src/elflint.c:3430 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2540,27 +2611,27 @@ msgstr "" "sekcja zerowa posiada niezerową wartość dowiązań, a nagłówek ELF nie " "wskazuje przepełnienia w phnum\n" -#: src/elflint.c:3447 +#: 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:3456 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "sekcja [%2zu]: nieprawidłowa nazwa\n" -#: src/elflint.c:3483 +#: 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:3499 +#: 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:3516 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -2568,12 +2639,12 @@ msgstr "" "sekcja [%2zu] \"%s\" posiada błędne flagi: oczekiwano %s i być może %s, jest " "%s\n" -#: src/elflint.c:3534 +#: 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:3540 src/elflint.c:3572 +#: 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" @@ -2581,7 +2652,7 @@ msgstr "" "sekcja [%2zu] \"%s\" posiada flagę SHF_ALLOC, ale nie posiada segmentu " "wczytywalnego\n" -#: src/elflint.c:3545 src/elflint.c:3577 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -2590,7 +2661,7 @@ msgstr "" "sekcja [%2zu] \"%s\" nie posiada flagi SHF_ALLOC, ale są segmenty " "wczytywalne\n" -#: src/elflint.c:3553 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -2598,23 +2669,23 @@ msgstr "" "sekcja [%2zu] \"%s\" jest tabelą indeksów sekcji rozszerzeń w pliku " "nieobiektowym\n" -#: src/elflint.c:3596 +#: 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:3601 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "nie można uzyskać nagłówka sekcji\n" -#: src/elflint.c:3611 +#: 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:3625 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" @@ -2622,56 +2693,56 @@ msgstr "" "sekcja [%2zu] \"%s\" zawiera nieprawidłowe flagi specyficzne dla procesora " "%#\n" -#: src/elflint.c:3632 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "sekcja [%2zu] \"%s\" zawiera nieznane flagi %#\n" -#: src/elflint.c:3640 +#: 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:3648 +#: 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:3653 +#: 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:3660 +#: 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:3665 +#: 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:3683 +#: 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:3692 +#: 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:3721 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -2680,7 +2751,7 @@ msgstr "" "sekcja [%2zu] \"%s\" nie jest w całości zawarta w segmencie wpisu %d " "nagłówka programu\n" -#: src/elflint.c:3729 +#: src/elflint.c:3792 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -2689,7 +2760,7 @@ msgstr "" "sekcja [%2zu] \"%s\" posiada typ NOBITS, a jest odczytywana z pliku w " "segmencie wpisu %d nagłówka programu\n" -#: src/elflint.c:3738 +#: src/elflint.c:3801 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -2698,17 +2769,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:3749 +#: 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:3759 +#: 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:3769 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -2716,7 +2787,7 @@ msgstr "" "sekcja [%2zu] \"%s\": posiada flagę alloc, ale sekcja nie jest w żadnym " "segmencie wczytywalnym\n" -#: src/elflint.c:3775 +#: src/elflint.c:3838 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -2725,7 +2796,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:3783 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -2733,17 +2804,17 @@ msgstr "" "sekcja [%2zu] \"%s\": pliki relokowalne nie mogą posiadać tabeli symboli " "dynamicznych\n" -#: src/elflint.c:3834 +#: 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:3857 +#: 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:3868 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" @@ -2751,14 +2822,14 @@ msgstr "" "wczytywalny segment [%u] jest wykonywalny, ale nie zawiera wykonywalnych " "sekcji\n" -#: src/elflint.c:3874 +#: 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:3885 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -2767,23 +2838,23 @@ msgstr "" "brak sekcji .gnu.versym, ale istnieje sekcja .gnu.versym_d lub .gnu." "versym_r\n" -#: src/elflint.c:3898 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "powtórzony indeks wersji %d\n" -#: src/elflint.c:3912 +#: 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:3961 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" "phdr[%d]: nieznany typ notatki pliku core % pod offsetem %\n" -#: src/elflint.c:3965 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" @@ -2791,13 +2862,13 @@ msgstr "" "phdr[%2d]: \"%s\": nieznany typ notatki pliku core % pod offsetem " "%Zu\n" -#: src/elflint.c:3988 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" msgstr "" "phdr[%d]: nieznany typ notatki pliku obiektu % pod offsetem %Zu\n" -#: src/elflint.c:3992 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" @@ -2805,37 +2876,37 @@ msgstr "" "phdr[%d]: \"%s\": nieznany typ notatki pliku obiektu % pod offsetem " "%Zu\n" -#: src/elflint.c:4009 +#: 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:4028 +#: 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:4031 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: dodatkowe % bajtów po ostatniej notatce\n" -#: src/elflint.c:4052 +#: 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:4059 +#: 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:4062 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "sekcja [%2d] \"%s\": dodatkowe % bajtów po ostatniej notatce\n" -#: src/elflint.c:4080 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -2843,129 +2914,129 @@ msgstr "" "tylko pliki wykonywalne, obiekty współdzielone i pliki core mogą posiadać " "nagłówki programu\n" -#: src/elflint.c:4095 +#: 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:4104 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "wpis nagłówka programu %d: nieznany typ wpisu nagłówka programu %#\n" -#: src/elflint.c:4115 +#: 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:4123 +#: 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:4130 +#: 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:4144 +#: 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:4147 +#: 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:4157 +#: 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:4178 +#: 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:4181 +#: 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:4189 src/elflint.c:4212 +#: 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:4218 +#: 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:4242 +#: 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:4245 +#: 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:4258 +#: 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:4266 +#: 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:4269 +#: 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:4273 +#: 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:4276 +#: 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:4281 +#: 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:4284 +#: 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:4295 +#: 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:4302 +#: 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:4305 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -2974,7 +3045,7 @@ msgstr "" "wpis nagłówka programu %d: offset w pliku i adres wirtualny nie są " "wielokrotnością wyrównania\n" -#: src/elflint.c:4318 +#: src/elflint.c:4381 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -2983,12 +3054,12 @@ msgstr "" "plik wykonywalny/DSO z sekcją .eh_frame_hdr nie posiada wpisu nagłówka " "programu PT_GNU_EH_FRAME" -#: src/elflint.c:4352 +#: 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:4378 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "flaga relokacji tekstu jest ustawiona, ale niepotrzebna\n" @@ -3321,7 +3392,7 @@ msgstr "Ustawia styl sum kontrolnych na sysv, gnu lub oba." #: src/ld.c:167 msgid "Generate build ID note (md5, sha1 (default), uuid)." -msgstr "Tworzy wpis identyfikatora budowania (md5, sha1 (domyślnie), uuid)." +msgstr "Tworzy wpis identyfikatora kopii (md5, sha1 (domyślnie), uuid)." #: src/ld.c:169 msgid "Linker Operation Control:" @@ -3508,7 +3579,8 @@ msgid "Warning: size of `%s' changed from % in %s to % in %s" msgstr "" "Ostrzeżenie: rozmiar \"%s\" zmienił się z % w %s na % w %s" -#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:640 src/strip.c:562 +#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 +#: src/readelf.c:829 src/strip.c:563 #, c-format msgid "cannot determine number of sections: %s" msgstr "nie można określić liczby sekcji: %s" @@ -3672,7 +3744,7 @@ msgstr "nie można utworzyć sekcji tabeli mieszającej dla pliku wyjściowego: #: src/ldgeneric.c:4104 #, c-format msgid "cannot create build ID section: %s" -msgstr "nie można utworzyć sekcji identyfikatora budowania: %s" +msgstr "nie można utworzyć sekcji identyfikatora kopii: %s" #: src/ldgeneric.c:4181 #, c-format @@ -3747,7 +3819,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:1818 #, c-format msgid "cannot update ELF header: %s" msgstr "nie można zaktualizować nagłówka ELF: %s" @@ -3876,9 +3948,8 @@ msgid "Use RADIX for printing symbol values" msgstr "Używa BAZY do wypisywania wartości symboli" #: src/nm.c:87 -#, fuzzy msgid "Mark special symbols" -msgstr "Oznacza słabe symbole" +msgstr "Oznacza specjalne symbole" #: src/nm.c:89 msgid "Print size of defined symbols" @@ -3902,16 +3973,15 @@ msgstr "Odwraca kierunek porządkowania" #: src/nm.c:98 msgid "Decode low-level symbol names into source code names" -msgstr "" +msgstr "Dekoduje niskopoziomowe nazwy symboli na nazwy kodu źródłowego" #: src/nm.c:105 msgid "List symbols from FILEs (a.out by default)." msgstr "Wyświetla listę symboli z PLIKU (domyślnie a.out)." #: src/nm.c:116 src/objdump.c:80 -#, fuzzy msgid "Output formatting" -msgstr "Format wyjścia:" +msgstr "Formatowanie wyjścia" #: src/nm.c:140 src/objdump.c:104 src/size.c:109 src/strip.c:120 #, c-format @@ -3919,7 +3989,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:2124 +#: src/strip.c:2155 #, c-format msgid "while closing '%s'" msgstr "podczas zamykania \"%s\"" @@ -3930,13 +4000,12 @@ msgid "%s: File format not recognized" msgstr "%s: nie rozpoznano formatu pliku" #: src/nm.c:460 -#, fuzzy msgid "" "\n" "Archive index:\n" msgstr "" "\n" -"Indeks archiwum:" +"Indeks archiwum:\n" #: src/nm.c:469 #, c-format @@ -3963,17 +4032,17 @@ 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:1156 src/objdump.c:787 src/readelf.c:896 -#: src/readelf.c:1039 src/readelf.c:1187 src/readelf.c:1369 src/readelf.c:1569 -#: src/readelf.c:1755 src/readelf.c:1965 src/readelf.c:2219 src/readelf.c:2285 -#: src/readelf.c:2363 src/readelf.c:2861 src/readelf.c:2897 src/readelf.c:2959 -#: src/readelf.c:7270 src/readelf.c:8176 src/readelf.c:8323 src/readelf.c:8391 -#: src/size.c:417 src/size.c:491 src/strip.c:502 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 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:2196 src/readelf.c:2454 +#: src/readelf.c:2524 src/readelf.c:2606 src/readelf.c:3117 src/readelf.c:3153 +#: src/readelf.c:3216 src/readelf.c:7920 src/readelf.c:9002 src/readelf.c:9149 +#: src/readelf.c:9217 src/size.c:417 src/size.c:487 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" -#: src/nm.c:782 +#: src/nm.c:784 #, c-format msgid "" "\n" @@ -3986,7 +4055,7 @@ msgstr "" "Symbole z %s:\n" "\n" -#: src/nm.c:785 +#: src/nm.c:787 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3995,22 +4064,22 @@ msgstr "" "%*s%-*s %-*s Klasa Typ %-*s %*s Sekcja\n" "\n" -#: src/nm.c:1166 +#: src/nm.c:1173 #, c-format msgid "%s: entry size in section `%s' is not what we expect" msgstr "%s: rozmiar wpisu w sekcji \"%s\" nie jest tym, czego oczekiwano" -#: src/nm.c:1170 +#: src/nm.c:1177 #, c-format msgid "%s: size of section `%s' is not multiple of entry size" msgstr "%s: rozmiar sekcji \"%s\" nie jest wielokrotnością rozmiaru wpisu" -#: src/nm.c:1428 +#: src/nm.c:1435 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: nieprawidłowe działanie" -#: src/nm.c:1485 +#: src/nm.c:1492 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: brak symboli" @@ -4032,9 +4101,8 @@ msgid "Display assembler code of executable sections" msgstr "Wyświetla kod asemblera sekcji wykonywalnych" #: src/objdump.c:60 -#, fuzzy msgid "Output content selection:" -msgstr "Wybór opcji wyjścia:" +msgstr "Wybór zawartości wyjścia:" #: src/objdump.c:62 msgid "Only display information for section NAME." @@ -4044,7 +4112,7 @@ msgstr "Wyświetla tylko informacje o sekcji NAZWA." msgid "Show information from FILEs (a.out by default)." msgstr "Wyświetla informacje z PLIKÓW (domyślnie a.out)." -#: src/objdump.c:236 src/readelf.c:439 +#: src/objdump.c:236 src/readelf.c:473 msgid "No operation specified.\n" msgstr "Nie podano działania.\n" @@ -4053,11 +4121,11 @@ msgstr "Nie podano działania.\n" msgid "while close `%s'" msgstr "podczas zamykania \"%s\"" -#: src/objdump.c:379 src/readelf.c:1664 src/readelf.c:1838 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2069 msgid "INVALID SYMBOL" msgstr "NIEPRAWIDŁOWY SYMBOL" -#: src/objdump.c:394 src/readelf.c:1695 src/readelf.c:1871 +#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2102 msgid "INVALID SECTION" msgstr "NIEPRAWIDŁOWA SEKCJA" @@ -4087,9 +4155,9 @@ msgid "cannot disassemble" msgstr "nie można deasemblować" #: src/objdump.c:736 -#, fuzzy, c-format +#, c-format msgid "cannot allocate memory" -msgstr "nie można przydzielić sekcji PLT: %s" +msgstr "nie można przydzielić pamięci" #: src/ranlib.c:66 msgid "Generate an index to speed access to archives." @@ -4114,181 +4182,243 @@ msgstr "\"%s\" nie jest archiwum" msgid "error while freeing sub-ELF descriptor: %s" msgstr "błąd podczas zwalniania deskryptora pod-ELF: %s" -#: src/readelf.c:67 +#: src/readelf.c:71 +#, fuzzy +msgid "ELF input selection:" +msgstr "Wybór wyjścia ELF:" + +#: src/readelf.c:73 +msgid "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" +msgstr "" + +#: src/readelf.c:75 msgid "ELF output selection:" msgstr "Wybór wyjścia ELF:" -#: src/readelf.c:69 +#: src/readelf.c:77 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "Wszystkie te plus -p .strtab -p .dynstr -p .comment" -#: src/readelf.c:70 +#: src/readelf.c:78 msgid "Display the dynamic segment" msgstr "Wyświetla segment dynamiczny" -#: src/readelf.c:71 +#: src/readelf.c:79 msgid "Display the ELF file header" msgstr "Wyświetla nagłówek pliku ELF" -#: src/readelf.c:73 +#: src/readelf.c:81 msgid "Display histogram of bucket list lengths" msgstr "Wyświetla histogram długości list kubełków" -#: src/readelf.c:74 +#: src/readelf.c:82 msgid "Display the program headers" msgstr "Wyświetla nagłówki programu" -#: src/readelf.c:76 +#: src/readelf.c:84 msgid "Display relocations" msgstr "Wyświetla relokacje" -#: src/readelf.c:77 +#: src/readelf.c:85 msgid "Display the sections' headers" msgstr "Wyświetla nagłówków sekcji" -#: src/readelf.c:79 +#: src/readelf.c:87 msgid "Display the symbol table" msgstr "Wyświetla tabelę symboli" -#: src/readelf.c:80 +#: src/readelf.c:88 msgid "Display versioning information" msgstr "Wyświetla informacje o wersjonowaniu" -#: src/readelf.c:81 +#: src/readelf.c:89 msgid "Display the ELF notes" msgstr "Wyświetla notatki ELF" -#: src/readelf.c:83 +#: src/readelf.c:91 msgid "Display architecture specific information, if any" msgstr "Wyświetla informacje specyficzne dla architektury, jeśli są" -#: src/readelf.c:85 +#: src/readelf.c:93 msgid "Display sections for exception handling" msgstr "Wyświetla sekcje do obsługi wyjątków" -#: src/readelf.c:87 +#: src/readelf.c:95 msgid "Additional output selection:" msgstr "Dodatkowy wybór wyjścia:" -#: src/readelf.c:89 +#: src/readelf.c:97 #, fuzzy msgid "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" msgstr "" "Wyświetla zawartość sekcji DWARF. SEKCJA może być jednym z abbrev, aranges, " -"frame, info, loc, line, ranges, pubnames, str, macinfo lub exception." +"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro lub " +"exception." -#: src/readelf.c:93 +#: src/readelf.c:101 msgid "Dump the uninterpreted contents of SECTION, by number or name" msgstr "Zrzuca niezinterpretowaną zawartość SEKCJI, według liczny lub nazwy" -#: src/readelf.c:95 +#: src/readelf.c:103 msgid "Print string contents of sections" msgstr "Wyświetla zawartość ciągów sekcji" -#: src/readelf.c:98 +#: src/readelf.c:106 msgid "Display the symbol index of an archive" msgstr "Wyświetla indeks symboli archiwum" -#: src/readelf.c:100 +#: src/readelf.c:108 msgid "Output control:" msgstr "Kontrola wyjścia:" -#: src/readelf.c:102 +#: src/readelf.c:110 msgid "Do not find symbol names for addresses in DWARF data" msgstr "Bez odnajdywania nazw symboli dla adresów w danych DWARF" -#: src/readelf.c:104 +#: src/readelf.c:112 +#, fuzzy +msgid "" +"Display just offsets instead of resolving values to addresses in DWARF data" +msgstr "Bez odnajdywania nazw symboli dla adresów w danych DWARF" + +#: src/readelf.c:114 msgid "Ignored for compatibility (lines always wide)" -msgstr "" +msgstr "Ignorowane dla zgodności (wiersze są zawsze szerokie)" -#: src/readelf.c:109 +#: src/readelf.c:119 msgid "Print information from ELF file in human-readable form." msgstr "Wyświetla informacje z pliku ELF w postaci czytelnej dla człowieka." -#: src/readelf.c:410 +#: src/readelf.c:441 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "Nieznana sekcja debugowania DWARF \"%s\".\n" -#: src/readelf.c:476 +#: src/readelf.c:520 src/readelf.c:631 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "nie można utworzyć deskryptora ELF: %s" -#: src/readelf.c:488 +#: src/readelf.c:545 src/readelf.c:1099 src/readelf.c:1269 #, c-format -msgid "'%s' is not an archive, cannot print archive index" -msgstr "\"%s\" nie jest archiwum, nie można wyświetlić indeksu archiwum" +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:9169 +#: src/unstrip.c:352 src/unstrip.c:383 src/unstrip.c:432 src/unstrip.c:540 +#: src/unstrip.c:557 src/unstrip.c:593 src/unstrip.c:791 src/unstrip.c:1059 +#: src/unstrip.c:1250 src/unstrip.c:1310 src/unstrip.c:1431 src/unstrip.c:1484 +#: src/unstrip.c:1591 src/unstrip.c:1780 +#, c-format +msgid "cannot get section header: %s" +msgstr "nie można uzyskać nagłówka sekcji: %s" + +#: src/readelf.c:562 +#, fuzzy, c-format +msgid "cannot get section name" +msgstr "nie można uzyskać nagłówka sekcji\n" + +#: src/readelf.c:571 src/readelf.c:5221 src/readelf.c:7414 src/readelf.c:7516 +#: src/readelf.c:7674 +#, c-format +msgid "cannot get %s content: %s" +msgstr "nie można uzyskać zwartości %s: %s" + +#: src/readelf.c:587 +#, fuzzy, c-format +msgid "cannot create temp file '%s'" +msgstr "nie można utworzyć nowego pliku \"%s\": %s" -#: src/readelf.c:493 +#: src/readelf.c:596 +#, fuzzy, c-format +msgid "cannot write section data" +msgstr "nie można odczytać danych sekcji: %s" + +#: src/readelf.c:602 src/readelf.c:619 src/readelf.c:648 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "błąd podczas zamykania deskryptora ELF: %s" -#: src/readelf.c:585 +#: src/readelf.c:609 +#, fuzzy, c-format +msgid "error while rewinding file descriptor" +msgstr "błąd podczas zamykania deskryptora ELF: %s" + +#: src/readelf.c:643 +#, c-format +msgid "'%s' is not an archive, cannot print archive index" +msgstr "\"%s\" nie jest archiwum, nie można wyświetlić indeksu archiwum" + +#: src/readelf.c:742 +#, fuzzy, c-format +msgid "No such section '%s' in '%s'" +msgstr "nie można odczytać notatki sekcji [%zu] \"%s\" w \"%s\": %s" + +#: src/readelf.c:769 #, c-format msgid "cannot stat input file" msgstr "nie można wykonać stat na pliku wejściowym" -#: src/readelf.c:587 +#: src/readelf.c:771 #, c-format msgid "input file is empty" msgstr "plik wejściowy jest pusty" -#: src/readelf.c:589 +#: src/readelf.c:773 #, c-format msgid "failed reading '%s': %s" msgstr "odczytanie \"%s\" nie powiodło się: %s" -#: src/readelf.c:625 +#: src/readelf.c:814 #, c-format msgid "cannot read ELF header: %s" msgstr "nie można odczytać nagłówka ELF: %s" -#: src/readelf.c:633 +#: src/readelf.c:822 #, c-format msgid "cannot create EBL handle" msgstr "nie można utworzyć uchwytu EBL" -#: src/readelf.c:646 +#: src/readelf.c:835 #, c-format msgid "cannot determine number of program headers: %s" msgstr "nie można określić liczby nagłówków programu: %s" -#: src/readelf.c:732 +#: src/readelf.c:921 msgid "NONE (None)" msgstr "NONE (żaden)" -#: src/readelf.c:733 +#: src/readelf.c:922 msgid "REL (Relocatable file)" msgstr "REL (plik relokowalny)" -#: src/readelf.c:734 +#: src/readelf.c:923 msgid "EXEC (Executable file)" msgstr "EXEC (plik wykonywalny)" -#: src/readelf.c:735 +#: src/readelf.c:924 msgid "DYN (Shared object file)" msgstr "DYN (plik obiektu współdzielonego)" -#: src/readelf.c:736 +#: src/readelf.c:925 msgid "CORE (Core file)" msgstr "CORE (plik core)" -#: src/readelf.c:741 +#: src/readelf.c:930 #, c-format msgid "OS Specific: (%x)\n" msgstr "Zależny od systemu: (%x)\n" -#: src/readelf.c:743 +#: src/readelf.c:932 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Zależny od procesora: (%x)\n" -#: src/readelf.c:753 +#: src/readelf.c:942 msgid "" "ELF Header:\n" " Magic: " @@ -4296,7 +4426,7 @@ msgstr "" "Nagłówek ELF:\n" " Magic: " -#: src/readelf.c:757 +#: src/readelf.c:946 #, c-format msgid "" "\n" @@ -4305,117 +4435,117 @@ msgstr "" "\n" " Klasa: %s\n" -#: src/readelf.c:762 +#: src/readelf.c:951 #, c-format msgid " Data: %s\n" msgstr " Dane: %s\n" -#: src/readelf.c:768 +#: src/readelf.c:957 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Wersja Ident: %hhd %s\n" -#: src/readelf.c:770 src/readelf.c:787 +#: src/readelf.c:959 src/readelf.c:976 msgid "(current)" msgstr "(bieżąca)" -#: src/readelf.c:774 +#: src/readelf.c:963 #, c-format msgid " OS/ABI: %s\n" msgstr " System operacyjny/ABI: %s\n" -#: src/readelf.c:777 +#: src/readelf.c:966 #, c-format msgid " ABI Version: %hhd\n" msgstr " Wersja ABI: %hhd\n" -#: src/readelf.c:780 +#: src/readelf.c:969 msgid " Type: " msgstr " Typ: " -#: src/readelf.c:783 +#: src/readelf.c:972 #, c-format msgid " Machine: %s\n" msgstr " Komputer: %s\n" -#: src/readelf.c:785 +#: src/readelf.c:974 #, c-format msgid " Version: %d %s\n" msgstr " Wersja: %d %s\n" -#: src/readelf.c:789 +#: src/readelf.c:978 #, c-format msgid " Entry point address: %#\n" msgstr " Adres punktu wejściowego: %#\n" -#: src/readelf.c:792 +#: src/readelf.c:981 #, c-format msgid " Start of program headers: % %s\n" msgstr " Początek nagłówków programu: % %s\n" -#: src/readelf.c:793 src/readelf.c:796 +#: src/readelf.c:982 src/readelf.c:985 msgid "(bytes into file)" msgstr "(bajtów w pliku)" -#: src/readelf.c:795 +#: src/readelf.c:984 #, c-format msgid " Start of section headers: % %s\n" msgstr " Początek nagłówków sekcji: % %s\n" -#: src/readelf.c:798 +#: src/readelf.c:987 #, c-format msgid " Flags: %s\n" msgstr " Flagi: %s\n" -#: src/readelf.c:801 +#: src/readelf.c:990 #, c-format msgid " Size of this header: % %s\n" msgstr " Rozmiar tego nagłówka: % %s\n" -#: src/readelf.c:802 src/readelf.c:805 src/readelf.c:822 +#: src/readelf.c:991 src/readelf.c:994 src/readelf.c:1011 msgid "(bytes)" msgstr "(bajtów)" -#: src/readelf.c:804 +#: src/readelf.c:993 #, c-format msgid " Size of program header entries: % %s\n" msgstr " Rozmiar wpisów nagłówka programu: % %s\n" -#: src/readelf.c:807 +#: src/readelf.c:996 #, c-format msgid " Number of program headers entries: %" msgstr " Liczba wpisów nagłówków programu: %" -#: src/readelf.c:814 +#: src/readelf.c:1003 #, c-format msgid " (% in [0].sh_info)" msgstr " (% w [0].sh_info)" -#: src/readelf.c:817 src/readelf.c:834 src/readelf.c:848 +#: src/readelf.c:1006 src/readelf.c:1023 src/readelf.c:1037 msgid " ([0] not available)" msgstr " ([0] niedostępny)" -#: src/readelf.c:821 +#: src/readelf.c:1010 #, c-format msgid " Size of section header entries: % %s\n" msgstr " Rozmiar wpisów nagłówka sekcji: % %s\n" -#: src/readelf.c:824 +#: src/readelf.c:1013 #, c-format msgid " Number of section headers entries: %" msgstr " Liczba wpisów nagłówków sekcji: %" -#: src/readelf.c:831 +#: src/readelf.c:1020 #, c-format msgid " (% in [0].sh_size)" msgstr " (% w [0].sh_size)" -#: src/readelf.c:844 +#: src/readelf.c:1033 #, c-format msgid " (% in [0].sh_link)" msgstr " (% w [0].sh_link)" -#: src/readelf.c:852 +#: src/readelf.c:1041 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4424,7 +4554,7 @@ msgstr "" " Indeks tabeli ciągów nagłówków sekcji: XINDEX%s\n" "\n" -#: src/readelf.c:856 +#: src/readelf.c:1045 #, c-format msgid "" " Section header string table index: %\n" @@ -4433,7 +4563,7 @@ msgstr "" " Indeks tabeli ciągów nagłówków sekcji: %\n" "\n" -#: src/readelf.c:888 +#: src/readelf.c:1077 #, c-format msgid "" "There are %d section headers, starting at offset %#:\n" @@ -4442,11 +4572,11 @@ msgstr "" "Jest %d nagłówków sekcji, rozpoczynających się od offsetu %#:\n" "\n" -#: src/readelf.c:898 +#: src/readelf.c:1087 msgid "Section Headers:" msgstr "Nagłówki sekcji:" -#: src/readelf.c:901 +#: src/readelf.c:1090 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4454,7 +4584,7 @@ msgstr "" "[Nr] Nazwa Typ Adres Offset Rozm ES Flagi Lk " "Inf Al" -#: src/readelf.c:903 +#: src/readelf.c:1092 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4462,32 +4592,18 @@ msgstr "" "[Nr] Nazwa Typ Adres Offset Rozmiar ES " "Flagi Lk Inf Al" -#: src/readelf.c:910 src/readelf.c:1063 -#, c-format -msgid "cannot get section: %s" -msgstr "nie można uzyskać sekcji: %s" - -#: src/readelf.c:917 src/readelf.c:1071 src/readelf.c:8343 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 -#, c-format -msgid "cannot get section header: %s" -msgstr "nie można uzyskać nagłówka sekcji: %s" - -#: src/readelf.c:975 +#: src/readelf.c:1164 msgid "Program Headers:" msgstr "Nagłówki programu:" -#: src/readelf.c:977 +#: src/readelf.c:1166 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Typ Offset AdresWirt AdresFiz RozmPlik RozmPam Flg " "Wyrównanie" -#: src/readelf.c:980 +#: src/readelf.c:1169 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4495,12 +4611,12 @@ msgstr "" " Typ Offset AdresWirtualny AdresFizyczny RozmPlik " "RozmPam Flg Wyrównanie" -#: src/readelf.c:1020 +#: src/readelf.c:1226 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Wywołanie interpretera programu: %s]\n" -#: src/readelf.c:1041 +#: src/readelf.c:1247 msgid "" "\n" " Section to Segment mapping:\n" @@ -4510,12 +4626,12 @@ msgstr "" " mapowanie sekcji do segmentów:\n" " Segment sekcji..." -#: src/readelf.c:1052 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1835 src/unstrip.c:1874 src/unstrip.c:1881 #, c-format msgid "cannot get program header: %s" msgstr "nie można uzyskać nagłówka programu: %s" -#: src/readelf.c:1193 +#: src/readelf.c:1401 #, c-format msgid "" "\n" @@ -4533,7 +4649,7 @@ msgstr[2] "" "\n" "Grupa sekcji COMDAT [%2zu] \"%s\" z podpisem \"%s\" zawiera %zu wpisów:\n" -#: src/readelf.c:1198 +#: src/readelf.c:1406 #, c-format msgid "" "\n" @@ -4551,15 +4667,21 @@ msgstr[2] "" "\n" "Grupa sekcji [%2zu] \"%s\" z podpisem \"%s\" zawiera %zu wpisów:\n" -#: src/readelf.c:1206 +#: src/readelf.c:1414 msgid "" msgstr "" -#: src/readelf.c:1220 +#: src/readelf.c:1428 msgid "" msgstr "" -#: src/readelf.c:1371 +#: src/readelf.c:1585 src/readelf.c:2202 src/readelf.c:2460 src/readelf.c:2530 +#: src/readelf.c:2812 src/readelf.c:2885 src/readelf.c:4488 +#, fuzzy, c-format +msgid "invalid sh_link value in section %Zu" +msgstr "nieprawidłowa sekcja .debug_line" + +#: src/readelf.c:1588 #, c-format msgid "" "\n" @@ -4585,36 +4707,36 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " "'%s'\n" -#: src/readelf.c:1383 +#: src/readelf.c:1598 msgid " Type Value\n" msgstr " Typ Wartość\n" -#: src/readelf.c:1407 +#: src/readelf.c:1622 #, c-format msgid "Shared library: [%s]\n" msgstr "Biblioteka współdzielona: [%s]\n" -#: src/readelf.c:1412 +#: src/readelf.c:1627 #, c-format msgid "Library soname: [%s]\n" msgstr "soname biblioteki: [%s]\n" -#: src/readelf.c:1417 +#: src/readelf.c:1632 #, c-format msgid "Library rpath: [%s]\n" msgstr "rpath biblioteki: [%s]\n" -#: src/readelf.c:1422 +#: src/readelf.c:1637 #, c-format msgid "Library runpath: [%s]\n" msgstr "runpath biblioteki: [%s]\n" -#: src/readelf.c:1442 +#: src/readelf.c:1657 #, c-format msgid "% (bytes)\n" msgstr "% (bajtów)\n" -#: src/readelf.c:1554 src/readelf.c:1740 +#: src/readelf.c:1770 src/readelf.c:1957 #, c-format msgid "" "\n" @@ -4623,7 +4745,7 @@ msgstr "" "\n" "Nieprawidłowa tabela symboli pod offsetem %#0\n" -#: src/readelf.c:1572 src/readelf.c:1757 +#: src/readelf.c:1788 src/readelf.c:1975 #, c-format msgid "" "\n" @@ -4646,7 +4768,7 @@ msgstr[2] "" "Sekcja relokacji [%2zu] \"%s\" dla sekcji [%2u] \"%s\" pod offsetem " "%#0 zawiera %d wpisów:\n" -#: src/readelf.c:1587 +#: src/readelf.c:1803 src/readelf.c:1990 #, c-format msgid "" "\n" @@ -4664,30 +4786,30 @@ msgstr[2] "" "\n" "Sekcja relokacji [%2u] \"%s\" pod offsetem %#0 zawiera %d wpisów:\n" -#: src/readelf.c:1597 +#: src/readelf.c:1813 msgid " Offset Type Value Name\n" msgstr " Offset Typ Wartość Nazwa\n" -#: src/readelf.c:1599 +#: src/readelf.c:1815 msgid " Offset Type Value Name\n" msgstr " Offset Typ Wartość Nazwa\n" -#: src/readelf.c:1652 src/readelf.c:1663 src/readelf.c:1676 src/readelf.c:1694 -#: src/readelf.c:1706 src/readelf.c:1825 src/readelf.c:1837 src/readelf.c:1851 -#: src/readelf.c:1870 src/readelf.c:1883 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 +#: src/readelf.c:1922 src/readelf.c:2056 src/readelf.c:2068 src/readelf.c:2082 +#: src/readelf.c:2101 src/readelf.c:2114 msgid "" msgstr "" -#: src/readelf.c:1769 +#: src/readelf.c:2000 msgid " Offset Type Value Addend Name\n" msgstr " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:1771 +#: src/readelf.c:2002 msgid " Offset Type Value Addend Name\n" msgstr "" " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:1972 +#: src/readelf.c:2210 #, c-format msgid "" "\n" @@ -4705,7 +4827,7 @@ msgstr[2] "" "\n" "Tabela symboli [%2u] \"%s\" zawiera %u wpisów:\n" -#: src/readelf.c:1978 +#: src/readelf.c:2215 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4713,33 +4835,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:1988 +#: src/readelf.c:2223 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n" -#: src/readelf.c:1990 +#: src/readelf.c:2225 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n" -#: src/readelf.c:2010 +#: src/readelf.c:2245 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2098 +#: src/readelf.c:2333 #, c-format msgid "bad dynamic symbol" msgstr "błędny symbol dynamiczny" -#: src/readelf.c:2180 +#: src/readelf.c:2415 msgid "none" msgstr "brak" -#: src/readelf.c:2197 +#: src/readelf.c:2432 msgid "| " msgstr "| " -#: src/readelf.c:2222 +#: src/readelf.c:2463 #, c-format msgid "" "\n" @@ -4765,17 +4887,17 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] \"%s" "\"\n" -#: src/readelf.c:2245 +#: src/readelf.c:2484 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Wersja: %hu Plik: %s Licznik: %hu\n" -#: src/readelf.c:2258 +#: src/readelf.c:2497 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nazwa: %s Flagi: %s Wersja: %hu\n" -#: src/readelf.c:2289 +#: src/readelf.c:2534 #, c-format msgid "" "\n" @@ -4801,18 +4923,18 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] \"%s" "\"\n" -#: src/readelf.c:2319 +#: src/readelf.c:2562 #, 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:2334 +#: src/readelf.c:2577 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Rodzic %d: %s\n" -#: src/readelf.c:2566 +#: src/readelf.c:2816 #, c-format msgid "" "\n" @@ -4838,15 +4960,15 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] \"%s" "\"" -#: src/readelf.c:2596 +#: src/readelf.c:2844 msgid " 0 *local* " msgstr " 0 *lokalny* " -#: src/readelf.c:2601 +#: src/readelf.c:2849 msgid " 1 *global* " msgstr " 1 *globalny* " -#: src/readelf.c:2632 +#: src/readelf.c:2890 #, c-format msgid "" "\n" @@ -4877,22 +4999,22 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] \"%s" "\"\n" -#: src/readelf.c:2656 +#: src/readelf.c:2912 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Długość Liczba % całości Pokrycie\n" -#: src/readelf.c:2658 +#: src/readelf.c:2914 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:2665 +#: src/readelf.c:2921 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:2678 +#: src/readelf.c:2934 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4901,12 +5023,12 @@ msgstr "" " Średnia liczba testów: udane wyszukania: %f\n" "\t\t\t nieudane wyszukania: %f\n" -#: src/readelf.c:2696 src/readelf.c:2738 src/readelf.c:2779 +#: src/readelf.c:2952 src/readelf.c:2994 src/readelf.c:3035 #, c-format msgid "cannot get data for section %d: %s" msgstr "nie można uzyskać danych dla sekcji %d: %s" -#: src/readelf.c:2833 +#: src/readelf.c:3089 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4916,7 +5038,7 @@ msgstr "" " Rozmiar maski bitowej: %zu bajtów %%% bitów ustawionych " "drugie przesunięcie skrótu: %u\n" -#: src/readelf.c:2907 +#: src/readelf.c:3164 #, c-format msgid "" "\n" @@ -4937,7 +5059,7 @@ msgstr[2] "" "Sekcja listy bibliotek [%2zu] \"%s\" pod offsetem %#0 zawiera %d " "wpisów:\n" -#: src/readelf.c:2921 +#: src/readelf.c:3178 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4945,7 +5067,7 @@ msgstr "" " Biblioteka Oznaczenie czasu Suma k. Wersja " "Flagi" -#: src/readelf.c:2971 +#: src/readelf.c:3228 #, c-format msgid "" "\n" @@ -4956,135 +5078,140 @@ msgstr "" "Sekcja atrybutów obiektu [%2zu] \"%s\" % bajtów pod offsetem " "%#0:\n" -#: src/readelf.c:2987 +#: src/readelf.c:3244 msgid " Owner Size\n" msgstr " Właściciel Rozmiar\n" -#: src/readelf.c:3013 +#: src/readelf.c:3270 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" -#: src/readelf.c:3045 +#: src/readelf.c:3302 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" -#: src/readelf.c:3050 +#: src/readelf.c:3307 #, c-format msgid " File: %11\n" msgstr " Plik: %11\n" -#: src/readelf.c:3085 +#: src/readelf.c:3342 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3088 +#: src/readelf.c:3345 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3091 +#: src/readelf.c:3348 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3098 +#: src/readelf.c:3355 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3101 +#: src/readelf.c:3358 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3137 +#: src/readelf.c:3403 #, c-format msgid "%s+%# <%s+%#>" msgstr "%s+%# <%s+%#>" -#: src/readelf.c:3140 +#: src/readelf.c:3406 #, c-format msgid "%s+%#0* <%s+%#>" msgstr "%s+%#0* <%s+%#>" -#: src/readelf.c:3145 +#: src/readelf.c:3411 #, c-format msgid "%# <%s+%#>" msgstr "%# <%s+%#>" -#: src/readelf.c:3148 +#: src/readelf.c:3414 #, c-format msgid "%#0* <%s+%#>" msgstr "%#0* <%s+%#>" -#: src/readelf.c:3154 +#: src/readelf.c:3420 #, c-format msgid "%s+%# <%s>" msgstr "%s+%# <%s>" -#: src/readelf.c:3157 +#: src/readelf.c:3423 #, c-format msgid "%s+%#0* <%s>" msgstr "%s+%#0* <%s>" -#: src/readelf.c:3161 +#: src/readelf.c:3427 #, c-format msgid "%# <%s>" msgstr "%# <%s>" -#: src/readelf.c:3164 +#: src/readelf.c:3430 #, c-format msgid "%#0* <%s>" msgstr "%#0* <%s>" -#: src/readelf.c:3169 +#: src/readelf.c:3435 #, c-format msgid "%s+%#" msgstr "%s+%#" -#: src/readelf.c:3172 +#: src/readelf.c:3438 #, c-format msgid "%s+%#0*" msgstr "%s+%#0*" -#: src/readelf.c:3554 +#: src/readelf.c:3820 msgid "empty block" msgstr "pusty blok" -#: src/readelf.c:3557 +#: src/readelf.c:3823 #, c-format msgid "%zu byte block:" msgstr "%zu bajtowy blok:" -#: src/readelf.c:3934 +#: src/readelf.c:4217 #, c-format msgid "%*s[%4] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:3970 +#: src/readelf.c:4274 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# zostało użyte z różnymi rozmiarami adresu" -#: src/readelf.c:3977 +#: src/readelf.c:4281 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# zostało użyte z różnymi rozmiarami offsetu" -#: src/readelf.c:4057 +#: src/readelf.c:4288 +#, fuzzy, c-format +msgid "%s %# used with different base addresses" +msgstr "%s %# zostało użyte z różnymi rozmiarami adresu" + +#: src/readelf.c:4370 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4065 +#: src/readelf.c:4378 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] ... % bajtów...\n" -#: src/readelf.c:4087 +#: src/readelf.c:4404 #, c-format msgid "" "\n" @@ -5095,7 +5222,7 @@ msgstr "" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#:\n" " [ Kod]\n" -#: src/readelf.c:4095 +#: src/readelf.c:4412 #, c-format msgid "" "\n" @@ -5104,30 +5231,30 @@ msgstr "" "\n" "Sekcja skrótów pod offsetem %:\n" -#: src/readelf.c:4108 +#: src/readelf.c:4425 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** błąd podczas odczytywania skrótu: %s\n" -#: src/readelf.c:4124 +#: src/readelf.c:4441 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] offset: %, potomek: %s, znacznik: %s\n" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "yes" msgstr "tak" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "no" msgstr "nie" -#: src/readelf.c:4162 +#: src/readelf.c:4478 src/readelf.c:4551 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "nie można uzyskać zawartości .debug_aranges: %s" -#: src/readelf.c:4167 +#: src/readelf.c:4493 #, c-format msgid "" "\n" @@ -5145,12 +5272,12 @@ msgstr[2] "" "\n" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:4198 +#: src/readelf.c:4524 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4200 +#: src/readelf.c:4526 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5158,13 +5285,8 @@ msgstr "" " [%*zu] początek: %0#*, długość: %5, offset CU DIE: " "%6\n" -#: src/readelf.c:4219 -#, c-format -msgid "cannot get .debug_ranges content: %s" -msgstr "nie można uzyskać zawartości .debug_ranges: %s" - -#: src/readelf.c:4224 src/readelf.c:4728 src/readelf.c:5505 src/readelf.c:6006 -#: src/readelf.c:6121 src/readelf.c:6277 src/readelf.c:6699 +#: src/readelf.c:4556 src/readelf.c:4710 src/readelf.c:5231 src/readelf.c:6145 +#: src/readelf.c:6646 src/readelf.c:6766 src/readelf.c:6922 src/readelf.c:7345 #, c-format msgid "" "\n" @@ -5173,37 +5295,115 @@ msgstr "" "\n" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#:\n" -#: src/readelf.c:4248 src/readelf.c:6031 +#: src/readelf.c:4569 src/readelf.c:6171 +#, c-format +msgid "" +"\n" +"Table at offset %Zu:\n" +msgstr "" +"\n" +"Tabela pod offsetem %Zu:\n" + +#: src/readelf.c:4573 src/readelf.c:5255 src/readelf.c:6180 +#, c-format +msgid "invalid data in section [%zu] '%s'" +msgstr "nieprawidłowe dane w sekcji [%zu] \"%s\"" + +#: src/readelf.c:4589 +#, fuzzy, c-format +msgid "" +"\n" +" Length: %6\n" +msgstr " Długość offsetu: %\n" + +#: src/readelf.c:4601 +#, fuzzy, c-format +msgid " DWARF version: %6\n" +msgstr " Wersja: %\n" + +#: src/readelf.c:4605 +#, c-format +msgid "unsupported aranges version" +msgstr "" + +#: src/readelf.c:4616 +#, fuzzy, c-format +msgid " CU offset: %6\n" +msgstr " offset CU: %#\n" + +#: src/readelf.c:4622 +#, fuzzy, c-format +msgid " Address size: %6\n" +msgstr " offset adresu: %#\n" + +#: src/readelf.c:4626 +#, fuzzy, c-format +msgid "unsupported address size" +msgstr "brak wartości adresu" + +#: src/readelf.c:4631 +#, fuzzy, c-format +msgid "" +" Segment size: %6\n" +"\n" +msgstr " ustawienie pliku na %\n" + +#: src/readelf.c:4635 +#, c-format +msgid "unsupported segment size" +msgstr "" + +#: src/readelf.c:4675 +#, fuzzy, c-format +msgid " %s..%s (%)\n" +msgstr " %s: %\n" + +#: src/readelf.c:4678 +#, fuzzy, c-format +msgid " %s..%s\n" +msgstr " [%6tx] %s...%s\n" + +#: src/readelf.c:4687 +#, c-format +msgid " %Zu padding bytes\n" +msgstr "" + +#: src/readelf.c:4705 +#, c-format +msgid "cannot get .debug_ranges content: %s" +msgstr "nie można uzyskać zawartości .debug_ranges: %s" + +#: src/readelf.c:4735 src/readelf.c:6673 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4270 src/readelf.c:6053 +#: src/readelf.c:4757 src/readelf.c:6695 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] adres podstawowy %s\n" -#: src/readelf.c:4276 src/readelf.c:6059 +#: src/readelf.c:4764 src/readelf.c:6702 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] pusta lista\n" -#: src/readelf.c:4285 +#: src/readelf.c:4775 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s...%s\n" -#: src/readelf.c:4287 +#: src/readelf.c:4777 #, c-format msgid " %s..%s\n" msgstr " %s...%s\n" -#: src/readelf.c:4717 src/readelf.c:6768 src/readelf.c:6870 src/readelf.c:7028 -#, c-format -msgid "cannot get %s content: %s" -msgstr "nie można uzyskać zwartości %s: %s" +#: src/readelf.c:5210 +#, fuzzy, c-format +msgid "cannot get ELF: %s" +msgstr "nie można uzyskać nagłówka ELF: %s" -#: src/readelf.c:4724 +#: src/readelf.c:5227 #, c-format msgid "" "\n" @@ -5212,12 +5412,7 @@ msgstr "" "\n" "Sekcja informacji o ramce wywołania [%2zu] \"%s\" pod offsetem %#0:\n" -#: src/readelf.c:4752 src/readelf.c:5540 -#, c-format -msgid "invalid data in section [%zu] '%s'" -msgstr "nieprawidłowe dane w sekcji [%zu] \"%s\"" - -#: src/readelf.c:4774 +#: src/readelf.c:5277 #, c-format msgid "" "\n" @@ -5226,50 +5421,50 @@ msgstr "" "\n" " [%6tx] Zerowy koniec\n" -#: src/readelf.c:4859 +#: src/readelf.c:5362 #, c-format msgid "invalid augmentation length" msgstr "nieprawidłowa długość powiększenia" -#: src/readelf.c:4871 +#: src/readelf.c:5374 msgid "FDE address encoding: " msgstr "Kodowanie adresu FDE: " -#: src/readelf.c:4877 +#: src/readelf.c:5380 msgid "LSDA pointer encoding: " msgstr "Kodowanie wskaźnika LSDA: " -#: src/readelf.c:4975 +#: src/readelf.c:5491 #, c-format msgid " (offset: %#)" msgstr " (offset: %#)" -#: src/readelf.c:4982 +#: src/readelf.c:5498 #, c-format msgid " (end offset: %#)" msgstr " (kończący offset: %#)" -#: src/readelf.c:5009 +#: src/readelf.c:5525 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sWskaźnik LSDA: %#\n" -#: src/readelf.c:5060 +#: src/readelf.c:5577 #, c-format msgid "cannot get attribute code: %s" msgstr "nie można uzyskać kodu atrybutu: %s" -#: src/readelf.c:5069 +#: src/readelf.c:5586 #, c-format msgid "cannot get attribute form: %s" msgstr "nie można uzyskać formy atrybutu: %s" -#: src/readelf.c:5084 +#: src/readelf.c:5601 #, c-format msgid "cannot get attribute value: %s" msgstr "nie można uzyskać wartości atrybutu: %s" -#: src/readelf.c:5342 +#: src/readelf.c:5894 #, c-format msgid "" "\n" @@ -5280,7 +5475,7 @@ msgstr "" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#:\n" " [Offset]\n" -#: src/readelf.c:5374 +#: src/readelf.c:5926 #, c-format msgid "" " Type unit at offset %:\n" @@ -5293,7 +5488,7 @@ msgstr "" "%, rozmiar offsetu: %\n" " Podpis typu: %#, offset typu: %#\n" -#: src/readelf.c:5383 +#: src/readelf.c:5935 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5304,47 +5499,48 @@ msgstr "" " Wersja: %, offset sekcji skrótów: %, rozmiar adresu: " "%, rozmiar offsetu: %\n" -#: src/readelf.c:5409 +#: src/readelf.c:5960 #, c-format msgid "cannot get DIE at offset % in section '%s': %s" msgstr "nie można uzyskać DIE pod offsetem % w sekcji \"%s\": %s" -#: src/readelf.c:5421 +#: src/readelf.c:5974 #, c-format msgid "cannot get DIE offset: %s" msgstr "nie można uzyskać offsetu DIE: %s" -#: src/readelf.c:5430 +#: src/readelf.c:5983 #, c-format msgid "cannot get tag of DIE at offset % in section '%s': %s" msgstr "" "nie można uzyskać znacznika DIE pod offsetem % w sekcji \"%s\": %s" -#: src/readelf.c:5461 +#: src/readelf.c:6015 #, c-format msgid "cannot get next DIE: %s\n" msgstr "nie można uzyskać następnego DIE: %s\n" -#: src/readelf.c:5469 +#: src/readelf.c:6023 #, c-format msgid "cannot get next DIE: %s" msgstr "nie można uzyskać następnego DIE: %s" -#: src/readelf.c:5518 -#, c-format -msgid "cannot get line data section data: %s" -msgstr "nie można uzyskać danych sekcji danych wiersza: %s" - -#: src/readelf.c:5531 -#, c-format +#: src/readelf.c:6059 +#, fuzzy, c-format msgid "" "\n" -"Table at offset %Zu:\n" +"DWARF section [%2zu] '%s' at offset %#:\n" +"\n" msgstr "" "\n" -"Tabela pod offsetem %Zu:\n" +"Sekcja DWARF [%2zu] \"%s\" pod offsetem %#:\n" -#: src/readelf.c:5586 +#: src/readelf.c:6158 +#, c-format +msgid "cannot get line data section data: %s" +msgstr "nie można uzyskać danych sekcji danych wiersza: %s" + +#: src/readelf.c:6226 #, c-format msgid "" "\n" @@ -5373,12 +5569,12 @@ msgstr "" "\n" "Instrukcje:\n" -#: src/readelf.c:5607 +#: src/readelf.c:6247 #, 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:5622 +#: src/readelf.c:6262 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" @@ -5386,7 +5582,7 @@ msgstr[0] " [%*] %hhu parametr\n" msgstr[1] " [%*] %hhu parametry\n" msgstr[2] " [%*] %hhu parametrów\n" -#: src/readelf.c:5630 +#: src/readelf.c:6270 msgid "" "\n" "Directory table:" @@ -5394,7 +5590,7 @@ msgstr "" "\n" "Tabela katalogu:" -#: src/readelf.c:5646 +#: src/readelf.c:6286 msgid "" "\n" "File name table:\n" @@ -5404,7 +5600,7 @@ msgstr "" "Tabela nazw plików:\n" " Wpis Kat Czas Rozmiar Nazwa" -#: src/readelf.c:5675 +#: src/readelf.c:6315 msgid "" "\n" "Line number statements:" @@ -5412,118 +5608,114 @@ msgstr "" "\n" "Instrukcje numerów wierszy:" -#: src/readelf.c:5751 +#: src/readelf.c:6391 #, 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:5756 +#: src/readelf.c:6396 #, 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:5776 +#: src/readelf.c:6416 #, c-format msgid " extended opcode %u: " msgstr " instrukcja rozszerzona %u: " -#: src/readelf.c:5781 -#, fuzzy +#: src/readelf.c:6421 msgid " end of sequence" -msgstr "koniec sekwencji" +msgstr " koniec sekwencji" -#: src/readelf.c:5798 -#, fuzzy, c-format +#: src/readelf.c:6438 +#, c-format msgid " set address to %s\n" -msgstr "ustawienie adresu na %s\n" +msgstr " ustawienie adresu na %s\n" -#: src/readelf.c:5819 -#, fuzzy, c-format +#: src/readelf.c:6459 +#, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" -"definicja nowego pliku: dir=%u, mtime=%, długość=%, nazwa=" +" definicja nowego pliku: dir=%u, mtime=%, długość=%, nazwa=" "%s\n" -#: src/readelf.c:5832 +#: src/readelf.c:6472 #, c-format msgid " set discriminator to %u\n" msgstr " ustawienie dyskryminatora na %u\n" -#: src/readelf.c:5837 -#, fuzzy +#: src/readelf.c:6477 msgid " unknown opcode" -msgstr "nieznana instrukcja" +msgstr " nieznana instrukcja" -#: src/readelf.c:5849 +#: src/readelf.c:6489 msgid " copy" msgstr " kopiowanie" -#: src/readelf.c:5860 -#, fuzzy, c-format +#: src/readelf.c:6500 +#, 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" -"\n" +msgstr " zwiększenie adresu o %u do %s, op_index do %u\n" -#: src/readelf.c:5864 -#, fuzzy, c-format +#: src/readelf.c:6504 +#, c-format msgid " advance address by %u to %s\n" -msgstr "zwiększenie adresu o %u do %s\n" +msgstr " zwiększenie adresu o %u do %s\n" -#: src/readelf.c:5875 +#: src/readelf.c:6515 #, c-format msgid " advance line by constant %d to %\n" msgstr " zwiększenie wiersza o stałą %d do %\n" -#: src/readelf.c:5883 +#: src/readelf.c:6523 #, c-format msgid " set file to %\n" msgstr " ustawienie pliku na %\n" -#: src/readelf.c:5893 +#: src/readelf.c:6533 #, c-format msgid " set column to %\n" msgstr " ustawienie kolumny na %\n" -#: src/readelf.c:5900 +#: src/readelf.c:6540 #, c-format msgid " set '%s' to %\n" msgstr " ustawienie \"%s\" na %\n" -#: src/readelf.c:5906 +#: src/readelf.c:6546 msgid " set basic block flag" msgstr " ustawienie podstawowej flagi bloku" -#: src/readelf.c:5915 -#, fuzzy, c-format +#: src/readelf.c:6555 +#, 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" +msgstr " zwiększenie adresu o stałą %u do %s, op_index do %u\n" -#: src/readelf.c:5919 -#, fuzzy, c-format +#: src/readelf.c:6559 +#, c-format msgid " advance address by constant %u to %s\n" -msgstr "zwiększenie adresu o stałą %u do %s\n" +msgstr " zwiększenie adresu o stałą %u do %s\n" -#: src/readelf.c:5937 -#, fuzzy, c-format +#: src/readelf.c:6577 +#, c-format msgid " advance address by fixed value %u to %s\n" -msgstr "zwiększenie adresu o stałą wartość %u do %s\n" +msgstr " zwiększenie adresu o stałą wartość %u do %s\n" -#: src/readelf.c:5946 +#: src/readelf.c:6586 msgid " set prologue end flag" msgstr " ustawienie flagi końca prologu" -#: src/readelf.c:5951 +#: src/readelf.c:6591 msgid " set epilogue begin flag" msgstr " ustawienie flagi początku epilogu" -#: src/readelf.c:5960 +#: src/readelf.c:6600 #, c-format msgid " set isa to %u\n" msgstr " ustawienie isa na %u\n" -#: src/readelf.c:5969 +#: src/readelf.c:6609 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" @@ -5531,96 +5723,96 @@ msgstr[0] " nieznana instrukcja z % parametrem:" msgstr[1] " nieznana instrukcja z % parametrami:" msgstr[2] " nieznana instrukcja z % parametrami:" -#: src/readelf.c:6001 +#: src/readelf.c:6641 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "nie można uzyskać zawartości .debug_log: %s" -#: src/readelf.c:6071 +#: src/readelf.c:6716 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s...%s" -#: src/readelf.c:6073 +#: src/readelf.c:6718 #, c-format msgid " %s..%s" msgstr " %s...%s" -#: src/readelf.c:6080 +#: src/readelf.c:6725 msgid " \n" msgstr " \n" -#: src/readelf.c:6132 src/readelf.c:6286 +#: src/readelf.c:6777 src/readelf.c:6931 #, c-format msgid "cannot get macro information section data: %s" msgstr "nie można uzyskać danych sekcji informacji o makrach: %s" -#: src/readelf.c:6211 +#: src/readelf.c:6856 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** niezakończony ciąg na końcu sekcji" -#: src/readelf.c:6327 -#, fuzzy, c-format +#: src/readelf.c:6972 +#, c-format msgid " Offset: 0x%\n" -msgstr " Właściciel Rozmiar\n" +msgstr " Offset: 0x%\n" -#: src/readelf.c:6339 -#, fuzzy, c-format +#: src/readelf.c:6984 +#, c-format msgid " Version: %\n" -msgstr " %s: %\n" +msgstr " Wersja: %\n" -#: src/readelf.c:6345 src/readelf.c:7055 +#: src/readelf.c:6990 src/readelf.c:7703 #, c-format msgid " unknown version, cannot parse section\n" -msgstr "" +msgstr " nieznana wersja, nie można przetworzyć sekcji\n" -#: src/readelf.c:6352 -#, fuzzy, c-format +#: src/readelf.c:6997 +#, c-format msgid " Flag: 0x%\n" -msgstr " Adres punktu wejściowego: %#\n" +msgstr " Flaga: 0x%\n" -#: src/readelf.c:6355 -#, fuzzy, c-format +#: src/readelf.c:7000 +#, c-format msgid " Offset length: %\n" -msgstr " (offset: %#)" +msgstr " Długość offsetu: %\n" -#: src/readelf.c:6363 -#, fuzzy, c-format +#: src/readelf.c:7008 +#, c-format msgid " .debug_line offset: 0x%\n" -msgstr " (kończący offset: %#)" +msgstr " Offset .debug_line: 0x%\n" -#: src/readelf.c:6375 -#, fuzzy, c-format +#: src/readelf.c:7021 +#, c-format msgid " extension opcode table, % items:\n" -msgstr " nieznana instrukcja z % parametrem:" +msgstr " tablica instrukcji rozszerzenia, % elementów:\n" -#: src/readelf.c:6382 +#: src/readelf.c:7028 #, c-format msgid " [%]" -msgstr "" +msgstr " [%]" -#: src/readelf.c:6394 -#, fuzzy, c-format +#: src/readelf.c:7040 +#, c-format msgid " % arguments:" -msgstr " [%*] %hhu parametr\n" +msgstr " Parametry %:" -#: src/readelf.c:6422 +#: src/readelf.c:7068 #, c-format msgid " no arguments." -msgstr "" +msgstr " brak parametrów." -#: src/readelf.c:6657 +#: src/readelf.c:7303 #, c-format msgid "vendor opcode not verified?" -msgstr "" +msgstr "instrukcja producenta nie została sprawdzona?" -#: src/readelf.c:6685 +#: src/readelf.c:7331 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr " [%5d] offset DIE: %6, offset CU DIE: %6, nazwa: %s\n" -#: src/readelf.c:6726 +#: src/readelf.c:7372 #, c-format msgid "" "\n" @@ -5631,12 +5823,12 @@ msgstr "" "Sekcja DWARF [%2zu] \"%s\" pod offsetem %#:\n" " %*s Ciąg\n" -#: src/readelf.c:6740 +#: src/readelf.c:7386 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** błąd podczas odczytywania ciągów: %s\n" -#: src/readelf.c:6760 +#: src/readelf.c:7406 #, c-format msgid "" "\n" @@ -5645,7 +5837,7 @@ msgstr "" "\n" "Sekcja tabeli wyszukiwania ramki wywołania [%2zu] \".eh_frame_hdr\":\n" -#: src/readelf.c:6862 +#: src/readelf.c:7508 #, c-format msgid "" "\n" @@ -5654,22 +5846,22 @@ msgstr "" "\n" "Sekcja tabeli obsługiwania wyjątków [%2zu] \".gcc_except_table\":\n" -#: src/readelf.c:6885 +#: src/readelf.c:7531 #, c-format msgid " LPStart encoding: %#x " msgstr " Kodowanie LPStart: %#x " -#: src/readelf.c:6897 +#: src/readelf.c:7543 #, c-format msgid " TType encoding: %#x " msgstr " Kodowanie TType: %#x " -#: src/readelf.c:6911 +#: src/readelf.c:7557 #, c-format msgid " Call site encoding: %#x " msgstr " Kodowanie strony wywołania: %#x " -#: src/readelf.c:6924 +#: src/readelf.c:7570 msgid "" "\n" " Call site table:" @@ -5677,7 +5869,7 @@ msgstr "" "\n" " Tabela strony wywołania:" -#: src/readelf.c:6938 +#: src/readelf.c:7584 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5690,97 +5882,97 @@ msgstr "" " Lądowisko: %#\n" " Działanie: %u\n" -#: src/readelf.c:6998 +#: src/readelf.c:7644 #, c-format msgid "invalid TType encoding" msgstr "nieprawidłowe kodowanie TType" -#: src/readelf.c:7019 -#, fuzzy, c-format +#: src/readelf.c:7665 +#, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %# contains % bytes :\n" msgstr "" "\n" -"Sekcja DWARF [%2zu] \"%s\" pod offsetem %# zawiera %zu wpis:\n" +"Sekcja GDB [%2zu] \"%s\" pod offsetem %# zawiera % bajtów:\n" -#: src/readelf.c:7048 -#, fuzzy, c-format +#: src/readelf.c:7694 +#, c-format msgid " Version: %\n" -msgstr " %s: %\n" +msgstr " Wersja: %\n" -#: src/readelf.c:7064 -#, fuzzy, c-format +#: src/readelf.c:7712 +#, c-format msgid " CU offset: %#\n" -msgstr " (offset: %#)" +msgstr " offset CU: %#\n" -#: src/readelf.c:7071 -#, fuzzy, c-format +#: src/readelf.c:7719 +#, c-format msgid " TU offset: %#\n" -msgstr " (offset: %#)" +msgstr " offset TU: %#\n" -#: src/readelf.c:7078 -#, fuzzy, c-format +#: src/readelf.c:7726 +#, c-format msgid " address offset: %#\n" -msgstr " (kończący offset: %#)" +msgstr " offset adresu: %#\n" -#: src/readelf.c:7085 -#, fuzzy, c-format +#: src/readelf.c:7733 +#, c-format msgid " symbol offset: %#\n" -msgstr " (offset: %#)" +msgstr " offset symbolu: %#\n" -#: src/readelf.c:7092 -#, fuzzy, c-format +#: src/readelf.c:7740 +#, c-format msgid " constant offset: %#\n" -msgstr " (kończący offset: %#)" +msgstr " offset stałej: %#\n" -#: src/readelf.c:7099 -#, fuzzy, c-format +#: src/readelf.c:7747 +#, c-format msgid "" "\n" " CU list at offset %# contains %zu entries:\n" msgstr "" "\n" -"Sekcja DWARF [%2zu] \"%s\" pod offsetem %# zawiera %zu wpis:\n" +" Lista CU pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:7121 -#, fuzzy, c-format +#: src/readelf.c:7769 +#, c-format msgid "" "\n" " TU list at offset %# contains %zu entries:\n" msgstr "" "\n" -"Sekcja DWARF [%2zu] \"%s\" pod offsetem %# zawiera %zu wpis:\n" +" Lista TU pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:7147 -#, fuzzy, c-format +#: src/readelf.c:7795 +#, c-format msgid "" "\n" " Address list at offset %# contains %zu entries:\n" msgstr "" "\n" -"Sekcja DWARF [%2zu] \"%s\" pod offsetem %# zawiera %zu wpis:\n" +" Lista adresów pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:7174 -#, fuzzy, c-format +#: src/readelf.c:7824 +#, c-format msgid "" "\n" " Symbol table at offset %# contains %zu slots:\n" msgstr "" "\n" -"Nieprawidłowa tabela symboli pod offsetem %#0\n" +" Tabela symboli pod offsetem %# zawiera %zu gniazd:\n" -#: src/readelf.c:7259 +#: src/readelf.c:7909 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "nie można uzyskać deskryptora kontekstu debugowania: %s" -#: src/readelf.c:7409 src/readelf.c:8010 +#: src/readelf.c:8069 src/readelf.c:8675 src/readelf.c:8786 src/readelf.c:8844 #, c-format msgid "cannot convert core note data: %s" msgstr "nie można przekonwertować danych notatki core: %s" -#: src/readelf.c:7750 +#: src/readelf.c:8416 #, c-format msgid "" "\n" @@ -5789,21 +5981,21 @@ msgstr "" "\n" "%*s... ..." -#: src/readelf.c:8109 +#: src/readelf.c:8919 msgid " Owner Data size Type\n" msgstr " Właściciel Rozmiar danych Typ\n" -#: src/readelf.c:8127 +#: src/readelf.c:8937 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:8161 +#: src/readelf.c:8987 #, c-format msgid "cannot get content of note section: %s" msgstr "nie można uzyskać zawartości sekcji notatki: %s" -#: src/readelf.c:8188 +#: src/readelf.c:9014 #, c-format msgid "" "\n" @@ -5813,7 +6005,7 @@ msgstr "" "Segment notatki [%2zu] \"%s\" o długości % bajtów pod offsetem " "%#0:\n" -#: src/readelf.c:8211 +#: src/readelf.c:9037 #, c-format msgid "" "\n" @@ -5822,7 +6014,7 @@ msgstr "" "\n" "Segment notatki o długości % bajtów pod offsetem %#0:\n" -#: src/readelf.c:8257 +#: src/readelf.c:9083 #, c-format msgid "" "\n" @@ -5831,12 +6023,12 @@ msgstr "" "\n" "Sekcja [%Zu] \"%s\" nie posiada danych do zrzucenia.\n" -#: src/readelf.c:8263 src/readelf.c:8286 +#: src/readelf.c:9089 src/readelf.c:9112 #, 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:8267 +#: src/readelf.c:9093 #, c-format msgid "" "\n" @@ -5846,7 +6038,7 @@ msgstr "" "Segment zrzutu szesnastkowego [%Zu] \"%s\", % bajtów pod offsetem " "%#0:\n" -#: src/readelf.c:8280 +#: src/readelf.c:9106 #, c-format msgid "" "\n" @@ -5855,7 +6047,7 @@ msgstr "" "\n" "Sekcja [%Zu] \"%s\" nie posiada ciągów do zrzucenia.\n" -#: src/readelf.c:8290 +#: src/readelf.c:9116 #, c-format msgid "" "\n" @@ -5865,7 +6057,7 @@ msgstr "" "Sekcja ciągów [%Zu] \"%s\" zawiera % bajtów pod offsetem " "%#0:\n" -#: src/readelf.c:8338 +#: src/readelf.c:9164 #, c-format msgid "" "\n" @@ -5874,7 +6066,7 @@ msgstr "" "\n" "sekcja [%lu] nie istnieje" -#: src/readelf.c:8367 +#: src/readelf.c:9193 #, c-format msgid "" "\n" @@ -5883,12 +6075,12 @@ msgstr "" "\n" "sekcja \"%s\" nie istnieje" -#: src/readelf.c:8424 +#: src/readelf.c:9250 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "nie można uzyskać indeksu symboli archiwum \"%s\": %s" -#: src/readelf.c:8427 +#: src/readelf.c:9253 #, c-format msgid "" "\n" @@ -5897,7 +6089,7 @@ msgstr "" "\n" "Archiwum \"%s\" nie posiada indeksu symboli\n" -#: src/readelf.c:8431 +#: src/readelf.c:9257 #, c-format msgid "" "\n" @@ -5906,12 +6098,12 @@ msgstr "" "\n" "Indeks archiwum \"%s\" posiada %Zu wpisów:\n" -#: src/readelf.c:8449 +#: src/readelf.c:9275 #, 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:8454 +#: src/readelf.c:9280 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Element archiwum \"%s\" zawiera:\n" @@ -5975,12 +6167,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:581 +#: src/size.c:438 src/size.c:571 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:606 +#: src/size.c:596 msgid "(TOTALS)\n" msgstr "(CAŁKOWITE)\n" @@ -6021,27 +6213,27 @@ msgstr "Alias dla --radix=o" msgid "Print the strings of printable characters in files." msgstr "Wyświetla ciągi znaków drukowalnych w plikach." -#: src/strings.c:260 src/strings.c:295 +#: src/strings.c:267 src/strings.c:302 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "nieprawidłowa wartość \"%s\" dla parametru %s" -#: src/strings.c:306 +#: src/strings.c:313 #, c-format msgid "invalid minimum length of matched string size" msgstr "nieprawidłowa minimalna długość dopasowanego rozmiaru ciągu" -#: src/strings.c:591 +#: src/strings.c:596 #, c-format msgid "lseek64 failed" msgstr "lseek64 nie powiodło się" -#: src/strings.c:608 src/strings.c:672 +#: src/strings.c:613 src/strings.c:677 #, c-format msgid "re-mmap failed" msgstr "ponowne mmap nie powiodło się" -#: src/strings.c:645 +#: src/strings.c:650 #, c-format msgid "mprotect failed" msgstr "mprotect nie powiodło się" @@ -6076,6 +6268,9 @@ msgid "" "sections are placed in a debug file (only relevant for ET_REL files, " "operation is not reversable, needs -f)" msgstr "" +"Rozwiązuje wszystkie proste relokacje między sekcjami debugowania, jeśli " +"usunięte sekcje zostały umieszczone w pliku debugowania (ma znaczenie tylko " +"dla plików ET_REL, działanie jest nieodwracalne, wymaga użycia opcji -f)" #: src/strip.c:85 msgid "Remove .comment section" @@ -6092,7 +6287,7 @@ msgstr "Odrzuca symbole z plików obiektów." #: src/strip.c:181 #, c-format msgid "--reloc-debug-sections used without -f" -msgstr "" +msgstr "Użyto --reloc-debug-sections bez opcji -f" #: src/strip.c:195 #, c-format @@ -6109,7 +6304,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" @@ -6134,87 +6329,87 @@ msgstr "podczas otwierania \"%s\"" msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum" -#: src/strip.c:467 +#: src/strip.c:468 #, c-format msgid "cannot open EBL backend" msgstr "nie można otworzyć zaplecza EBL" -#: src/strip.c:517 src/strip.c:541 +#: src/strip.c:518 src/strip.c:542 #, c-format msgid "cannot create new file '%s': %s" msgstr "nie można utworzyć nowego pliku \"%s\": %s" -#: src/strip.c:601 +#: src/strip.c:608 #, c-format msgid "illformed file '%s'" msgstr "plik \"%s\" posiada błędny format" -#: src/strip.c:905 src/strip.c:994 +#: src/strip.c:930 src/strip.c:1019 #, c-format msgid "while generating output file: %s" msgstr "podczas tworzenia pliku wyjściowego: %s" -#: src/strip.c:967 src/strip.c:1929 +#: src/strip.c:992 src/strip.c:1957 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: błąd podczas tworzenia nagłówka ELF: %s" -#: src/strip.c:981 +#: src/strip.c:1006 #, c-format msgid "while preparing output for '%s'" msgstr "podczas przygotowywania wyjścia dla \"%s\"" -#: src/strip.c:1032 src/strip.c:1088 +#: src/strip.c:1057 src/strip.c:1114 #, c-format msgid "while create section header section: %s" msgstr "podczas tworzenia sekcji nagłówka sekcji: %s" -#: src/strip.c:1038 +#: src/strip.c:1063 #, c-format msgid "cannot allocate section data: %s" msgstr "nie można przydzielić danych sekcji: %s" -#: src/strip.c:1097 +#: src/strip.c:1123 #, c-format msgid "while create section header string table: %s" msgstr "podczas tworzenia tabeli ciągów nagłówka sekcji: %s" -#: src/strip.c:1724 -#, fuzzy, c-format +#: src/strip.c:1752 +#, c-format msgid "bad relocation" -msgstr "Wyświetla relokacje" +msgstr "błędna relokacja" -#: src/strip.c:1841 src/strip.c:1951 +#: src/strip.c:1869 src/strip.c:1979 #, c-format msgid "while writing '%s': %s" msgstr "podczas zapisywania \"%s\": %s" -#: src/strip.c:1852 +#: src/strip.c:1880 #, c-format msgid "while creating '%s'" msgstr "podczas tworzenia \"%s\"" -#: src/strip.c:1874 +#: src/strip.c:1902 #, c-format msgid "while computing checksum for debug information" msgstr "podczas obliczania sumy kontrolnej dla informacji debugowania" -#: src/strip.c:1937 +#: src/strip.c:1965 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: błąd podczas odczytywania pliku: %s" -#: src/strip.c:1976 src/strip.c:1996 +#: src/strip.c:2004 src/strip.c:2024 #, c-format msgid "while writing '%s'" msgstr "podczas zapisywania \"%s\"" -#: src/strip.c:2030 src/strip.c:2037 +#: src/strip.c:2061 src/strip.c:2068 #, c-format msgid "error while finishing '%s': %s" msgstr "błąd podczas kończenia \"%s\": %s" -#: src/strip.c:2060 src/strip.c:2117 +#: src/strip.c:2091 src/strip.c:2148 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "nie można ustawić czasu dostępu i modyfikacji \"%s\"" @@ -6251,209 +6446,213 @@ msgstr "Zastosowuje relokacje do zawartości sekcji w plikach ET_REL" #: src/unstrip.c:84 msgid "Only list module and file names, build IDs" -msgstr "Wyświetla tylko nazwy modułów i plików, identyfikatory budowania" +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:263 src/unstrip.c:1828 #, 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:269 #, c-format msgid "cannot copy program header: %s" msgstr "nie można skopiować nagłówka programu: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:279 #, 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:282 src/unstrip.c:1509 #, 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:284 src/unstrip.c:1511 #, c-format msgid "cannot copy section data: %s" msgstr "nie można skopiować danych sekcji: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:308 #, 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:348 src/unstrip.c:765 src/unstrip.c:1543 #, 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:364 src/unstrip.c:582 src/unstrip.c:603 src/unstrip.c:615 +#: src/unstrip.c:1564 src/unstrip.c:1694 src/unstrip.c:1718 #, c-format msgid "cannot update symbol table: %s" msgstr "nie można zaktualizować tabeli symboli: %s" -#: src/unstrip.c:367 +#: src/unstrip.c:374 #, 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:413 src/unstrip.c:424 #, c-format msgid "cannot update relocation: %s" msgstr "nie można zaktualizować relokacji: %s" -#: src/unstrip.c:504 +#: src/unstrip.c:511 #, c-format msgid "cannot get symbol version: %s" msgstr "nie można uzyskać wersji symbolu: %s" -#: src/unstrip.c:516 +#: src/unstrip.c:523 #, 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:771 #, 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:913 src/unstrip.c:1254 #, 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:954 src/unstrip.c:973 src/unstrip.c:1006 #, 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:994 #, 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:1049 src/unstrip.c:1374 #, 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:1174 src/unstrip.c:1189 src/unstrip.c:1455 #, 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:1198 #, 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:1225 src/unstrip.c:1229 #, 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:1233 src/unstrip.c:1237 src/unstrip.c:1470 #, c-format msgid "cannot get section count: %s" msgstr "nie można uzyskać licznika sekcji: %s" -#: src/unstrip.c:1232 +#: src/unstrip.c:1240 #, 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:1299 src/unstrip.c:1389 #, 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:1449 #, c-format msgid "cannot add new section: %s" msgstr "nie można dodać nowej sekcji: %s" -#: src/unstrip.c:1543 +#: src/unstrip.c:1551 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "symbol [%Zu] posiada nieprawidłowy indeks sekcji" -#: src/unstrip.c:1781 +#: src/unstrip.c:1789 #, c-format msgid "cannot read section data: %s" msgstr "nie można odczytać danych sekcji: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1810 #, c-format msgid "cannot get ELF header: %s" msgstr "nie można uzyskać nagłówka ELF: %s" -#: src/unstrip.c:1830 +#: src/unstrip.c:1838 #, 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:1843 src/unstrip.c:1922 #, c-format msgid "cannot write output file: %s" msgstr "nie można zapisać pliku wyjściowego: %s" -#: src/unstrip.c:1883 +#: src/unstrip.c:1891 #, 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:1894 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -6461,58 +6660,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:1913 src/unstrip.c:1964 src/unstrip.c:1976 src/unstrip.c:2062 #, 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:1955 +msgid "WARNING: " +msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:1957 +msgid ", use --force" +msgstr "" + +#: src/unstrip.c:1980 +msgid "ELF header identification (e_ident) different" +msgstr "" + +#: src/unstrip.c:1983 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1986 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:1989 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "" + +#: src/unstrip.c:2019 #, 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:2023 #, 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:2038 #, 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:2042 #, 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:2055 #, 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:2086 #, 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:2219 #, c-format msgid "no matching modules found" msgstr "nie odnaleziono pasujących modułów" -#: src/unstrip.c:2203 +#: src/unstrip.c:2228 #, c-format msgid "matched more than one module" msgstr "pasuje więcej niż jeden moduł" -#: src/unstrip.c:2250 +#: src/unstrip.c:2275 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -6520,7 +6738,7 @@ msgstr "" "OKROJONY-PLIK PLIK-DEBUGOWANIA\n" "[MODUŁ...]" -#: src/unstrip.c:2251 +#: src/unstrip.c:2276 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" @@ -6562,41 +6780,24 @@ msgstr "" "\n" "Używając opcji -n żadne pliki nie zostają zapisane, a jeden wiersz do " "standardowego wyjścia dla każdego modułu:\n" -"\tPOCZĄTEK+ROZMIAR IDENTYFIKATOR-BUDOWANIA PLIK PLIK-DEBUGOWANIA NAZWA-" -"MODUŁU\n" +"\tPOCZĄTEK+ROZMIAR IDENTYFIKATOR-KOPII PLIK PLIK-DEBUGOWANIA NAZWA-MODUŁU\n" "POCZĄTEK i ROZMIAR są liczbami szesnastkowymi podającymi zakres adresów " -"modułu. IDENTYFIKATOR-BUDOWANIA jest liczbą szesnastkową dla bitów " -"identyfikatora budowania lub \"-\", jeśli identyfikator jest nieznany; " -"liczba szesnastkowa może być uzupełniona @0xADRES podającym adres, gdzie " -"znajduje się identyfikator, jeśli jest to wiadome. PLIK jest nazwą pliku " +"modułu. IDENTYFIKATOR-KOPII jest liczbą szesnastkową dla bitów " +"identyfikatora kopii lub \"-\", jeśli identyfikator jest nieznany; liczba " +"szesnastkowa może być uzupełniona @0xADRES podającym adres, gdzie znajduje " +"się identyfikator, jeśli jest to wiadome. PLIK jest nazwą pliku " "odnalezionego dla modułu lub \"-\", jeśli go nie odnaleziono lub \".\", " "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." -#~ msgid "unknown tag %hx" -#~ msgstr "nieznany znacznik %hx" - -#~ msgid "unknown user tag %hx" -#~ msgstr "nieznany znacznik użytkownika %hx" - -#~ msgid "unknown attribute %hx" -#~ msgstr "nieznany atrybut %hx" - -#~ msgid "unknown user attribute %hx" -#~ msgstr "nieznany atrybut użytkownika %hx" +#, fuzzy +#~ msgid "cannot attach to process" +#~ msgstr "nie można utworzyć drzewa wyszukiwania" #, fuzzy -#~ msgid "unknown form %#" -#~ msgstr "nieznana forma %" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ "Symbols from %s[%s]:\n" -#~ "\n" -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ "Symbole z %s[%s]:\n" -#~ "\n" +#~ 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ę" diff --git a/po/uk.gmo b/po/uk.gmo index 2667f2baea3bef06517a098af54e0ace65c3df7a..f1f4e041d37f7862b5650fe21031592ca19195f8 100644 GIT binary patch delta 31859 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 delta 29514 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

b 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

ECgFeYnB@Dvz{aI_jGcmC?P-=K*f)a+ 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

QcP4UAfochoFN4tVk$@C_3f@G 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

BIPmkmw+CqSV8W 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, 2010, 2011, 2012. +# Yuri Chornoivan , 2010, 2011, 2012, 2013. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" -"POT-Creation-Date: 2012-08-27 20:34+0200\n" -"PO-Revision-Date: 2012-08-11 17:59+0300\n" +"POT-Creation-Date: 2014-08-27 11:26+0200\n" +"PO-Revision-Date: 2013-10-09 17:50+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -19,18 +19,18 @@ 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:2842 -#: src/readelf.c:3181 src/unstrip.c:2090 src/unstrip.c:2298 +#: lib/xmalloc.c:54 lib/xmalloc.c:68 lib/xmalloc.c:82 src/readelf.c:3098 +#: src/readelf.c:3447 src/readelf.c:8018 src/unstrip.c:2115 src/unstrip.c:2323 #, c-format msgid "memory exhausted" msgstr "пам’ять вичерпано" -#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:49 +#: libasm/asm_error.c:65 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:53 #: libelf/elf_error.c:60 msgid "no error" msgstr "без помилок" -#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:51 +#: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:55 #: libelf/elf_error.c:91 msgid "out of memory" msgstr "нестача пам'яті" @@ -69,7 +69,7 @@ msgstr "помилка під час спроби виведення даних" msgid "no backend support available" msgstr "підтримки серверів не передбачено" -#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:50 +#: libasm/asm_error.c:84 libdw/dwarf_error.c:59 libdwfl/libdwflP.h:54 #: libelf/elf_error.c:63 msgid "unknown error" msgstr "невідома помилка" @@ -166,7 +166,7 @@ msgstr "некоректна версія DWARF" msgid "invalid directory index" msgstr "некоректний покажчик каталогу" -#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:70 +#: libdw/dwarf_error.c:84 libdwfl/libdwflP.h:74 msgid "address out of range" msgstr "некоректна адреса" @@ -186,7 +186,7 @@ msgstr "некоректний номер рядка" msgid "invalid address range index" msgstr "некоректний індекс діапазону адрес" -#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:71 +#: libdw/dwarf_error.c:89 libdwfl/libdwflP.h:75 msgid "no matching address range" msgstr "не виявлено відповідного діапазону адрес" @@ -210,7 +210,7 @@ msgstr "некоректний розділ CFI" msgid "no alternative debug link found" msgstr "альтернативного діагностичного посилання не знайдено" -#: libdwfl/argp-std.c:46 src/unstrip.c:2240 +#: libdwfl/argp-std.c:46 src/unstrip.c:2265 msgid "Input selection options:" msgstr "Вибір параметрів виведення даних:" @@ -246,133 +246,193 @@ msgstr "Ядро з усіма модулями" msgid "Search path for separate debuginfo files" msgstr "Шукати у вказаному каталозі окремі файли debuginfo" -#: libdwfl/argp-std.c:142 +#: libdwfl/argp-std.c:157 msgid "only one of -e, -p, -k, -K, or --core allowed" msgstr "" "можна використовувати лише один за параметрів: -e, -p, -k, -K або --core" -#: libdwfl/argp-std.c:202 -#, c-format -msgid "cannot read ELF core file: %s" -msgstr "не вдалося прочитати файл core ELF: %s" - -#: libdwfl/argp-std.c:220 -msgid "No modules recognized in core file" -msgstr "Не вдалося виявити модулі у файлі core" - -#: libdwfl/argp-std.c:232 +#: libdwfl/argp-std.c:230 msgid "cannot load kernel symbols" msgstr "не вдалося завантажити символи ядра" -#: libdwfl/argp-std.c:236 +#: libdwfl/argp-std.c:234 msgid "cannot find kernel modules" msgstr "не вдалося виявити модулі ядра" -#: libdwfl/argp-std.c:250 +#: libdwfl/argp-std.c:251 msgid "cannot find kernel or modules" msgstr "не вдалося виявити ядро або модулі" -#: libdwfl/libdwflP.h:52 +#: libdwfl/argp-std.c:290 +#, c-format +msgid "cannot read ELF core file: %s" +msgstr "не вдалося прочитати файл core ELF: %s" + +#: libdwfl/argp-std.c:311 +msgid "No modules recognized in core file" +msgstr "Не вдалося виявити модулі у файлі core" + +#: libdwfl/libdwflP.h:56 msgid "See errno" msgstr "Див. errno" -#: libdwfl/libdwflP.h:53 +#: libdwfl/libdwflP.h:57 msgid "See elf_errno" msgstr "Див. elf_errno" -#: libdwfl/libdwflP.h:54 +#: libdwfl/libdwflP.h:58 msgid "See dwarf_errno" msgstr "Див. dwarf_errno" -#: libdwfl/libdwflP.h:55 +#: libdwfl/libdwflP.h:59 msgid "See ebl_errno (XXX missing)" msgstr "Див. ebl_errno (не виявлено XXX)" -#: libdwfl/libdwflP.h:56 +#: libdwfl/libdwflP.h:60 msgid "gzip decompression failed" msgstr "Помилка під час спроби видобування з gzip" -#: libdwfl/libdwflP.h:57 +#: libdwfl/libdwflP.h:61 msgid "bzip2 decompression failed" msgstr "Помилка під час спроби видобування з bzip2" -#: libdwfl/libdwflP.h:58 +#: libdwfl/libdwflP.h:62 msgid "LZMA decompression failed" msgstr "Помилка під час спроби видобування з LZMA" -#: libdwfl/libdwflP.h:59 +#: libdwfl/libdwflP.h:63 msgid "no support library found for machine" msgstr "у системі не виявлено бібліотеки підтримки" -#: libdwfl/libdwflP.h:60 +#: libdwfl/libdwflP.h:64 msgid "Callbacks missing for ET_REL file" msgstr "Немає зворотних викликів для файла ET_REL" -#: libdwfl/libdwflP.h:61 +#: libdwfl/libdwflP.h:65 msgid "Unsupported relocation type" msgstr "Непідтримуваний тип пересування" -#: libdwfl/libdwflP.h:62 +#: libdwfl/libdwflP.h:66 msgid "r_offset is bogus" msgstr "r_offset є фіктивним" -#: libdwfl/libdwflP.h:63 libelf/elf_error.c:111 libelf/elf_error.c:171 +#: libdwfl/libdwflP.h:67 libelf/elf_error.c:111 libelf/elf_error.c:171 msgid "offset out of range" msgstr "перевищення можливого зміщення" -#: libdwfl/libdwflP.h:64 +#: libdwfl/libdwflP.h:68 msgid "relocation refers to undefined symbol" msgstr "пересування посилається на невизначений символ." -#: libdwfl/libdwflP.h:65 +#: libdwfl/libdwflP.h:69 msgid "Callback returned failure" msgstr "Зворотним викликом повернуто помилку" -#: libdwfl/libdwflP.h:66 +#: libdwfl/libdwflP.h:70 msgid "No DWARF information found" msgstr "Не виявлено відомостей DWARF" -#: libdwfl/libdwflP.h:67 +#: libdwfl/libdwflP.h:71 msgid "No symbol table found" msgstr "Не виявлено таблиці символів" -#: libdwfl/libdwflP.h:68 +#: libdwfl/libdwflP.h:72 msgid "No ELF program headers" msgstr "Немає заголовків програми ELF" -#: libdwfl/libdwflP.h:69 +#: libdwfl/libdwflP.h:73 msgid "address range overlaps an existing module" msgstr "діапазон адрес перекриває існуючий модуль" -#: libdwfl/libdwflP.h:72 +#: libdwfl/libdwflP.h:76 msgid "image truncated" msgstr "образ обрізано" -#: libdwfl/libdwflP.h:73 +#: libdwfl/libdwflP.h:77 msgid "ELF file opened" msgstr "Відкритий файл ELF" -#: libdwfl/libdwflP.h:74 +#: libdwfl/libdwflP.h:78 msgid "not a valid ELF file" msgstr "не є коректним файлом ELF" -#: libdwfl/libdwflP.h:75 +#: libdwfl/libdwflP.h:79 msgid "cannot handle DWARF type description" msgstr "не вдалося обробити опис типу DWARF" -#: libdwfl/libdwflP.h:76 +#: libdwfl/libdwflP.h:80 msgid "ELF file does not match build ID" msgstr "Файл ELF не відповідає ідентифікатору збирання" -#: libdwfl/libdwflP.h:77 +#: libdwfl/libdwflP.h:81 msgid "corrupt .gnu.prelink_undo section data" msgstr "дані розділу «.gnu.prelink_undo» пошкоджено" +#: libdwfl/libdwflP.h:82 +msgid "Internal error due to ebl" +msgstr "" + +#: libdwfl/libdwflP.h:83 +msgid "Missing data in core file" +msgstr "" + +#: libdwfl/libdwflP.h:84 +#, fuzzy +msgid "Invalid register" +msgstr "некоректний параметр" + +#: libdwfl/libdwflP.h:85 +msgid "Error reading process memory" +msgstr "" + +#: libdwfl/libdwflP.h:86 +msgid "Couldn't find architecture of any ELF" +msgstr "" + +#: libdwfl/libdwflP.h:87 +msgid "Error parsing /proc filesystem" +msgstr "" + +#: libdwfl/libdwflP.h:88 +#, fuzzy +msgid "Invalid DWARF" +msgstr "некоректний запис DWARF" + +#: libdwfl/libdwflP.h:89 +msgid "Unsupported DWARF" +msgstr "" + +#: libdwfl/libdwflP.h:90 +msgid "Unable to find more threads" +msgstr "" + +#: libdwfl/libdwflP.h:91 +msgid "Dwfl already has attached state" +msgstr "" + +#: libdwfl/libdwflP.h:92 +msgid "Dwfl has no attached state" +msgstr "" + +#: libdwfl/libdwflP.h:93 +msgid "Unwinding not supported for this architecture" +msgstr "" + +#: libdwfl/libdwflP.h:94 +#, fuzzy +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 "Немає сервера" -#: libebl/eblcorenotetypename.c:86 libebl/eblobjecttypename.c:57 +#: libebl/eblcorenotetypename.c:102 libebl/eblobjecttypename.c:57 #: libebl/eblobjnotetypename.c:73 libebl/eblosabiname.c:77 #: libebl/eblsectionname.c:89 libebl/eblsectiontypename.c:119 #: libebl/eblsegmenttypename.c:83 @@ -412,7 +472,7 @@ msgstr " Семафор: " #: libebl/eblobjnote.c:129 #, c-format msgid " Provider: " -msgstr " остачальник: " +msgstr " Постачальник: " #: libebl/eblobjnote.c:131 #, c-format @@ -468,7 +528,7 @@ msgstr "некоректна розмірність вхідного парам msgid "invalid size of destination operand" msgstr "некоректна розмірність вихідного параметра" -#: libelf/elf_error.c:87 src/readelf.c:4697 +#: libelf/elf_error.c:87 src/readelf.c:5190 #, c-format msgid "invalid encoding" msgstr "некоректне кодування" @@ -549,8 +609,8 @@ msgstr "невідповідність полів data/scn" msgid "invalid section header" msgstr "некоректний заголовок розділу" -#: libelf/elf_error.c:187 src/readelf.c:6335 src/readelf.c:6780 -#: src/readelf.c:6881 src/readelf.c:7043 +#: libelf/elf_error.c:187 src/readelf.c:6980 src/readelf.c:7426 +#: src/readelf.c:7527 src/readelf.c:7689 #, c-format msgid "invalid data" msgstr "некоректні дані" @@ -615,31 +675,44 @@ msgid "Also show symbol or section names" msgstr "Показувати також назви символів та розділів" #: src/addr2line.c:64 +#, fuzzy +msgid "Also show symbol and the section names" +msgstr "Показувати також назви символів та розділів" + +#: src/addr2line.c:65 msgid "Also show line table flags" msgstr "Показувати також прапорці рядків таблиці" -#: src/addr2line.c:66 +#: src/addr2line.c:67 msgid "Treat addresses as offsets relative to NAME section." msgstr "Вважати адреси зміщеннями відносно розділу НАЗВА." -#: src/addr2line.c:68 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 +#: src/addr2line.c:69 +msgid "" +"Show all source locations that caused inline expansion of subroutines at the " +"address." +msgstr "" +"Показати усі місця у початковому коді, у яких було виявлено вбудоване " +"розгортання підпрограм за вказаною адресою." + +#: src/addr2line.c:72 src/elfcmp.c:72 src/findtextrel.c:67 src/nm.c:100 #: src/strings.c:75 msgid "Miscellaneous:" msgstr "Інше:" -#: src/addr2line.c:77 +#: src/addr2line.c:81 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "Шукати АДРЕСИ у файлах кодів та даних про рядки (типово, у a.out)." -#: src/addr2line.c:81 +#: src/addr2line.c:85 msgid "[ADDR...]" msgstr "[АДРЕСА...]" -#: src/addr2line.c:181 src/ar.c:289 src/elfcmp.c:662 src/elflint.c:231 +#: src/addr2line.c:196 src/ar.c:289 src/elfcmp.c:662 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:460 src/size.c:211 src/strings.c:219 -#: src/strip.c:213 src/unstrip.c:226 +#: src/ranlib.c:128 src/readelf.c:500 src/size.c:211 src/strings.c:226 +#: src/strip.c:213 src/unstrip.c:233 #, c-format msgid "" "Copyright (C) %s Red Hat, Inc.\n" @@ -651,30 +724,30 @@ msgstr "" "початкових кодах. Умовами ліцензування програми НЕ передбачено жодних " "гарантій, зокрема гарантій працездатності або придатності для певної мети.\n" -#: src/addr2line.c:186 src/ar.c:294 src/elfcmp.c:667 src/elflint.c:236 +#: src/addr2line.c:201 src/ar.c:294 src/elfcmp.c:667 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:465 src/size.c:216 src/strings.c:224 -#: src/strip.c:218 src/unstrip.c:231 +#: src/ranlib.c:133 src/readelf.c:505 src/size.c:216 src/strings.c:231 +#: src/strip.c:218 src/unstrip.c:238 #, c-format msgid "Written by %s.\n" msgstr "Автор — %s.\n" -#: src/addr2line.c:405 +#: src/addr2line.c:474 #, c-format msgid "Section syntax requires exactly one module" msgstr "Синтаксис розділів вимагає точного одного модуля" -#: src/addr2line.c:428 +#: src/addr2line.c:497 #, c-format msgid "offset %# lies outside section '%s'" msgstr "зміщення %# розташовано поза межами розділу «%s»" -#: src/addr2line.c:469 +#: src/addr2line.c:563 #, c-format msgid "cannot find symbol '%s'" msgstr "не вдалося знайти символ «%s»" -#: src/addr2line.c:474 +#: src/addr2line.c:568 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "зміщення %# розташовано поза межами вмісту «%s»" @@ -1117,8 +1190,8 @@ msgstr "Некоректне значення «%s» параметра --gaps." #: src/elfcmp.c:722 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:175 src/strip.c:450 src/strip.c:487 src/unstrip.c:1903 -#: src/unstrip.c:1932 +#: src/strings.c:182 src/strip.c:451 src/strip.c:488 src/unstrip.c:1911 +#: src/unstrip.c:1940 #, c-format msgid "cannot open '%s'" msgstr "не вдалося відкрити «%s»" @@ -1173,161 +1246,161 @@ msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "" "Педантична перевірка файлів ELF на сумісність зі специфікаціями gABI/psABI." -#: src/elflint.c:78 src/readelf.c:113 +#: src/elflint.c:78 src/readelf.c:123 msgid "FILE..." msgstr "ФАЙЛ..." -#: src/elflint.c:151 src/readelf.c:271 +#: src/elflint.c:155 src/readelf.c:292 #, c-format msgid "cannot open input file" msgstr "не вдалося відкрити вхідний файл." -#: src/elflint.c:158 +#: src/elflint.c:162 #, c-format msgid "cannot generate Elf descriptor: %s\n" msgstr "не вдалося створити дескриптор Elf: %s\n" -#: src/elflint.c:177 +#: src/elflint.c:181 #, c-format msgid "error while closing Elf descriptor: %s\n" msgstr "помилка під час спроби закриття дескриптора Elf: %s\n" -#: src/elflint.c:181 +#: src/elflint.c:185 msgid "No errors" msgstr "Без помилок" -#: src/elflint.c:215 src/readelf.c:434 +#: src/elflint.c:219 src/readelf.c:468 msgid "Missing file name.\n" msgstr "Не вказано назви файла.\n" -#: src/elflint.c:294 +#: src/elflint.c:298 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" msgstr " помилка під час спроби вивільнення дескриптора суб-ELF: %s\n" -#: src/elflint.c:302 +#: src/elflint.c:306 #, c-format msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "Не є файлом ELF. Виявлено помилкові магічні байти на початку файла\n" -#: src/elflint.c:363 +#: src/elflint.c:371 #, c-format msgid "e_ident[%d] == %d is no known class\n" msgstr "e_ident[%d] == %d не є відомим класом\n" -#: src/elflint.c:368 +#: src/elflint.c:376 #, c-format msgid "e_ident[%d] == %d is no known data encoding\n" msgstr "e_ident[%d] == %d не є відомим кодуванням даних\n" -#: src/elflint.c:372 +#: src/elflint.c:380 #, c-format msgid "unknown ELF header version number e_ident[%d] == %d\n" msgstr "невідомий номер версії заголовка ELF e_ident[%d] == %d\n" -#: src/elflint.c:378 +#: src/elflint.c:386 #, c-format msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "непідтримуване ABI ОС e_ident[%d] == «%s»\n" -#: src/elflint.c:384 +#: src/elflint.c:392 #, c-format msgid "unsupport ABI version e_ident[%d] == %d\n" msgstr "непідтримувана версія ABI e_ident[%d] == %d\n" -#: src/elflint.c:389 +#: src/elflint.c:397 #, c-format msgid "e_ident[%zu] is not zero\n" msgstr "e_ident[%zu] не дорівнює нулеві\n" -#: src/elflint.c:394 +#: src/elflint.c:402 #, c-format msgid "unknown object file type %d\n" msgstr "невідомий тип об’єктних файлів %d\n" -#: src/elflint.c:401 +#: src/elflint.c:409 #, c-format msgid "unknown machine type %d\n" msgstr "невідомий тип архітектури %d\n" -#: src/elflint.c:405 +#: src/elflint.c:413 #, c-format msgid "unknown object file version\n" msgstr "невідома версія об’єктних файлів\n" -#: src/elflint.c:411 +#: src/elflint.c:419 #, c-format msgid "invalid program header offset\n" msgstr "некоректне зміщення заголовка програми\n" -#: src/elflint.c:413 +#: src/elflint.c:421 #, c-format msgid "executables and DSOs cannot have zero program header offset\n" msgstr "" "виконувані файли і DSO не можуть містити заголовка програми з нульовим " "зміщенням\n" -#: src/elflint.c:417 +#: src/elflint.c:425 #, c-format msgid "invalid number of program header entries\n" msgstr "некоректна кількість записів заголовків програми\n" -#: src/elflint.c:425 +#: src/elflint.c:433 #, c-format msgid "invalid section header table offset\n" msgstr "некоректне зміщення таблиці заголовків розділів\n" -#: src/elflint.c:428 +#: src/elflint.c:436 #, c-format msgid "section header table must be present\n" msgstr "має бути вказано таблицю заголовків розділів\n" -#: src/elflint.c:442 +#: src/elflint.c:450 #, c-format msgid "invalid number of section header table entries\n" msgstr "некоректна кількість записів таблиці заголовків розділів\n" -#: src/elflint.c:459 +#: src/elflint.c:467 #, c-format msgid "invalid section header index\n" msgstr "некоректний індекс заголовка розділу\n" -#: src/elflint.c:473 +#: src/elflint.c:481 #, c-format msgid "invalid number of program header table entries\n" msgstr "некоректна кількість записів таблиці заголовків програми\n" -#: src/elflint.c:482 +#: src/elflint.c:490 #, c-format msgid "invalid machine flags: %s\n" msgstr "некоректні прапорці архітектури: %s\n" -#: src/elflint.c:489 src/elflint.c:506 +#: src/elflint.c:497 src/elflint.c:514 #, c-format msgid "invalid ELF header size: %hd\n" msgstr "некоректний розмір заголовка ELF: %hd\n" -#: src/elflint.c:492 src/elflint.c:509 +#: src/elflint.c:500 src/elflint.c:517 #, c-format msgid "invalid program header size: %hd\n" msgstr "некоректний розмір заголовка програми: %hd\n" -#: src/elflint.c:495 src/elflint.c:512 +#: src/elflint.c:503 src/elflint.c:520 #, c-format msgid "invalid program header position or size\n" msgstr "некоректне розташування або розмір заголовка програми\n" -#: src/elflint.c:498 src/elflint.c:515 +#: src/elflint.c:506 src/elflint.c:523 #, c-format msgid "invalid section header size: %hd\n" msgstr "некоректний розмір заголовка розділу: %hd\n" -#: src/elflint.c:501 src/elflint.c:518 +#: src/elflint.c:509 src/elflint.c:526 #, c-format msgid "invalid section header position or size\n" msgstr "некоректне розташування або розмір заголовка розділу\n" -#: src/elflint.c:562 +#: src/elflint.c:570 #, c-format msgid "" "section [%2d] '%s': section with SHF_GROUP flag set not part of a section " @@ -1336,7 +1409,7 @@ msgstr "" "розділ [%2d] «%s»: розділ з встановленим прапорцем SHF_GROUP не є частиною " "групи розділів\n" -#: src/elflint.c:566 +#: src/elflint.c:574 #, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" @@ -1344,14 +1417,14 @@ msgstr "" "розділ [%2d] «%s»: групу розділів [%2zu] «%s» мало бути визначено до розділу-" "елемента цієї групи\n" -#: src/elflint.c:582 src/elflint.c:1426 src/elflint.c:1476 src/elflint.c:1581 -#: src/elflint.c:2166 src/elflint.c:2680 src/elflint.c:2841 src/elflint.c:2971 -#: src/elflint.c:3143 src/elflint.c:4045 +#: 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:595 src/elflint.c:1588 +#: src/elflint.c:603 src/elflint.c:1621 #, c-format msgid "" "section [%2d] '%s': referenced as string table for section [%2d] '%s' but " @@ -1360,7 +1433,7 @@ msgstr "" "розділ [%2d] «%s»: надано посилання на таблицю рядків розділу [%2d] «%s», " "але типом даних не є SHT_STRTAB\n" -#: src/elflint.c:618 +#: src/elflint.c:626 #, c-format msgid "" "section [%2d] '%s': symbol table cannot have more than one extended index " @@ -1369,38 +1442,38 @@ msgstr "" "розділ [%2d] «%s»: у таблиці символів не може бути більше одного розширеного " "розділу покажчика\n" -#: src/elflint.c:629 +#: src/elflint.c:638 #, c-format msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" msgstr "розділ [%2u] «%s»: розмірність запису не відповідає ElfXX_Sym\n" -#: src/elflint.c:638 +#: src/elflint.c:647 #, c-format msgid "section [%2d] '%s': cannot get symbol %d: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати символ %d: %s\n" -#: src/elflint.c:643 src/elflint.c:646 src/elflint.c:649 src/elflint.c:652 -#: src/elflint.c:655 src/elflint.c:658 +#: src/elflint.c:652 src/elflint.c:655 src/elflint.c:658 src/elflint.c:661 +#: src/elflint.c:664 src/elflint.c:667 #, c-format msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" msgstr "розділ [%2d] «%s»: «%s» у нульовому записі не є нулем\n" -#: src/elflint.c:661 +#: src/elflint.c:670 #, c-format msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" msgstr "розділ [%2d] «%s»: XINDEX для нульового запису не є нулем\n" -#: src/elflint.c:671 +#: src/elflint.c:680 #, c-format msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати символ %zu: %s\n" -#: src/elflint.c:680 +#: src/elflint.c:689 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid name value\n" msgstr "розділ [%2d] «%s»: символ %zu: некоректне значення назви\n" -#: src/elflint.c:694 +#: src/elflint.c:704 #, c-format msgid "" "section [%2d] '%s': symbol %zu: too large section index but no extended " @@ -1409,7 +1482,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: занадто великий покажчик розділу за умови, що " "не визначено розділу розширеного покажчика розділів\n" -#: src/elflint.c:700 +#: src/elflint.c:710 #, c-format msgid "" "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " @@ -1418,29 +1491,29 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: XINDEX використано для індексування, яке не " "відповідає st_shndx (%)\n" -#: src/elflint.c:712 +#: src/elflint.c:722 #, c-format msgid "section [%2d] '%s': symbol %zu: invalid section index\n" msgstr "розділ [%2d] «%s»: символ %zu: некоректний індекс розділу\n" -#: src/elflint.c:720 +#: src/elflint.c:730 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown type\n" msgstr "розділ [%2d] «%s»: символ %zu: невідомий тип\n" -#: src/elflint.c:726 +#: src/elflint.c:736 #, c-format msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" msgstr "розділ [%2d] «%s»: символ %zu: невідома прив’язка символу\n" -#: src/elflint.c:731 +#: src/elflint.c:741 #, c-format msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" msgstr "" "розділ [%2d] «%s»: символ %zu: унікальний символ, що не належить до типу " "об’єктів\n" -#: src/elflint.c:739 +#: src/elflint.c:749 #, c-format msgid "" "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" @@ -1448,14 +1521,14 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: COMMON можна використовувати лише у файлах, " "придатних до пересування\n" -#: src/elflint.c:743 +#: src/elflint.c:753 #, c-format msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" msgstr "" "розділ [%2d] «%s»: символ %zu: використання локальних символів COMMON " "позбавлене сенсу\n" -#: src/elflint.c:747 +#: src/elflint.c:757 #, c-format msgid "" "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" @@ -1463,13 +1536,13 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: використання функції у розділі COMMON " "позбавлене сенсу\n" -#: src/elflint.c:779 +#: 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:785 src/elflint.c:810 src/elflint.c:853 +#: 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 " @@ -1478,7 +1551,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu не повністю відповідає розділу, на який " "посилається, [%2d] «%s»\n" -#: src/elflint.c:794 +#: src/elflint.c:819 #, c-format msgid "" "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " @@ -1487,7 +1560,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: для розділу посилання [%2d] «%s» не " "встановлено прапорець SHF_TLS\n" -#: src/elflint.c:804 src/elflint.c:846 +#: src/elflint.c:829 src/elflint.c:871 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " @@ -1496,14 +1569,14 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: значення st_value поза межами розділу " "посилання, [%2d] «%s»\n" -#: src/elflint.c:831 +#: 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:839 +#: src/elflint.c:864 #, c-format msgid "" "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] " @@ -1512,7 +1585,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: значення st_value перед розділом посилання, " "[%2d] «%s»\n" -#: src/elflint.c:866 +#: src/elflint.c:891 #, c-format msgid "" "section [%2d] '%s': symbol %zu: local symbol outside range described in " @@ -1521,7 +1594,7 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: у sh_info описано локальний символ поза " "діапазоном\n" -#: src/elflint.c:873 +#: src/elflint.c:898 #, c-format msgid "" "section [%2d] '%s': symbol %zu: non-local symbol outside range described in " @@ -1530,12 +1603,12 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: у sh_info описано нелокальний символ поза " "діапазоном\n" -#: src/elflint.c:880 +#: 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:930 +#: src/elflint.c:955 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section " @@ -1544,7 +1617,7 @@ msgstr "" "розділ [%2d] «%s»: символ _GLOBAL_OFFSET_TABLE_ посилається на помилковий " "розділ, [%2d]\n" -#: src/elflint.c:937 +#: src/elflint.c:962 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] " @@ -1553,7 +1626,7 @@ msgstr "" "розділ [%2d] «%s»: символ _GLOBAL_OFFSET_TABLE_ посилається на розділ [%2d] " "'%s'\n" -#: src/elflint.c:953 +#: src/elflint.c:978 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " @@ -1562,7 +1635,7 @@ msgstr "" "розділ [%2d] «%s»: значення символу _GLOBAL_OFFSET_TABLE_ %# не " "відповідає адресі розділу %s %#\n" -#: src/elflint.c:960 +#: src/elflint.c:985 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " @@ -1571,7 +1644,7 @@ msgstr "" "розділ [%2d] «%s»: розмір символу _GLOBAL_OFFSET_TABLE_ % не " "відповідає розміру розділу %s %\n" -#: src/elflint.c:968 +#: src/elflint.c:993 #, c-format msgid "" "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " @@ -1580,7 +1653,7 @@ msgstr "" "розділ [%2d] «%s»: виявлено символ _GLOBAL_OFFSET_TABLE_, але не виявлено " "розділу .got\n" -#: src/elflint.c:984 +#: src/elflint.c:1009 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " @@ -1589,7 +1662,7 @@ msgstr "" "розділ [%2d] «%s»: значення символу _DYNAMIC_ %# не відповідає " "адресі динамічного сегмента %#\n" -#: src/elflint.c:991 +#: src/elflint.c:1016 #, c-format msgid "" "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " @@ -1598,7 +1671,7 @@ msgstr "" "розділ [%2d] «%s»: розмір символу _DYNAMIC % не відповідає розміру " "динамічного сегмента %\n" -#: src/elflint.c:1004 +#: src/elflint.c:1029 #, c-format msgid "" "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" @@ -1607,24 +1680,24 @@ msgstr "" "розділ [%2d] «%s»: символ %zu: символ у динамічній таблиці символів з " "нетиповою видимістю\n" -#: src/elflint.c:1008 +#: 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:1053 +#: 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:1062 src/elflint.c:1114 +#: 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:1087 src/elflint.c:1139 +#: src/elflint.c:1118 src/elflint.c:1170 #, c-format msgid "" "section [%2d] '%s': relative relocations after index %d as specified by " @@ -1633,7 +1706,7 @@ msgstr "" "розділ [%2d] «%s»: відносні пересування після позиції %d, вказаної за " "допомогою DT_RELCOUNT\n" -#: src/elflint.c:1093 src/elflint.c:1145 +#: src/elflint.c:1124 src/elflint.c:1176 #, c-format msgid "" "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " @@ -1642,51 +1715,51 @@ msgstr "" "розділ [%2d] «%s»: безвідносне пересування на позиції %zu; DT_RELCOUNT " "визначено %d відносних пересування\n" -#: src/elflint.c:1105 +#: 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:1187 +#: src/elflint.c:1218 #, c-format msgid "section [%2d] '%s': invalid destination section index\n" msgstr "розділ [%2d] «%s»: некоректний індекс розділу призначення\n" -#: src/elflint.c:1200 +#: src/elflint.c:1230 #, c-format msgid "section [%2d] '%s': invalid destination section type\n" msgstr "розділ [%2d] «%s»: некоректний тип розділу призначення\n" -#: src/elflint.c:1208 +#: 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:1215 +#: 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:1222 +#: 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:1282 +#: src/elflint.c:1313 #, c-format msgid "text relocation flag set but there is no read-only segment\n" msgstr "" "встановлено прапорець пересування тексту, але сегмент придатний лише до " "читання\n" -#: src/elflint.c:1309 +#: src/elflint.c:1340 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid type\n" msgstr "розділ [%2d] «%s»: пересування %zu: некоректний тип\n" -#: src/elflint.c:1317 +#: src/elflint.c:1348 #, c-format msgid "" "section [%2d] '%s': relocation %zu: relocation type invalid for the file " @@ -1695,12 +1768,12 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: некоректний тип пересування для типу " "файла\n" -#: src/elflint.c:1325 +#: src/elflint.c:1356 #, c-format msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" msgstr "розділ [%2d] «%s»: пересування %zu: некоректний індекс символу\n" -#: src/elflint.c:1343 +#: src/elflint.c:1374 #, c-format msgid "" "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " @@ -1709,12 +1782,12 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: з %s можна використовувати лише символ " "«_GLOBAL_OFFSET_TABLE_»\n" -#: src/elflint.c:1360 +#: 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:1375 +#: src/elflint.c:1406 #, c-format msgid "" "section [%2d] '%s': relocation %zu: copy relocation against symbol of type " @@ -1723,7 +1796,7 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: пересування копіювання для символу типу " "%s\n" -#: src/elflint.c:1396 +#: src/elflint.c:1427 #, c-format msgid "" "section [%2d] '%s': relocation %zu: read-only section modified but text " @@ -1732,61 +1805,61 @@ msgstr "" "розділ [%2d] «%s»: пересування %zu: змінено придатний лише для читання " "розділ, але не встановлено прапорець пересування тексту\n" -#: src/elflint.c:1411 +#: 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:1450 src/elflint.c:1500 +#: 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:1576 +#: src/elflint.c:1609 #, c-format msgid "more than one dynamic section present\n" msgstr "вказано більше одного динамічного розділу\n" -#: src/elflint.c:1594 +#: 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:1599 src/elflint.c:1882 +#: 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:1609 +#: 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:1617 +#: 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:1624 +#: src/elflint.c:1658 #, c-format msgid "section [%2d] '%s': entry %zu: unknown tag\n" msgstr "розділ [%2d] «%s»: запис %zu: невідома мітка\n" -#: src/elflint.c:1635 +#: 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:1645 +#: 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:1663 +#: src/elflint.c:1697 #, c-format msgid "" "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" @@ -1794,7 +1867,7 @@ msgstr "" "розділ [%2d] «%s»: запис %zu: значенням DT_PLTREL має бути DT_REL або " "DT_RELA\n" -#: src/elflint.c:1676 +#: src/elflint.c:1710 #, c-format msgid "" "section [%2d] '%s': entry %zu: pointer does not match address of section " @@ -1803,7 +1876,7 @@ msgstr "" "розділ [%2d] «%s»: розділ %zu: вказівник не відповідає адресі розділу [%2d] " "«%s», на яку посилається sh_link\n" -#: src/elflint.c:1719 +#: src/elflint.c:1753 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" @@ -1811,7 +1884,7 @@ msgstr "" "розділ [%2d] «%s»: запис %zu: значення %s має вказувати на завантажений " "сегмент\n" -#: src/elflint.c:1734 +#: src/elflint.c:1768 #, c-format msgid "" "section [%2d] '%s': entry %zu: %s value must be valid offset in section " @@ -1820,48 +1893,48 @@ msgstr "" "розділ [%2d] «%s»: запис %zu: значенням %s має бути коректне зміщення у " "розділі [%2d] «%s»\n" -#: src/elflint.c:1754 src/elflint.c:1782 +#: 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:1766 +#: src/elflint.c:1800 #, c-format msgid "section [%2d] '%s': mandatory tag %s not present\n" msgstr "розділ [%2d] «%s»: немає обов’язкової мітки %s\n" -#: src/elflint.c:1775 +#: src/elflint.c:1809 #, c-format msgid "section [%2d] '%s': no hash section present\n" msgstr "розділ [%2d] «%s»: не виявлено розділу хешів\n" -#: src/elflint.c:1790 src/elflint.c:1797 +#: 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:1807 src/elflint.c:1811 +#: 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:1817 +#: 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:1828 src/elflint.c:1832 src/elflint.c:1836 src/elflint.c:1840 +#: 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:1852 +#: src/elflint.c:1886 #, c-format msgid "" "section [%2d] '%s': only relocatable files can have extended section index\n" @@ -1869,7 +1942,7 @@ msgstr "" "розділ [%2d] «%s»: розширений розділ покажчика можуть мати лише файли, " "придатні до пересування\n" -#: src/elflint.c:1862 +#: src/elflint.c:1896 #, c-format msgid "" "section [%2d] '%s': extended section index section not for symbol table\n" @@ -1877,23 +1950,23 @@ msgstr "" "розділ [%2d] «%s»: розділ розширеного покажчика розділів не призначено для " "таблиць символів\n" -#: src/elflint.c:1867 +#: src/elflint.c:1901 #, c-format msgid "cannot get data for symbol section\n" msgstr "не вдалося отримати дані для розділу символів\n" -#: src/elflint.c:1870 +#: 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:1877 +#: 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:1892 +#: src/elflint.c:1928 #, c-format msgid "" "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " @@ -1902,24 +1975,24 @@ msgstr "" "розділ [%2d] «%s»: розширений покажчик розділів у розділі [%2zu] «%s» " "посилається на ту саму таблицю розділів\n" -#: src/elflint.c:1903 +#: src/elflint.c:1945 #, c-format msgid "symbol 0 should have zero extended section index\n" msgstr "символу 0 має відповідати нульовий індекс розширеного розділу\n" -#: src/elflint.c:1915 +#: src/elflint.c:1957 #, c-format msgid "cannot get data for symbol %zu\n" msgstr "не вдалося отримати дані для символу %zu\n" -#: src/elflint.c:1920 +#: src/elflint.c:1962 #, c-format msgid "extended section index is % but symbol index is not XINDEX\n" msgstr "" "індекс розширеного розділу дорівнює %, але індекс символу не є " "XINDEX\n" -#: src/elflint.c:1936 src/elflint.c:1977 +#: 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" @@ -1927,51 +2000,51 @@ msgstr "" "розділ [%2d] «%s»: розділ таблиці хешів занадто малий (розмір %ld, мало бути " "— %ld)\n" -#: src/elflint.c:1948 src/elflint.c:1989 +#: 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:1957 src/elflint.c:1998 +#: 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:1963 +#: 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:2004 +#: src/elflint.c:2065 #, c-format msgid "section [%2d] '%s': hash chain reference % out of bounds\n" msgstr "" "розділ [%2d] «%s»: посилання ланцюжка хешів % лежить поза межами " "діапазону\n" -#: src/elflint.c:2019 +#: 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:2030 -#, c-format +#: src/elflint.c:2092 +#, fuzzy, c-format msgid "" "section [%2d] '%s': hash table section is too small (is %ld, expected at " -"least%ld)\n" +"least %ld)\n" msgstr "" "розділ [%2d] «%s»: розділ таблиці хешів занадто малий (розмір %ld, мало бути " "не менше %ld)\n" -#: src/elflint.c:2038 +#: 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:2070 +#: src/elflint.c:2132 #, c-format msgid "" "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" @@ -1979,7 +2052,7 @@ msgstr "" "розділ [%2d] '%s': ланцюжок хешів для блоку %zu розташовано нижче за позицію " "відхилення індексу символу\n" -#: src/elflint.c:2091 +#: src/elflint.c:2153 #, c-format msgid "" "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " @@ -1988,7 +2061,7 @@ msgstr "" "розділ [%2d] «%s»: символ %u, на який посилається ланцюжок у блоці %zu не " "визначено\n" -#: src/elflint.c:2102 +#: src/elflint.c:2164 #, c-format msgid "" "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" @@ -1996,14 +2069,14 @@ msgstr "" "розділ [%2d] «%s»: значення хешу для символу %u у ланцюжку для блоку %zu є " "помилковим\n" -#: src/elflint.c:2133 +#: 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:2138 +#: src/elflint.c:2200 #, c-format msgid "" "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" @@ -2011,36 +2084,36 @@ msgstr "" "розділ [%2d] «%s»: посилання на символ у ланцюжку для блоку %zu лежить поза " "межами діапазону\n" -#: src/elflint.c:2144 +#: 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:2157 +#: src/elflint.c:2219 #, c-format msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" msgstr "" "розділ [%2d] «%s»: придатні до пересування файли не можуть містити таблиць " "хешів\n" -#: src/elflint.c:2175 +#: 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:2183 +#: src/elflint.c:2245 #, c-format msgid "section [%2d] '%s': hash table entry size incorrect\n" msgstr "розділ [%2d] «%s»: розмірність запису таблиці хешів є некоректною\n" -#: src/elflint.c:2188 +#: src/elflint.c:2250 #, c-format msgid "section [%2d] '%s': not marked to be allocated\n" msgstr "розділ [%2d] «%s»: не позначено для пересування\n" -#: src/elflint.c:2193 +#: src/elflint.c:2255 #, c-format msgid "" "section [%2d] '%s': hash table has not even room for initial administrative " @@ -2049,17 +2122,17 @@ msgstr "" "розділ [%2d] «%s»: у таблиці хешів виявлено незвичайне розташування " "початкових адміністративних записів\n" -#: src/elflint.c:2241 +#: 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:2319 src/elflint.c:2323 +#: 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:2330 +#: src/elflint.c:2392 #, c-format msgid "" "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash " @@ -2068,7 +2141,7 @@ msgstr "" "виявлено посилання на символ %d у новій таблиці хешів у [%2zu] «%s», але " "його немає у старій таблиці хешів у [%2zu] «%s»\n" -#: src/elflint.c:2342 +#: src/elflint.c:2404 #, c-format msgid "" "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash " @@ -2077,12 +2150,12 @@ msgstr "" "виявлено посилання на символ %d у старій таблиці хешів у [%2zu] «%s», але " "його немає у новій таблиці хешів у [%2zu] «%s»\n" -#: src/elflint.c:2358 +#: 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:2378 +#: src/elflint.c:2440 #, c-format msgid "" "section [%2d] '%s': section groups only allowed in relocatable object files\n" @@ -2090,90 +2163,90 @@ msgstr "" "розділ [%2d] «%s»: групи розділів передбачено лише для придатних до " "пересування об’єктних файлах\n" -#: src/elflint.c:2389 +#: src/elflint.c:2451 #, c-format msgid "section [%2d] '%s': cannot get symbol table: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати таблицю символів: %s\n" -#: src/elflint.c:2394 +#: 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:2400 +#: 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:2405 +#: src/elflint.c:2467 #, c-format msgid "section [%2d] '%s': sh_flags not zero\n" msgstr "розділ [%2d] «%s»: sh_flags не є нульовим\n" -#: src/elflint.c:2412 +#: src/elflint.c:2474 #, c-format msgid "section [%2d] '%s': cannot get symbol for signature\n" msgstr "розділ [%2d] «%s»: не вдалося отримати символ для підпису\n" -#: src/elflint.c:2417 +#: src/elflint.c:2479 #, c-format msgid "section [%2d] '%s': signature symbol cannot be empty string\n" msgstr "розділ [%2d] «%s»: символ підпису не може бути порожнім рядком\n" -#: src/elflint.c:2423 +#: 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:2429 +#: src/elflint.c:2491 #, c-format msgid "section [%2d] '%s': cannot get data: %s\n" msgstr "розділ [%2d] «%s»: не вдалося отримати дані: %s\n" -#: src/elflint.c:2438 +#: 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:2443 +#: src/elflint.c:2505 #, c-format msgid "section [%2d] '%s': section group without flags word\n" msgstr "розділ [%2d] «%s»: група розділів без значення типу word прапорців\n" -#: src/elflint.c:2449 +#: src/elflint.c:2511 #, c-format msgid "section [%2d] '%s': section group without member\n" msgstr "розділ [%2d] «%s»: група розділів без елементів\n" -#: src/elflint.c:2453 +#: src/elflint.c:2515 #, c-format msgid "section [%2d] '%s': section group with only one member\n" msgstr "розділ [%2d] «%s»: група розділів, що містить лише один елемент\n" -#: src/elflint.c:2464 +#: src/elflint.c:2526 #, c-format msgid "section [%2d] '%s': unknown section group flags\n" msgstr "розділ [%2d] «%s»: невідомі прапорці групи розділів\n" -#: src/elflint.c:2476 +#: 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:2485 +#: 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:2492 +#: 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:2498 +#: src/elflint.c:2560 #, c-format msgid "" "section [%2d] '%s': element %Zu references section [%2d] '%s' without " @@ -2182,12 +2255,12 @@ msgstr "" "розділ [%2d] «%s»: елемент %Zu посилається на розділ [%2d] «%s» без " "встановленого прапорця SHF_GROUP\n" -#: src/elflint.c:2505 +#: 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:2694 +#: src/elflint.c:2756 #, c-format msgid "" "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no " @@ -2196,7 +2269,7 @@ msgstr "" "розділ [%2d] «%s» посилається у sh_link на розділ [%2d] «%s», який не має " "динамічної таблиці символів\n" -#: src/elflint.c:2705 +#: src/elflint.c:2768 #, c-format msgid "" "section [%2d] '%s' has different number of entries than symbol table [%2d] " @@ -2205,28 +2278,28 @@ msgstr "" "кількість записів у розділі [%2d] «%s» відрізняється від кількості у таблиці " "символів [%2d] «%s»\n" -#: src/elflint.c:2721 +#: 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:2737 +#: 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:2745 +#: 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:2759 +#: 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:2764 +#: src/elflint.c:2827 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for defined version\n" @@ -2234,7 +2307,7 @@ msgstr "" "розділ [%2d] «%s»: символ %d: індекси версії %d призначено до визначеної " "версії\n" -#: src/elflint.c:2774 +#: src/elflint.c:2837 #, c-format msgid "" "section [%2d] '%s': symbol %d: version index %d is for requested version\n" @@ -2242,45 +2315,45 @@ msgstr "" "розділ [%2d] «%s»: символ %d: індекс версії %d призначено для версії, на яку " "надійшов запит\n" -#: src/elflint.c:2826 +#: src/elflint.c:2889 #, c-format msgid "more than one version reference section present\n" msgstr "виявлено більше за один розділ посилань на версії\n" -#: src/elflint.c:2834 src/elflint.c:2963 +#: 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:2857 src/elflint.c:3015 +#: 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:2863 src/elflint.c:3021 +#: 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:2871 +#: 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:2879 +#: src/elflint.c:2942 #, c-format msgid "section [%2d] '%s': entry %d references unknown dependency\n" msgstr "розділ [%2d] «%s»: запис %d посилається на невідому залежність\n" -#: src/elflint.c:2891 +#: 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:2898 +#: src/elflint.c:2961 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " @@ -2289,7 +2362,7 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d містить некоректне " "посилання на назву\n" -#: src/elflint.c:2905 +#: src/elflint.c:2968 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: " @@ -2298,7 +2371,7 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d має помилкове значення " "хешу: %#x, мало бути %#x\n" -#: src/elflint.c:2915 +#: src/elflint.c:2978 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " @@ -2307,7 +2380,7 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d містить дублікати назви " "версії «%s»\n" -#: src/elflint.c:2926 +#: src/elflint.c:2989 #, c-format msgid "" "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" @@ -2315,50 +2388,50 @@ msgstr "" "розділ [%2d] «%s»: допоміжний запис %d запису %d має помилкове наступне " "поле\n" -#: src/elflint.c:2942 src/elflint.c:3100 +#: 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:2955 +#: src/elflint.c:3018 #, c-format msgid "more than one version definition section present\n" msgstr "виявлено більше за один розділ визначення версій\n" -#: src/elflint.c:3000 +#: src/elflint.c:3063 #, c-format msgid "section [%2d] '%s': more than one BASE definition\n" msgstr "розділ [%2d] «%s»: повторне визначення BASE\n" -#: src/elflint.c:3004 +#: 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:3010 +#: src/elflint.c:3073 #, c-format msgid "section [%2d] '%s': entry %d has unknown flag\n" msgstr "розділ [%2d] «%s»: невідомий прапорець запису %d\n" -#: src/elflint.c:3034 +#: 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:3041 +#: 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:3050 +#: 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:3069 +#: src/elflint.c:3132 #, c-format msgid "" "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" @@ -2366,53 +2439,53 @@ msgstr "" "розділ [%2d] «%s»: запис %d містить некоректне посилання на назву у " "допоміжних даних\n" -#: src/elflint.c:3084 +#: 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:3106 +#: src/elflint.c:3169 #, c-format msgid "section [%2d] '%s': no BASE definition\n" msgstr "розділ [%2d] «%s»: немає визначення BASE\n" -#: src/elflint.c:3122 +#: src/elflint.c:3185 #, c-format msgid "section [%2d] '%s': unknown parent version '%s'\n" msgstr "розділ [%2d] «%s»: невідома основна версія «%s»\n" -#: src/elflint.c:3135 +#: src/elflint.c:3198 #, c-format msgid "section [%2d] '%s': empty object attributes section\n" msgstr "розділ [%2d] «%s»: порожній розділ атрибутів об’єкта\n" -#: src/elflint.c:3156 +#: src/elflint.c:3219 #, c-format msgid "section [%2d] '%s': unrecognized attribute format\n" msgstr "розділ [%2d] «%s»: не вдалося визначити формат атрибутів\n" -#: src/elflint.c:3172 +#: 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:3181 +#: 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:3193 +#: 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:3210 +#: src/elflint.c:3273 #, c-format msgid "" "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" @@ -2420,12 +2493,12 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: незавершене поле ULEB128 у тезі підрозділу " "атрибутів\n" -#: src/elflint.c:3219 +#: src/elflint.c:3282 #, c-format msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" msgstr "розділ [%2d] «%s»: зміщення %zu: обрізаний розділ атрибутів\n" -#: src/elflint.c:3228 +#: src/elflint.c:3291 #, c-format msgid "" "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" @@ -2433,14 +2506,14 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: поле нульового розміру у підрозділі " "атрибутів\n" -#: src/elflint.c:3241 +#: 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:3252 +#: src/elflint.c:3315 #, c-format msgid "" "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" @@ -2448,35 +2521,35 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: підрозділ атрибутів містить неочікуваний " "теґ %u\n" -#: src/elflint.c:3270 +#: 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:3281 +#: 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:3294 +#: 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:3298 +#: src/elflint.c:3361 #, c-format msgid "" "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" msgstr "" "розділ [%2d] «%s»: зміщення %zu: невідоме значення %s атрибуту %\n" -#: src/elflint.c:3308 +#: 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:3314 +#: src/elflint.c:3377 #, c-format msgid "" "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" @@ -2484,47 +2557,47 @@ msgstr "" "розділ [%2d] «%s»: зміщення %zu: зайві байти після останнього розділу " "атрибутів\n" -#: src/elflint.c:3403 +#: src/elflint.c:3466 #, c-format msgid "cannot get section header of zeroth section\n" msgstr "не вдалося отримати заголовок нульового розділу\n" -#: src/elflint.c:3407 +#: src/elflint.c:3470 #, c-format msgid "zeroth section has nonzero name\n" msgstr "нульовий розділ має ненульову назву\n" -#: src/elflint.c:3409 +#: src/elflint.c:3472 #, c-format msgid "zeroth section has nonzero type\n" msgstr "нульовий розділ має ненульовий тип\n" -#: src/elflint.c:3411 +#: src/elflint.c:3474 #, c-format msgid "zeroth section has nonzero flags\n" msgstr "нульовий розділ має ненульові прапорці\n" -#: src/elflint.c:3413 +#: src/elflint.c:3476 #, c-format msgid "zeroth section has nonzero address\n" msgstr "нульовий розділ має ненульову адресу\n" -#: src/elflint.c:3415 +#: src/elflint.c:3478 #, c-format msgid "zeroth section has nonzero offset\n" msgstr "нульовий розділ має ненульове зміщення\n" -#: src/elflint.c:3417 +#: src/elflint.c:3480 #, c-format msgid "zeroth section has nonzero align value\n" msgstr "нульовий розділ має ненульове значення вирівнювання\n" -#: src/elflint.c:3419 +#: src/elflint.c:3482 #, c-format msgid "zeroth section has nonzero entry size value\n" msgstr "нульовий розділ має ненульове значення розміру запису\n" -#: src/elflint.c:3422 +#: src/elflint.c:3485 #, c-format msgid "" "zeroth section has nonzero size value while ELF header has nonzero shnum " @@ -2533,7 +2606,7 @@ msgstr "" "нульовий розділ має ненульове значення розміру, хоча заголовок ELF ман " "ненульове значення shnum\n" -#: src/elflint.c:3426 +#: src/elflint.c:3489 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2542,7 +2615,7 @@ msgstr "" "нульовий розділ має ненульове значення компонування, хоча у заголовку ELF " "немає сигналу переповнення у shstrndx\n" -#: src/elflint.c:3430 +#: src/elflint.c:3493 #, c-format msgid "" "zeroth section has nonzero link value while ELF header does not signal " @@ -2551,28 +2624,28 @@ msgstr "" "нульовий розділ має ненульове значення компонування, хоча у заголовку ELF " "немає сигналу переповнення у phnum\n" -#: src/elflint.c:3447 +#: 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:3456 +#: src/elflint.c:3519 #, c-format msgid "section [%2zu]: invalid name\n" msgstr "розділ [%2zu]: некоректна назва\n" -#: src/elflint.c:3483 +#: 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:3499 +#: 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:3516 +#: src/elflint.c:3579 #, c-format msgid "" "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" @@ -2580,12 +2653,12 @@ msgstr "" "розділ [%2zu] «%s» має помилкові прапорці: мало бути %s, можливо, %s, але " "маємо %s\n" -#: src/elflint.c:3534 +#: src/elflint.c:3597 #, c-format msgid "section [%2zu] '%s' present in object file\n" msgstr "у об’єктному файлі виявлено розділ [%2zu] «%s»\n" -#: src/elflint.c:3540 src/elflint.c:3572 +#: 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" @@ -2593,7 +2666,7 @@ msgstr "" "у розділ [%2zu] «%s» встановлено прапорець SHF_ALLOC, але немає придатного " "до завантаження сегмента\n" -#: src/elflint.c:3545 src/elflint.c:3577 +#: src/elflint.c:3608 src/elflint.c:3640 #, c-format msgid "" "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " @@ -2602,7 +2675,7 @@ msgstr "" "у розділі [%2zu] «%s» не встановлено прапорець SHF_ALLOC, але є придатні до " "завантаження сегменти\n" -#: src/elflint.c:3553 +#: src/elflint.c:3616 #, c-format msgid "" "section [%2zu] '%s' is extension section index table in non-object file\n" @@ -2610,22 +2683,22 @@ msgstr "" "розділ [%2zu] «%s» є таблицею-покажчиком розділу розширень у файлі, який не " "є об’єктним\n" -#: src/elflint.c:3596 +#: src/elflint.c:3659 #, c-format msgid "section [%2zu] '%s': size not multiple of entry size\n" msgstr "розділ [%2zu] «%s»: розмір не є кратним до розміру запису\n" -#: src/elflint.c:3601 +#: src/elflint.c:3664 #, c-format msgid "cannot get section header\n" msgstr "не вдалося отримати заголовок розділу\n" -#: src/elflint.c:3611 +#: src/elflint.c:3674 #, c-format msgid "section [%2zu] '%s' has unsupported type %d\n" msgstr "розділ [%2zu] «%s» належить до непідтримуваного типу %d\n" -#: src/elflint.c:3625 +#: src/elflint.c:3688 #, c-format msgid "" "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" @@ -2633,52 +2706,52 @@ msgstr "" "розділ [%2zu] «%s» містить некоректні специфічні для процесора прапорці " "%#\n" -#: src/elflint.c:3632 +#: src/elflint.c:3695 #, c-format msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" msgstr "розділ [%2zu] «%s» містить невідомі прапорці %#\n" -#: src/elflint.c:3640 +#: 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:3648 +#: src/elflint.c:3711 #, c-format msgid "section [%2zu] '%s': invalid section reference in link value\n" msgstr "" "розділ [%2zu] «%s»: некоректне посилання на розділ у значенні компонування\n" -#: src/elflint.c:3653 +#: src/elflint.c:3716 #, c-format msgid "section [%2zu] '%s': invalid section reference in info value\n" msgstr "" "розділ [%2zu] «%s»: некоректне посилання на розділ у значенні відомостей\n" -#: src/elflint.c:3660 +#: 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:3665 +#: 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:3683 +#: 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:3692 +#: src/elflint.c:3755 #, c-format msgid "section [%2zu] '%s' is both executable and writable\n" msgstr "розділ [%2zu] «%s» є одночасно виконуваним і придатним до запису\n" -#: src/elflint.c:3721 +#: src/elflint.c:3784 #, c-format msgid "" "section [%2zu] '%s' not fully contained in segment of program header entry " @@ -2687,7 +2760,7 @@ msgstr "" "розділ [%2zu] «%s» не повністю міститься у сегменті запису заголовка " "програми %d\n" -#: src/elflint.c:3729 +#: src/elflint.c:3792 #, c-format msgid "" "section [%2zu] '%s' has type NOBITS but is read from the file in segment of " @@ -2696,7 +2769,7 @@ msgstr "" "розділ [%2zu] «%s» належить до типу NOBITS, але його читання виконується з " "файла у сегментів запису заголовка програми %d\n" -#: src/elflint.c:3738 +#: src/elflint.c:3801 #, c-format msgid "" "section [%2zu] '%s' has not type NOBITS but is not read from the file in " @@ -2705,19 +2778,19 @@ msgstr "" "розділ [%2zu] «%s» не належить до типу NOBITS, але його читання не " "виконується з файла у сегментів запису заголовка програми %d\n" -#: src/elflint.c:3749 +#: 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:3759 +#: 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:3769 +#: src/elflint.c:3832 #, c-format msgid "" "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" @@ -2725,7 +2798,7 @@ msgstr "" "розділ [%2zu] «%s»: встановлено прапорець alloc, але розділ не перебуває у " "жодному завантаженому сегменті\n" -#: src/elflint.c:3775 +#: src/elflint.c:3838 #, c-format msgid "" "section [%2zu] '%s': ELF header says this is the section header string table " @@ -2734,7 +2807,7 @@ msgstr "" "розділ [%2zu] «%s»: заголовок ELF повідомляє про те, що це таблиця рядків " "заголовка розділу, але ця таблиця не належить до типу SHT_TYPE\n" -#: src/elflint.c:3783 +#: src/elflint.c:3846 #, c-format msgid "" "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" @@ -2742,17 +2815,17 @@ msgstr "" "розділ [%2zu] «%s»: придатні до пересування файли не можуть містити " "динамічних таблиць символів\n" -#: src/elflint.c:3834 +#: src/elflint.c:3897 #, c-format msgid "more than one version symbol table present\n" msgstr "виявлено більше за одну таблицю символів версій\n" -#: src/elflint.c:3857 +#: src/elflint.c:3920 #, c-format msgid "INTERP program header entry but no .interp section\n" msgstr "існує запис заголовка програми INTERP, але не розділ .interp\n" -#: src/elflint.c:3868 +#: src/elflint.c:3931 #, c-format msgid "" "loadable segment [%u] is executable but contains no executable sections\n" @@ -2760,14 +2833,14 @@ msgstr "" "придатний до завантаження сегмент [%u] є виконуваним, але не містить " "виконуваних розділів\n" -#: src/elflint.c:3874 +#: src/elflint.c:3937 #, c-format msgid "loadable segment [%u] is writable but contains no writable sections\n" msgstr "" "придатний до завантаження розділ [%u] є придатним до запису, але не містить " "придатних до запису розділів\n" -#: src/elflint.c:3885 +#: src/elflint.c:3948 #, c-format msgid "" "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " @@ -2776,24 +2849,24 @@ msgstr "" "немає розділу .gnu.versym, хоча існує розділ .gnu.versym_d або .gnu." "versym_r\n" -#: src/elflint.c:3898 +#: src/elflint.c:3961 #, c-format msgid "duplicate version index %d\n" msgstr "дублікат індексу версії %d\n" -#: src/elflint.c:3912 +#: 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:3961 +#: src/elflint.c:4024 #, c-format msgid "phdr[%d]: unknown core file note type % at offset %\n" msgstr "" "phdr[%d]: невідомий тип нотатки файла core % за зміщенням %\n" -#: src/elflint.c:3965 +#: src/elflint.c:4028 #, c-format msgid "" "section [%2d] '%s': unknown core file note type % at offset %Zu\n" @@ -2801,13 +2874,13 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки файла core % за зміщенням " "%Zu\n" -#: src/elflint.c:3988 +#: src/elflint.c:4051 #, c-format msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" msgstr "" "phdr[%d]: невідомий тип нотатки об’єктного файла % за зміщенням %Zu\n" -#: src/elflint.c:3992 +#: src/elflint.c:4055 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % at offset %Zu\n" @@ -2815,39 +2888,39 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки об’єктного файла % за " "зміщенням %Zu\n" -#: src/elflint.c:4009 +#: 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:4028 +#: 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:4031 +#: src/elflint.c:4094 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: зайві % байтів після останнього запису нотатки\n" -#: src/elflint.c:4052 +#: 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:4059 +#: src/elflint.c:4122 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "розділ [%2d] «%s»: не вдалося отримати вміст розділу нотаток\n" -#: src/elflint.c:4062 +#: src/elflint.c:4125 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" "розділ [%2d] «%s»: додаткові % байтів після останньої нотатки\n" -#: src/elflint.c:4080 +#: src/elflint.c:4143 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -2855,135 +2928,135 @@ msgstr "" "заголовки програм можуть бути лише у виконуваних файлів, об’єктних файлів " "спільного використання або файлів core\n" -#: src/elflint.c:4095 +#: src/elflint.c:4158 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "не вдалося отримати запис заголовка програми %d: %s\n" -#: src/elflint.c:4104 +#: src/elflint.c:4167 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "запис заголовка програми %d: невідомий тип запису заголовка програми " "%#\n" -#: src/elflint.c:4115 +#: src/elflint.c:4178 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "більше за один запис INTERP у заголовку програми\n" -#: src/elflint.c:4123 +#: src/elflint.c:4186 #, c-format msgid "more than one TLS entry in program header\n" msgstr "більше за один запис TLS у заголовку програми\n" -#: src/elflint.c:4130 +#: src/elflint.c:4193 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "у статичному виконуваному файлі не може бути динамічних розділів\n" -#: src/elflint.c:4144 +#: src/elflint.c:4207 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "посилання на динамічний розділ у заголовку програми має помилкове зміщення\n" -#: src/elflint.c:4147 +#: src/elflint.c:4210 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" "розміри динамічного розділу у заголовку програми та у заголовку розділу не " "збігаються\n" -#: src/elflint.c:4157 +#: src/elflint.c:4220 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "більше за один запис GNU_RELRO у заголовку програми\n" -#: src/elflint.c:4178 +#: src/elflint.c:4241 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" "придатний до завантаження сегмент, до якого звертається GNU_RELRO, " "непридатний до запису\n" -#: src/elflint.c:4181 +#: 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:4189 src/elflint.c:4212 +#: 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:4218 +#: 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:4242 +#: src/elflint.c:4305 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "посилання на таблицю вікон викликів у заголовку програми має помилкове " "зміщення\n" -#: src/elflint.c:4245 +#: src/elflint.c:4308 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "розміри таблиці пошуку вікон виклику у заголовку програми та у заголовку " "розділу не збігаються\n" -#: src/elflint.c:4258 +#: 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:4266 +#: src/elflint.c:4329 #, c-format msgid "call frame search table must be allocated\n" msgstr "таблицю пошуку вікон викликів має бути розміщено у пам’яті\n" -#: src/elflint.c:4269 +#: src/elflint.c:4332 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "розділ [%2zu] «%s» має бути розміщено у пам’яті\n" -#: src/elflint.c:4273 +#: src/elflint.c:4336 #, c-format msgid "call frame search table must not be writable\n" msgstr "таблиця пошуку вікон викликів не повинна бути придатною до запису\n" -#: src/elflint.c:4276 +#: src/elflint.c:4339 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до запису\n" -#: src/elflint.c:4281 +#: src/elflint.c:4344 #, c-format msgid "call frame search table must not be executable\n" msgstr "таблиця пошуку вікон викликів не повинна бути придатною до виконання\n" -#: src/elflint.c:4284 +#: src/elflint.c:4347 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до виконання\n" -#: src/elflint.c:4295 +#: src/elflint.c:4358 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "запис заголовка програми %d: розмір файла перевищує об’єм пам’яті\n" -#: src/elflint.c:4302 +#: 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:4305 +#: src/elflint.c:4368 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -2992,7 +3065,7 @@ msgstr "" "запис заголовка програми %d: зміщення у файлі і віртуальна адреса не " "співвідносяться з вирівнюванням\n" -#: src/elflint.c:4318 +#: src/elflint.c:4381 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3001,12 +3074,12 @@ msgstr "" "виконуваний модуль/DSO з розділом .eh_frame_hdr не містить запису заголовка " "програми PT_GNU_EH_FRAME" -#: src/elflint.c:4352 +#: src/elflint.c:4415 #, c-format msgid "cannot read ELF header: %s\n" msgstr "не вдалося прочитати заголовок ELF: %s\n" -#: src/elflint.c:4378 +#: src/elflint.c:4441 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3537,7 +3610,8 @@ msgstr "Попередження: тип «%s» змінився з %s у %s н msgid "Warning: size of `%s' changed from % in %s to % in %s" msgstr "Попередження: розмір «%s» змінено з % у %s на % у %s" -#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:640 src/strip.c:562 +#: src/ldgeneric.c:651 src/ldgeneric.c:1112 src/readelf.c:527 +#: src/readelf.c:829 src/strip.c:563 #, c-format msgid "cannot determine number of sections: %s" msgstr "не вдалося визначити кількість розділів: %s" @@ -3779,7 +3853,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:1818 #, c-format msgid "cannot update ELF header: %s" msgstr "не вдалося оновити заголовок ELF: %s" @@ -3946,7 +4020,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:2124 +#: src/strip.c:2155 #, c-format msgid "while closing '%s'" msgstr "під час закриття «%s»" @@ -3989,17 +4063,17 @@ msgstr "%s%s%s: не вдалося розпізнати формат файла msgid "cannot create search tree" msgstr "не вдалося створити дерево пошуку" -#: src/nm.c:757 src/nm.c:1156 src/objdump.c:787 src/readelf.c:896 -#: src/readelf.c:1039 src/readelf.c:1187 src/readelf.c:1369 src/readelf.c:1569 -#: src/readelf.c:1755 src/readelf.c:1965 src/readelf.c:2219 src/readelf.c:2285 -#: src/readelf.c:2363 src/readelf.c:2861 src/readelf.c:2897 src/readelf.c:2959 -#: src/readelf.c:7270 src/readelf.c:8176 src/readelf.c:8323 src/readelf.c:8391 -#: src/size.c:417 src/size.c:491 src/strip.c:502 +#: src/nm.c:757 src/nm.c:1163 src/objdump.c:787 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:2196 src/readelf.c:2454 +#: src/readelf.c:2524 src/readelf.c:2606 src/readelf.c:3117 src/readelf.c:3153 +#: src/readelf.c:3216 src/readelf.c:7920 src/readelf.c:9002 src/readelf.c:9149 +#: src/readelf.c:9217 src/size.c:417 src/size.c:487 src/strip.c:503 #, c-format msgid "cannot get section header string table index" msgstr "не вдалося визначити індекс заголовка розділу у таблиці рядків" -#: src/nm.c:782 +#: src/nm.c:784 #, c-format msgid "" "\n" @@ -4012,7 +4086,7 @@ msgstr "" "Символи з %s:\n" "\n" -#: src/nm.c:785 +#: src/nm.c:787 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4021,22 +4095,22 @@ msgstr "" "%*s%-*s %-*s Клас Тип %-*s %*s Розділ\n" "\n" -#: src/nm.c:1166 +#: src/nm.c:1173 #, c-format msgid "%s: entry size in section `%s' is not what we expect" msgstr "%s: розмір запису у розділі «%s» не є очікуваним" -#: src/nm.c:1170 +#: src/nm.c:1177 #, c-format msgid "%s: size of section `%s' is not multiple of entry size" msgstr "%s: розмір розділу «%s» не є кратним до розміру запису" -#: src/nm.c:1428 +#: src/nm.c:1435 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: некоректна дія" -#: src/nm.c:1485 +#: src/nm.c:1492 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: немає символів" @@ -4069,7 +4143,7 @@ msgstr "Показати інформацію лише з розділу НАЗ msgid "Show information from FILEs (a.out by default)." msgstr "Показати інформацію з ФАЙЛів (типово a.out)." -#: src/objdump.c:236 src/readelf.c:439 +#: src/objdump.c:236 src/readelf.c:473 msgid "No operation specified.\n" msgstr "Не вказано дії.\n" @@ -4078,11 +4152,11 @@ msgstr "Не вказано дії.\n" msgid "while close `%s'" msgstr "під час закриття «%s»" -#: src/objdump.c:379 src/readelf.c:1664 src/readelf.c:1838 +#: src/objdump.c:379 src/readelf.c:1880 src/readelf.c:2069 msgid "INVALID SYMBOL" msgstr "НЕКОРЕКТНИЙ СИМВОЛ" -#: src/objdump.c:394 src/readelf.c:1695 src/readelf.c:1871 +#: src/objdump.c:394 src/readelf.c:1911 src/readelf.c:2102 msgid "INVALID SECTION" msgstr "НЕКОРЕКТНИЙ РОЗДІЛ" @@ -4139,183 +4213,244 @@ msgstr "«%s» не є архівом" msgid "error while freeing sub-ELF descriptor: %s" msgstr "помилка під час спроби вивільнення дескриптора під-ELF: %s" -#: src/readelf.c:67 +#: src/readelf.c:71 +msgid "ELF input selection:" +msgstr "Вибір вихідних даних ELF:" + +#: src/readelf.c:73 +msgid "" +"Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" +msgstr "" +"Використовувати вказаний за іменем РОЗДІЛ (типово .gnu_debugdata) як " +"(стиснені) вхідні дані ELF" + +#: src/readelf.c:75 msgid "ELF output selection:" msgstr "Вибір виводу ELF:" -#: src/readelf.c:69 +#: src/readelf.c:77 msgid "All these plus -p .strtab -p .dynstr -p .comment" msgstr "Все це плюс -p .strtab -p .dynstr -p .comment" -#: src/readelf.c:70 +#: src/readelf.c:78 msgid "Display the dynamic segment" msgstr "Показувати динамічний сегмент" -#: src/readelf.c:71 +#: src/readelf.c:79 msgid "Display the ELF file header" msgstr "Показувати заголовок файла ELF" -#: src/readelf.c:73 +#: src/readelf.c:81 msgid "Display histogram of bucket list lengths" msgstr "Показати гістограму довжин списку блоків" -#: src/readelf.c:74 +#: src/readelf.c:82 msgid "Display the program headers" msgstr "Показувати заголовки програми" -#: src/readelf.c:76 +#: src/readelf.c:84 msgid "Display relocations" msgstr "Показувати пересування" -#: src/readelf.c:77 +#: src/readelf.c:85 msgid "Display the sections' headers" msgstr "Показувати заголовки розділів" -#: src/readelf.c:79 +#: src/readelf.c:87 msgid "Display the symbol table" msgstr "Показувати таблицю символів" -#: src/readelf.c:80 +#: src/readelf.c:88 msgid "Display versioning information" msgstr "Показувати відомості щодо версії" -#: src/readelf.c:81 +#: src/readelf.c:89 msgid "Display the ELF notes" msgstr "Показувати нотатки ELF" -#: src/readelf.c:83 +#: src/readelf.c:91 msgid "Display architecture specific information, if any" msgstr "Показувати специфічні для архітектури дані, якщо такі буде виявлено" -#: src/readelf.c:85 +#: src/readelf.c:93 msgid "Display sections for exception handling" msgstr "Показувати розділи для обробки виключень" -#: src/readelf.c:87 +#: src/readelf.c:95 msgid "Additional output selection:" msgstr "Додатковий вибір виводу:" -#: src/readelf.c:89 +#: src/readelf.c:97 msgid "" "Display DWARF section content. SECTION can be one of abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro or " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro or exception" msgstr "" "Показати вміст розділу DWARF. Значенням РОЗДІЛ може бути abbrev, aranges, " -"frame, gdb_index, info, loc, line, ranges, pubnames, str, macinfo, macro або " -"exception" +"decodedaranges, frame, gdb_index, info, loc, line, decodedline, ranges, " +"pubnames, str, macinfo, macro або exception" -#: src/readelf.c:93 +#: src/readelf.c:101 msgid "Dump the uninterpreted contents of SECTION, by number or name" msgstr "" "Створити дамп даних РОЗДІЛ, які не вдалося інтерпретувати, за номером або " "назвами" -#: src/readelf.c:95 +#: src/readelf.c:103 msgid "Print string contents of sections" msgstr "Виводити вміст рядків розділів" -#: src/readelf.c:98 +#: src/readelf.c:106 msgid "Display the symbol index of an archive" msgstr "Показувати покажчик символів архіву" -#: src/readelf.c:100 +#: src/readelf.c:108 msgid "Output control:" msgstr "Керування виводом:" -#: src/readelf.c:102 +#: src/readelf.c:110 msgid "Do not find symbol names for addresses in DWARF data" -msgstr "Не шукати назви символів для адресу у даних DWARF" +msgstr "Не шукати назви символів для адрес у даних DWARF" -#: src/readelf.c:104 +#: src/readelf.c:112 +msgid "" +"Display just offsets instead of resolving values to addresses in DWARF data" +msgstr "Показати лише зміщення, а не визначені значення адреси у даних DWARF" + +#: src/readelf.c:114 msgid "Ignored for compatibility (lines always wide)" msgstr "Ігнорується з міркувань сумісності (рядки завжди широкі)" -#: src/readelf.c:109 +#: src/readelf.c:119 msgid "Print information from ELF file in human-readable form." msgstr "Виводити відомості з файла ELF у придатному для читання форматі." -#: src/readelf.c:410 +#: src/readelf.c:441 #, c-format msgid "Unknown DWARF debug section `%s'.\n" msgstr "Невідомий діагностичний розділ DWARF «%s».\n" -#: src/readelf.c:476 +#: src/readelf.c:520 src/readelf.c:631 #, c-format msgid "cannot generate Elf descriptor: %s" msgstr "не вдалося створити дескриптор Elf: %s" -#: src/readelf.c:488 +#: src/readelf.c:545 src/readelf.c:1099 src/readelf.c:1269 #, c-format -msgid "'%s' is not an archive, cannot print archive index" -msgstr "«%s» не є архівом, виведення покажчика архіву неможливе" +msgid "cannot get section: %s" +msgstr "не вдалося отримати розділ: %s" + +#: src/readelf.c:554 src/readelf.c:1106 src/readelf.c:1277 src/readelf.c:9169 +#: src/unstrip.c:352 src/unstrip.c:383 src/unstrip.c:432 src/unstrip.c:540 +#: src/unstrip.c:557 src/unstrip.c:593 src/unstrip.c:791 src/unstrip.c:1059 +#: src/unstrip.c:1250 src/unstrip.c:1310 src/unstrip.c:1431 src/unstrip.c:1484 +#: src/unstrip.c:1591 src/unstrip.c:1780 +#, c-format +msgid "cannot get section header: %s" +msgstr "не вдалося отримати заголовок розділу: %s" -#: src/readelf.c:493 +#: src/readelf.c:562 +#, c-format +msgid "cannot get section name" +msgstr "не вдалося отримати назву розділу" + +#: src/readelf.c:571 src/readelf.c:5221 src/readelf.c:7414 src/readelf.c:7516 +#: src/readelf.c:7674 +#, c-format +msgid "cannot get %s content: %s" +msgstr "не вдалося отримати дані %s: %s" + +#: src/readelf.c:587 +#, c-format +msgid "cannot create temp file '%s'" +msgstr "не вдалося створити файл тимчасових даних «%s»" + +#: src/readelf.c:596 +#, c-format +msgid "cannot write section data" +msgstr "не вдалося записати дані розділу" + +#: src/readelf.c:602 src/readelf.c:619 src/readelf.c:648 #, c-format msgid "error while closing Elf descriptor: %s" msgstr "помилка під час спроби закриття дескриптора Elf: %s" -#: src/readelf.c:585 +#: src/readelf.c:609 +#, c-format +msgid "error while rewinding file descriptor" +msgstr "помилка під час повернення до початкового значення дескриптора файла" + +#: src/readelf.c:643 +#, c-format +msgid "'%s' is not an archive, cannot print archive index" +msgstr "«%s» не є архівом, виведення покажчика архіву неможливе" + +#: src/readelf.c:742 +#, c-format +msgid "No such section '%s' in '%s'" +msgstr "У «%2$s» немає розділу «%1$s»" + +#: src/readelf.c:769 #, c-format msgid "cannot stat input file" msgstr "не вдалося отримати дані з вхідного файла за допомогою stat" -#: src/readelf.c:587 +#: src/readelf.c:771 #, c-format msgid "input file is empty" msgstr "вхідний файл є порожнім" -#: src/readelf.c:589 +#: src/readelf.c:773 #, c-format msgid "failed reading '%s': %s" msgstr "не вдалося прочитати «%s»: %s" -#: src/readelf.c:625 +#: src/readelf.c:814 #, c-format msgid "cannot read ELF header: %s" msgstr "не вдалося прочитати заголовок ELF: %s" -#: src/readelf.c:633 +#: src/readelf.c:822 #, c-format msgid "cannot create EBL handle" msgstr "не вдалося створити дескриптор EBL" -#: src/readelf.c:646 +#: src/readelf.c:835 #, c-format msgid "cannot determine number of program headers: %s" msgstr "не вдалося визначити кількість заголовків програми: %s" -#: src/readelf.c:732 +#: src/readelf.c:921 msgid "NONE (None)" msgstr "NONE (Немає)" -#: src/readelf.c:733 +#: src/readelf.c:922 msgid "REL (Relocatable file)" msgstr "REL (Придатний до пересування файл)" -#: src/readelf.c:734 +#: src/readelf.c:923 msgid "EXEC (Executable file)" msgstr "EXEC (Виконуваний файл)" -#: src/readelf.c:735 +#: src/readelf.c:924 msgid "DYN (Shared object file)" msgstr "DYN (Файл об’єктів спільного використання)" -#: src/readelf.c:736 +#: src/readelf.c:925 msgid "CORE (Core file)" msgstr "CORE (Файл ядра)" -#: src/readelf.c:741 +#: src/readelf.c:930 #, c-format msgid "OS Specific: (%x)\n" msgstr "ОС-специфічне: (%x)\n" -#: src/readelf.c:743 +#: src/readelf.c:932 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Специфічне для процесора: (%x)\n" -#: src/readelf.c:753 +#: src/readelf.c:942 msgid "" "ELF Header:\n" " Magic: " @@ -4323,7 +4458,7 @@ msgstr "" "Заголовок ELF:\n" " Magic: " -#: src/readelf.c:757 +#: src/readelf.c:946 #, c-format msgid "" "\n" @@ -4332,117 +4467,117 @@ msgstr "" "\n" " Клас: %s\n" -#: src/readelf.c:762 +#: src/readelf.c:951 #, c-format msgid " Data: %s\n" msgstr " Дані: %s\n" -#: src/readelf.c:768 +#: src/readelf.c:957 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Версія Ident: %hhd %s\n" -#: src/readelf.c:770 src/readelf.c:787 +#: src/readelf.c:959 src/readelf.c:976 msgid "(current)" msgstr "(поточний)" -#: src/readelf.c:774 +#: src/readelf.c:963 #, c-format msgid " OS/ABI: %s\n" msgstr " ОС/ABI: %s\n" -#: src/readelf.c:777 +#: src/readelf.c:966 #, c-format msgid " ABI Version: %hhd\n" msgstr " Версія ABI: %hhd\n" -#: src/readelf.c:780 +#: src/readelf.c:969 msgid " Type: " msgstr " Тип: " -#: src/readelf.c:783 +#: src/readelf.c:972 #, c-format msgid " Machine: %s\n" msgstr " Архітектура: %s\n" -#: src/readelf.c:785 +#: src/readelf.c:974 #, c-format msgid " Version: %d %s\n" msgstr " Версія: %d %s\n" -#: src/readelf.c:789 +#: src/readelf.c:978 #, c-format msgid " Entry point address: %#\n" msgstr " Адреса вхідної точки: %#\n" -#: src/readelf.c:792 +#: src/readelf.c:981 #, c-format msgid " Start of program headers: % %s\n" msgstr " Початок заголовків програм: % %s\n" -#: src/readelf.c:793 src/readelf.c:796 +#: src/readelf.c:982 src/readelf.c:985 msgid "(bytes into file)" msgstr "(байтів у файл)" -#: src/readelf.c:795 +#: src/readelf.c:984 #, c-format msgid " Start of section headers: % %s\n" msgstr " Початок заголовків розділів: % %s\n" -#: src/readelf.c:798 +#: src/readelf.c:987 #, c-format msgid " Flags: %s\n" msgstr " Прапорці: %s\n" -#: src/readelf.c:801 +#: src/readelf.c:990 #, c-format msgid " Size of this header: % %s\n" msgstr " Розмір цього заголовка: % %s\n" -#: src/readelf.c:802 src/readelf.c:805 src/readelf.c:822 +#: src/readelf.c:991 src/readelf.c:994 src/readelf.c:1011 msgid "(bytes)" msgstr "(байтів)" -#: src/readelf.c:804 +#: src/readelf.c:993 #, c-format msgid " Size of program header entries: % %s\n" msgstr " Розмір записів заголовка програми: % %s\n" -#: src/readelf.c:807 +#: src/readelf.c:996 #, c-format msgid " Number of program headers entries: %" msgstr " Кількість записів заголовків програми: %" -#: src/readelf.c:814 +#: src/readelf.c:1003 #, c-format msgid " (% in [0].sh_info)" msgstr " (% у [0].sh_info)" -#: src/readelf.c:817 src/readelf.c:834 src/readelf.c:848 +#: src/readelf.c:1006 src/readelf.c:1023 src/readelf.c:1037 msgid " ([0] not available)" msgstr " ([0] недоступний)" -#: src/readelf.c:821 +#: src/readelf.c:1010 #, c-format msgid " Size of section header entries: % %s\n" msgstr " Розмір записів заголовків розділів: % %s\n" -#: src/readelf.c:824 +#: src/readelf.c:1013 #, c-format msgid " Number of section headers entries: %" msgstr " Кількість записів заголовків розділів: %" -#: src/readelf.c:831 +#: src/readelf.c:1020 #, c-format msgid " (% in [0].sh_size)" msgstr " (% у [0].sh_size)" -#: src/readelf.c:844 +#: src/readelf.c:1033 #, c-format msgid " (% in [0].sh_link)" msgstr " (% у [0].sh_link)" -#: src/readelf.c:852 +#: src/readelf.c:1041 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4451,7 +4586,7 @@ msgstr "" " Індекс заголовка розділу у таблиці рядків: XINDEX%s\n" "\n" -#: src/readelf.c:856 +#: src/readelf.c:1045 #, c-format msgid "" " Section header string table index: %\n" @@ -4460,7 +4595,7 @@ msgstr "" " Індекс заголовка розділу у таблиці рядків: %\n" "\n" -#: src/readelf.c:888 +#: src/readelf.c:1077 #, c-format msgid "" "There are %d section headers, starting at offset %#:\n" @@ -4469,11 +4604,11 @@ msgstr "" "Виявлено %d заголовків розділів, зміщення початку — %#:\n" "\n" -#: src/readelf.c:898 +#: src/readelf.c:1087 msgid "Section Headers:" msgstr "Заголовки розділів:" -#: src/readelf.c:901 +#: src/readelf.c:1090 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4481,7 +4616,7 @@ msgstr "" "[№ ] Назва Тип Адр Змі Розмір ES Прап Lk " "Інф Al" -#: src/readelf.c:903 +#: src/readelf.c:1092 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4489,31 +4624,17 @@ msgstr "" "[№ ] Назва Тип Адр Змі Розмір ES " "Прап Lk Інф Al" -#: src/readelf.c:910 src/readelf.c:1063 -#, c-format -msgid "cannot get section: %s" -msgstr "не вдалося отримати розділ: %s" - -#: src/readelf.c:917 src/readelf.c:1071 src/readelf.c:8343 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 -#, c-format -msgid "cannot get section header: %s" -msgstr "не вдалося отримати заголовок розділу: %s" - -#: src/readelf.c:975 +#: src/readelf.c:1164 msgid "Program Headers:" msgstr "Заголовки програми:" -#: src/readelf.c:977 +#: src/readelf.c:1166 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Тип Зміщен ВіртАдр ФізАдр РозмФайл РозмПам Пра Вирів" -#: src/readelf.c:980 +#: src/readelf.c:1169 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4521,12 +4642,12 @@ msgstr "" " Тип Зміщен ВіртАдр ФізАдр " "РозмФайлРозмПам Пра Вирів" -#: src/readelf.c:1020 +#: src/readelf.c:1226 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Запит щодо інтерпретатора програми: %s]\n" -#: src/readelf.c:1041 +#: src/readelf.c:1247 msgid "" "\n" " Section to Segment mapping:\n" @@ -4536,12 +4657,12 @@ msgstr "" " Відображення розділів на сегмент:\n" " Розділи сегмента..." -#: src/readelf.c:1052 src/unstrip.c:1827 src/unstrip.c:1866 src/unstrip.c:1873 +#: src/readelf.c:1258 src/unstrip.c:1835 src/unstrip.c:1874 src/unstrip.c:1881 #, c-format msgid "cannot get program header: %s" msgstr "не вдалося отримати заголовок програми: %s" -#: src/readelf.c:1193 +#: src/readelf.c:1401 #, c-format msgid "" "\n" @@ -4559,7 +4680,7 @@ msgstr[2] "" "\n" "Група розділів COMDAT [%2zu] «%s» з підписом «%s» містить %zu записів:\n" -#: src/readelf.c:1198 +#: src/readelf.c:1406 #, c-format msgid "" "\n" @@ -4577,15 +4698,21 @@ msgstr[2] "" "\n" "Група розділів [%2zu] «%s» з підписом «%s» містить %zu записів:\n" -#: src/readelf.c:1206 +#: src/readelf.c:1414 msgid "" msgstr "<НЕКОРЕКТНИЙ СИМВОЛ>" -#: src/readelf.c:1220 +#: src/readelf.c:1428 msgid "" msgstr "<НЕКОРЕКТНИЙ РОЗДІЛ>" -#: src/readelf.c:1371 +#: src/readelf.c:1585 src/readelf.c:2202 src/readelf.c:2460 src/readelf.c:2530 +#: src/readelf.c:2812 src/readelf.c:2885 src/readelf.c:4488 +#, fuzzy, c-format +msgid "invalid sh_link value in section %Zu" +msgstr "некоректний розділ .debug_line" + +#: src/readelf.c:1588 #, c-format msgid "" "\n" @@ -4608,36 +4735,36 @@ msgstr[2] "" "Динамічний сегмент містить %lu записів:\n" " Адр: %#0* Зміщення: %#08 Пос. на розділ: [%2u] '%s'\n" -#: src/readelf.c:1383 +#: src/readelf.c:1598 msgid " Type Value\n" msgstr " Тип Значення\n" -#: src/readelf.c:1407 +#: src/readelf.c:1622 #, c-format msgid "Shared library: [%s]\n" msgstr "Спільна бібліотека: [%s]\n" -#: src/readelf.c:1412 +#: src/readelf.c:1627 #, c-format msgid "Library soname: [%s]\n" msgstr "Назва so бібліотеки: [%s]\n" -#: src/readelf.c:1417 +#: src/readelf.c:1632 #, c-format msgid "Library rpath: [%s]\n" msgstr "Rpath бібліотеки: [%s]\n" -#: src/readelf.c:1422 +#: src/readelf.c:1637 #, c-format msgid "Library runpath: [%s]\n" msgstr "Runpath бібліотеки: [%s]\n" -#: src/readelf.c:1442 +#: src/readelf.c:1657 #, c-format msgid "% (bytes)\n" msgstr "% (байт)\n" -#: src/readelf.c:1554 src/readelf.c:1740 +#: src/readelf.c:1770 src/readelf.c:1957 #, c-format msgid "" "\n" @@ -4646,7 +4773,7 @@ msgstr "" "\n" "Некоректна таблиця символів за зміщенням %#0\n" -#: src/readelf.c:1572 src/readelf.c:1757 +#: src/readelf.c:1788 src/readelf.c:1975 #, c-format msgid "" "\n" @@ -4669,7 +4796,7 @@ msgstr[2] "" "Розділ пересування [%2zu] «%s» для розділу [%2u] «%s» за зміщенням " "%#0 містить %d записів:\n" -#: src/readelf.c:1587 +#: src/readelf.c:1803 src/readelf.c:1990 #, c-format msgid "" "\n" @@ -4687,30 +4814,30 @@ msgstr[2] "" "\n" "Розділ пересування [%2u] «%s» за зміщенням %#0 містить %d записів:\n" -#: src/readelf.c:1597 +#: src/readelf.c:1813 msgid " Offset Type Value Name\n" msgstr " Зміщення Тип Значення Назва\n" -#: src/readelf.c:1599 +#: src/readelf.c:1815 msgid " Offset Type Value Name\n" msgstr " Зміщення Тип Значення Назва\n" -#: src/readelf.c:1652 src/readelf.c:1663 src/readelf.c:1676 src/readelf.c:1694 -#: src/readelf.c:1706 src/readelf.c:1825 src/readelf.c:1837 src/readelf.c:1851 -#: src/readelf.c:1870 src/readelf.c:1883 +#: src/readelf.c:1868 src/readelf.c:1879 src/readelf.c:1892 src/readelf.c:1910 +#: src/readelf.c:1922 src/readelf.c:2056 src/readelf.c:2068 src/readelf.c:2082 +#: src/readelf.c:2101 src/readelf.c:2114 msgid "" msgstr "<НЕКОРЕКТНЕ ПЕРЕМІЩЕННЯ>" -#: src/readelf.c:1769 +#: src/readelf.c:2000 msgid " Offset Type Value Addend Name\n" msgstr " Зміщення Тип Значення Назва додатка\n" -#: src/readelf.c:1771 +#: src/readelf.c:2002 msgid " Offset Type Value Addend Name\n" msgstr "" " Зміщення Тип Значення Назва додатка\n" -#: src/readelf.c:1972 +#: src/readelf.c:2210 #, c-format msgid "" "\n" @@ -4728,7 +4855,7 @@ msgstr[2] "" "\n" "Таблиця символів [%2u] «%s» містить %u записів:\n" -#: src/readelf.c:1978 +#: src/readelf.c:2215 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4736,33 +4863,33 @@ msgstr[0] " %lu лок. символ Таблиця символів: [%2u] « msgstr[1] " %lu лок. символи Таблиця символів: [%2u] «%s»\n" msgstr[2] " %lu лок. символів Таблиця символів: [%2u] «%s»\n" -#: src/readelf.c:1988 +#: src/readelf.c:2223 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " №№ Знач. Роз. Тип Зв’яз Вид. Інд Назва\n" -#: src/readelf.c:1990 +#: src/readelf.c:2225 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " №№ Знач. Роз. Тип Зв’яз Вид. Інд Назва\n" -#: src/readelf.c:2010 +#: src/readelf.c:2245 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2098 +#: src/readelf.c:2333 #, c-format msgid "bad dynamic symbol" msgstr "помилковий динамічний символ" -#: src/readelf.c:2180 +#: src/readelf.c:2415 msgid "none" msgstr "немає" -#: src/readelf.c:2197 +#: src/readelf.c:2432 msgid "| " msgstr "| <невідомо>" -#: src/readelf.c:2222 +#: src/readelf.c:2463 #, c-format msgid "" "\n" @@ -4785,17 +4912,17 @@ msgstr[2] "" "Розділ потреби у версіях [%2u] «%s», що містить %d записів:\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2245 +#: src/readelf.c:2484 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Версія: %hu Файл: %s Кть: %hu\n" -#: src/readelf.c:2258 +#: src/readelf.c:2497 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Назва: %s Прап: %s Версія: %hu\n" -#: src/readelf.c:2289 +#: src/readelf.c:2534 #, c-format msgid "" "\n" @@ -4818,17 +4945,17 @@ msgstr[2] "" "Розділ визначення версії [%2u] «%s», що містить %d записів:\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2319 +#: src/readelf.c:2562 #, 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:2334 +#: src/readelf.c:2577 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: батьківський %d: %s\n" -#: src/readelf.c:2566 +#: src/readelf.c:2816 #, c-format msgid "" "\n" @@ -4851,15 +4978,15 @@ msgstr[2] "" "Розділ символів версій [%2u] «%s», що містить %d записів:\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»" -#: src/readelf.c:2596 +#: src/readelf.c:2844 msgid " 0 *local* " msgstr " 0 *локальний* " -#: src/readelf.c:2601 +#: src/readelf.c:2849 msgid " 1 *global* " msgstr " 1 *загальний* " -#: src/readelf.c:2632 +#: src/readelf.c:2890 #, c-format msgid "" "\n" @@ -4887,22 +5014,22 @@ msgstr[2] "" "блоками):\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2656 +#: src/readelf.c:2912 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Довжина Номер % від загал. Покриття\n" -#: src/readelf.c:2658 +#: src/readelf.c:2914 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:2665 +#: src/readelf.c:2921 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:2678 +#: src/readelf.c:2934 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4911,12 +5038,12 @@ msgstr "" " Середня кількість тестів: успішний пошук: %f\n" "\t\t\t неуспішний пошук: %f\n" -#: src/readelf.c:2696 src/readelf.c:2738 src/readelf.c:2779 +#: src/readelf.c:2952 src/readelf.c:2994 src/readelf.c:3035 #, c-format msgid "cannot get data for section %d: %s" msgstr "не вдалося отримати дані для розділу %d: %s" -#: src/readelf.c:2833 +#: src/readelf.c:3089 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4926,7 +5053,7 @@ msgstr "" " Розмір бітової маски: %zu байтів %%% встановлених бітів зсув " "2-го хешу: %u\n" -#: src/readelf.c:2907 +#: src/readelf.c:3164 #, c-format msgid "" "\n" @@ -4947,7 +5074,7 @@ msgstr[2] "" "Розділ списку бібліотек [%2zu] «%s» за зміщенням %#0 містить %d " "записів:\n" -#: src/readelf.c:2921 +#: src/readelf.c:3178 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4955,7 +5082,7 @@ msgstr "" " Бібліотека Часовий штамп Версія суми " "Прапорці" -#: src/readelf.c:2971 +#: src/readelf.c:3228 #, c-format msgid "" "\n" @@ -4966,135 +5093,140 @@ msgstr "" "Розділ атрибутів об’єктів [%2zu] «%s» з % байтів за зміщенням " "%#0:\n" -#: src/readelf.c:2987 +#: src/readelf.c:3244 msgid " Owner Size\n" msgstr " Власник Розмір\n" -#: src/readelf.c:3013 +#: src/readelf.c:3270 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" -#: src/readelf.c:3045 +#: src/readelf.c:3302 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" -#: src/readelf.c:3050 +#: src/readelf.c:3307 #, c-format msgid " File: %11\n" msgstr " Файл: %11\n" -#: src/readelf.c:3085 +#: src/readelf.c:3342 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3088 +#: src/readelf.c:3345 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3091 +#: src/readelf.c:3348 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3098 +#: src/readelf.c:3355 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3101 +#: src/readelf.c:3358 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3137 +#: src/readelf.c:3403 #, c-format msgid "%s+%# <%s+%#>" msgstr "%s+%# <%s+%#>" -#: src/readelf.c:3140 +#: src/readelf.c:3406 #, c-format msgid "%s+%#0* <%s+%#>" msgstr "%s+%#0* <%s+%#>" -#: src/readelf.c:3145 +#: src/readelf.c:3411 #, c-format msgid "%# <%s+%#>" msgstr "%# <%s+%#>" -#: src/readelf.c:3148 +#: src/readelf.c:3414 #, c-format msgid "%#0* <%s+%#>" msgstr "%#0* <%s+%#>" -#: src/readelf.c:3154 +#: src/readelf.c:3420 #, c-format msgid "%s+%# <%s>" msgstr "%s+%# <%s>" -#: src/readelf.c:3157 +#: src/readelf.c:3423 #, c-format msgid "%s+%#0* <%s>" msgstr "%s+%#0* <%s>" -#: src/readelf.c:3161 +#: src/readelf.c:3427 #, c-format msgid "%# <%s>" msgstr "%# <%s>" -#: src/readelf.c:3164 +#: src/readelf.c:3430 #, c-format msgid "%#0* <%s>" msgstr "%#0* <%s>" -#: src/readelf.c:3169 +#: src/readelf.c:3435 #, c-format msgid "%s+%#" msgstr "%s+%#" -#: src/readelf.c:3172 +#: src/readelf.c:3438 #, c-format msgid "%s+%#0*" msgstr "%s+%#0*" -#: src/readelf.c:3554 +#: src/readelf.c:3820 msgid "empty block" msgstr "порожній блок" -#: src/readelf.c:3557 +#: src/readelf.c:3823 #, c-format msgid "%zu byte block:" msgstr "%zu-байтовий блок:" -#: src/readelf.c:3934 +#: src/readelf.c:4217 #, c-format msgid "%*s[%4] %s \n" msgstr "%*s[%4] %s <ОБРІЗАНО>\n" -#: src/readelf.c:3970 +#: src/readelf.c:4274 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# використано з різними розмірами адрес" -#: src/readelf.c:3977 +#: src/readelf.c:4281 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# використано з різними розмірами зміщень" -#: src/readelf.c:4057 +#: src/readelf.c:4288 +#, c-format +msgid "%s %# used with different base addresses" +msgstr "%s %# використано з різними базовими адресами" + +#: src/readelf.c:4370 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ У РЕШТІ РОЗДІЛУ>\n" -#: src/readelf.c:4065 +#: src/readelf.c:4378 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ> ... % байтів ...\n" -#: src/readelf.c:4087 +#: src/readelf.c:4404 #, c-format msgid "" "\n" @@ -5105,7 +5237,7 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" " [ Код]\n" -#: src/readelf.c:4095 +#: src/readelf.c:4412 #, c-format msgid "" "\n" @@ -5114,30 +5246,30 @@ msgstr "" "\n" "Розділ скорочень за зміщенням %:\n" -#: src/readelf.c:4108 +#: src/readelf.c:4425 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** помилка під час читання скорочення: %s\n" -#: src/readelf.c:4124 +#: src/readelf.c:4441 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] зміщення: %, дочірній: %s, мітка: %s\n" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "yes" msgstr "так" -#: src/readelf.c:4127 +#: src/readelf.c:4444 msgid "no" msgstr "ні" -#: src/readelf.c:4162 +#: src/readelf.c:4478 src/readelf.c:4551 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "не вдалося отримати дані get .debug_aranges: %s" -#: src/readelf.c:4167 +#: src/readelf.c:4493 #, c-format msgid "" "\n" @@ -5155,12 +5287,12 @@ msgstr[2] "" "\n" "Розділ DWARF [%2zu] «%s» за зміщенням %# містить %zu записів:\n" -#: src/readelf.c:4198 +#: src/readelf.c:4524 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:4200 +#: src/readelf.c:4526 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5168,13 +5300,8 @@ msgstr "" " [%*zu] початок: %0#*, довжина: %5, зміщення CU DIE: " "%6\n" -#: src/readelf.c:4219 -#, c-format -msgid "cannot get .debug_ranges content: %s" -msgstr "не вдалося отримати дані .debug_ranges: %s" - -#: src/readelf.c:4224 src/readelf.c:4728 src/readelf.c:5505 src/readelf.c:6006 -#: src/readelf.c:6121 src/readelf.c:6277 src/readelf.c:6699 +#: src/readelf.c:4556 src/readelf.c:4710 src/readelf.c:5231 src/readelf.c:6145 +#: src/readelf.c:6646 src/readelf.c:6766 src/readelf.c:6922 src/readelf.c:7345 #, c-format msgid "" "\n" @@ -5183,37 +5310,119 @@ msgstr "" "\n" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" -#: src/readelf.c:4248 src/readelf.c:6031 +#: src/readelf.c:4569 src/readelf.c:6171 +#, c-format +msgid "" +"\n" +"Table at offset %Zu:\n" +msgstr "" +"\n" +"Таблиця за зміщенням %Zu:\n" + +#: src/readelf.c:4573 src/readelf.c:5255 src/readelf.c:6180 +#, c-format +msgid "invalid data in section [%zu] '%s'" +msgstr "некоректні дані у розділі [%zu] «%s»" + +#: src/readelf.c:4589 +#, c-format +msgid "" +"\n" +" Length: %6\n" +msgstr "" +"\n" +" Довжина: %6\n" + +#: src/readelf.c:4601 +#, c-format +msgid " DWARF version: %6\n" +msgstr " версія DWARF: %6\n" + +#: src/readelf.c:4605 +#, c-format +msgid "unsupported aranges version" +msgstr "непідтримувана версія aranges" + +#: src/readelf.c:4616 +#, c-format +msgid " CU offset: %6\n" +msgstr " зміщення CU: %6\n" + +#: src/readelf.c:4622 +#, c-format +msgid " Address size: %6\n" +msgstr " Розмір адреси: %6\n" + +#: src/readelf.c:4626 +#, c-format +msgid "unsupported address size" +msgstr "непідтримуваний розмір адреси" + +#: src/readelf.c:4631 +#, c-format +msgid "" +" Segment size: %6\n" +"\n" +msgstr "" +" Розмір сегмента: %6\n" +"\n" + +#: src/readelf.c:4635 +#, c-format +msgid "unsupported segment size" +msgstr "непідтримуваний розмір сегмента" + +#: src/readelf.c:4675 +#, c-format +msgid " %s..%s (%)\n" +msgstr " %s..%s (%)\n" + +#: src/readelf.c:4678 +#, c-format +msgid " %s..%s\n" +msgstr " %s..%s\n" + +#: src/readelf.c:4687 +#, c-format +msgid " %Zu padding bytes\n" +msgstr " %Zu байтів доповнення\n" + +#: src/readelf.c:4705 +#, c-format +msgid "cannot get .debug_ranges content: %s" +msgstr "не вдалося отримати дані .debug_ranges: %s" + +#: src/readelf.c:4735 src/readelf.c:6673 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:4270 src/readelf.c:6053 +#: src/readelf.c:4757 src/readelf.c:6695 #, c-format msgid " [%6tx] base address %s\n" msgstr " [%6tx] базова адреса %s\n" -#: src/readelf.c:4276 src/readelf.c:6059 +#: src/readelf.c:4764 src/readelf.c:6702 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] порожній список\n" -#: src/readelf.c:4285 +#: src/readelf.c:4775 #, c-format msgid " [%6tx] %s..%s\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:4287 +#: src/readelf.c:4777 #, c-format msgid " %s..%s\n" msgstr " %s..%s\n" -#: src/readelf.c:4717 src/readelf.c:6768 src/readelf.c:6870 src/readelf.c:7028 +#: src/readelf.c:5210 #, c-format -msgid "cannot get %s content: %s" -msgstr "не вдалося отримати дані %s: %s" +msgid "cannot get ELF: %s" +msgstr "не вдалося отримати ELF: %s" -#: src/readelf.c:4724 +#: src/readelf.c:5227 #, c-format msgid "" "\n" @@ -5222,12 +5431,7 @@ msgstr "" "\n" "Розділ відомостей щодо вікна викликів [%2zu] «%s» за зміщенням %#:\n" -#: src/readelf.c:4752 src/readelf.c:5540 -#, c-format -msgid "invalid data in section [%zu] '%s'" -msgstr "некоректні дані у розділі [%zu] «%s»" - -#: src/readelf.c:4774 +#: src/readelf.c:5277 #, c-format msgid "" "\n" @@ -5236,50 +5440,50 @@ msgstr "" "\n" " [%6tx] нульовий переривач\n" -#: src/readelf.c:4859 +#: src/readelf.c:5362 #, c-format msgid "invalid augmentation length" msgstr "некоректна довжина збільшення" -#: src/readelf.c:4871 +#: src/readelf.c:5374 msgid "FDE address encoding: " msgstr "Кодування адреси FDE: " -#: src/readelf.c:4877 +#: src/readelf.c:5380 msgid "LSDA pointer encoding: " msgstr "Кодування вказівника LSDA: " -#: src/readelf.c:4975 +#: src/readelf.c:5491 #, c-format msgid " (offset: %#)" msgstr " (зміщення: %#)" -#: src/readelf.c:4982 +#: src/readelf.c:5498 #, c-format msgid " (end offset: %#)" msgstr " (зміщення від кінця: %#)" -#: src/readelf.c:5009 +#: src/readelf.c:5525 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sвказівник LSDA: %#\n" -#: src/readelf.c:5060 +#: src/readelf.c:5577 #, c-format msgid "cannot get attribute code: %s" msgstr "не вдалося отримати код атрибута: %s" -#: src/readelf.c:5069 +#: src/readelf.c:5586 #, c-format msgid "cannot get attribute form: %s" msgstr "не вдалося отримати форму атрибута: %s" -#: src/readelf.c:5084 +#: src/readelf.c:5601 #, c-format msgid "cannot get attribute value: %s" msgstr "не вдалося отримати значення атрибута: %s" -#: src/readelf.c:5342 +#: src/readelf.c:5894 #, c-format msgid "" "\n" @@ -5290,7 +5494,7 @@ msgstr "" "Розділ DWARF [%2zu] «%s» за зміщенням %#:\n" " [Зміщення]\n" -#: src/readelf.c:5374 +#: src/readelf.c:5926 #, c-format msgid "" " Type unit at offset %:\n" @@ -5303,7 +5507,7 @@ msgstr "" "Зміщення: %\n" " Підпис типу: %#, Зміщення типу: %#\n" -#: src/readelf.c:5383 +#: src/readelf.c:5935 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5314,47 +5518,49 @@ msgstr "" " Версія: %, Зміщення розділу скорочень: %, Адреса: %, " "Зміщення: %\n" -#: src/readelf.c:5409 +#: src/readelf.c:5960 #, c-format msgid "cannot get DIE at offset % in section '%s': %s" msgstr "не вдалося отримати DIE за зміщенням % у розділі «%s»: %s" -#: src/readelf.c:5421 +#: src/readelf.c:5974 #, c-format msgid "cannot get DIE offset: %s" msgstr "не вдалося отримати зміщення DIE: %s" -#: src/readelf.c:5430 +#: src/readelf.c:5983 #, c-format msgid "cannot get tag of DIE at offset % in section '%s': %s" msgstr "" "не вдалося отримати мітку DIE за зміщенням % у розділі «%s»: %s" -#: src/readelf.c:5461 +#: src/readelf.c:6015 #, c-format msgid "cannot get next DIE: %s\n" msgstr "не вдалося визначити наступний DIE: %s\n" -#: src/readelf.c:5469 +#: src/readelf.c:6023 #, c-format msgid "cannot get next DIE: %s" msgstr "не вдалося визначити наступний DIE: %s" -#: src/readelf.c:5518 -#, c-format -msgid "cannot get line data section data: %s" -msgstr "не вдалося отримати дані розділу лінійних даних: %s" - -#: src/readelf.c:5531 +#: src/readelf.c:6059 #, c-format msgid "" "\n" -"Table at offset %Zu:\n" +"DWARF section [%2zu] '%s' at offset %#:\n" +"\n" msgstr "" "\n" -"Таблиця за зміщенням %Zu:\n" +"Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" +"\n" -#: src/readelf.c:5586 +#: src/readelf.c:6158 +#, c-format +msgid "cannot get line data section data: %s" +msgstr "не вдалося отримати дані розділу лінійних даних: %s" + +#: src/readelf.c:6226 #, c-format msgid "" "\n" @@ -5383,12 +5589,12 @@ msgstr "" "\n" "Коди операцій:\n" -#: src/readelf.c:5607 +#: src/readelf.c:6247 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "некоректні дані зі зміщенням %tu у розділі [%zu] «%s»" -#: src/readelf.c:5622 +#: src/readelf.c:6262 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" @@ -5396,7 +5602,7 @@ msgstr[0] " [%*] %hhu аргумент\n" msgstr[1] " [%*] %hhu аргументи\n" msgstr[2] " [%*] %hhu аргументів\n" -#: src/readelf.c:5630 +#: src/readelf.c:6270 msgid "" "\n" "Directory table:" @@ -5404,7 +5610,7 @@ msgstr "" "\n" "Таблиця каталогу:" -#: src/readelf.c:5646 +#: src/readelf.c:6286 msgid "" "\n" "File name table:\n" @@ -5414,7 +5620,7 @@ msgstr "" "Таблиця назв файлів:\n" " Запис Кат Час Розмір Назва" -#: src/readelf.c:5675 +#: src/readelf.c:6315 msgid "" "\n" "Line number statements:" @@ -5422,115 +5628,115 @@ msgstr "" "\n" "Оператори номерів рядків:" -#: src/readelf.c:5751 +#: src/readelf.c:6391 #, 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:5756 +#: src/readelf.c:6396 #, c-format msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" msgstr " спеціальний код операції %u: адреса+%u = %s, рядок%+d = %zu\n" -#: src/readelf.c:5776 +#: src/readelf.c:6416 #, c-format msgid " extended opcode %u: " msgstr " розширений код операції %u: " -#: src/readelf.c:5781 +#: src/readelf.c:6421 msgid " end of sequence" msgstr " кінець послідовності" -#: src/readelf.c:5798 +#: src/readelf.c:6438 #, c-format msgid " set address to %s\n" msgstr " встановити адресу у значення %s\n" -#: src/readelf.c:5819 +#: src/readelf.c:6459 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" " визначення нового файла: dir=%u, mtime=%, довжина=%, назва=" "%s\n" -#: src/readelf.c:5832 +#: src/readelf.c:6472 #, c-format msgid " set discriminator to %u\n" msgstr " встановити розрізнення для %u\n" -#: src/readelf.c:5837 +#: src/readelf.c:6477 msgid " unknown opcode" msgstr " невідомий код операції" -#: src/readelf.c:5849 +#: src/readelf.c:6489 msgid " copy" msgstr " копія" -#: src/readelf.c:5860 +#: src/readelf.c:6500 #, c-format msgid " advance address by %u to %s, op_index to %u\n" msgstr " збільшення адреси на %u до %s, індекс_оп до %u\n" -#: src/readelf.c:5864 +#: src/readelf.c:6504 #, c-format msgid " advance address by %u to %s\n" msgstr " збільшення адреси на %u до %s\n" -#: src/readelf.c:5875 +#: src/readelf.c:6515 #, c-format msgid " advance line by constant %d to %\n" msgstr " просувати рядок на сталу %d до %\n" -#: src/readelf.c:5883 +#: src/readelf.c:6523 #, c-format msgid " set file to %\n" msgstr " встановити файл у %\n" -#: src/readelf.c:5893 +#: src/readelf.c:6533 #, c-format msgid " set column to %\n" msgstr " встановити значення стовпчика %\n" -#: src/readelf.c:5900 +#: src/readelf.c:6540 #, c-format msgid " set '%s' to %\n" msgstr " встановити «%s» у %\n" -#: src/readelf.c:5906 +#: src/readelf.c:6546 msgid " set basic block flag" msgstr " встановити прапорець базового блоку" -#: src/readelf.c:5915 +#: src/readelf.c:6555 #, c-format msgid " advance address by constant %u to %s, op_index to %u\n" msgstr " збільшити адресу на сталу величину %u до %s, індекс_оп до %u\n" -#: src/readelf.c:5919 +#: src/readelf.c:6559 #, c-format msgid " advance address by constant %u to %s\n" msgstr " збільшити адресу на сталу величину %u до %s\n" -#: src/readelf.c:5937 +#: src/readelf.c:6577 #, c-format msgid " advance address by fixed value %u to %s\n" msgstr " збільшити адресу на фіксовану величину %u до %s\n" -#: src/readelf.c:5946 +#: src/readelf.c:6586 msgid " set prologue end flag" msgstr " встановити прапорець кінця вступу" -#: src/readelf.c:5951 +#: src/readelf.c:6591 msgid " set epilogue begin flag" msgstr " встановити прапорець початку епілогу" -#: src/readelf.c:5960 +#: src/readelf.c:6600 #, c-format msgid " set isa to %u\n" msgstr " встановити isa у %u\n" -#: src/readelf.c:5969 +#: src/readelf.c:6609 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" @@ -5538,97 +5744,97 @@ msgstr[0] " невідомий код операції з % параме msgstr[1] " невідомий код операції з % параметрами:" msgstr[2] " невідомий код операції з % параметрами:" -#: src/readelf.c:6001 +#: src/readelf.c:6641 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "не вдалося отримати вміст .debug_loc: %s" -#: src/readelf.c:6071 +#: src/readelf.c:6716 #, c-format msgid " [%6tx] %s..%s" msgstr " [%6tx] %s..%s" -#: src/readelf.c:6073 +#: src/readelf.c:6718 #, c-format msgid " %s..%s" msgstr " %s..%s" -#: src/readelf.c:6080 +#: src/readelf.c:6725 msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:6132 src/readelf.c:6286 +#: src/readelf.c:6777 src/readelf.c:6931 #, c-format msgid "cannot get macro information section data: %s" msgstr "не вдалося отримати дані розділу відомостей щодо макросів: %s" -#: src/readelf.c:6211 +#: src/readelf.c:6856 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** незавершений рядок наприкінці розділу" -#: src/readelf.c:6327 -#, fuzzy, c-format +#: src/readelf.c:6972 +#, c-format msgid " Offset: 0x%\n" -msgstr " Зміщення: 0x%zx\n" +msgstr " Зміщення: 0x%\n" -#: src/readelf.c:6339 +#: src/readelf.c:6984 #, c-format msgid " Version: %\n" msgstr " Версія: %\n" -#: src/readelf.c:6345 src/readelf.c:7055 +#: src/readelf.c:6990 src/readelf.c:7703 #, c-format msgid " unknown version, cannot parse section\n" msgstr " невідома версія, не вдалося обробити розділ\n" -#: src/readelf.c:6352 +#: src/readelf.c:6997 #, c-format msgid " Flag: 0x%\n" msgstr " Прапорець: 0x%\n" -#: src/readelf.c:6355 +#: src/readelf.c:7000 #, c-format msgid " Offset length: %\n" msgstr " Довжина зміщення: %\n" -#: src/readelf.c:6363 +#: src/readelf.c:7008 #, c-format msgid " .debug_line offset: 0x%\n" msgstr " зміщення .debug_line: 0x%\n" -#: src/readelf.c:6375 +#: src/readelf.c:7021 #, c-format msgid " extension opcode table, % items:\n" msgstr " таблиця кодів операцій розширень, записів — %:\n" -#: src/readelf.c:6382 +#: src/readelf.c:7028 #, c-format msgid " [%]" msgstr " [%]" -#: src/readelf.c:6394 +#: src/readelf.c:7040 #, c-format msgid " % arguments:" msgstr " % аргументів:" -#: src/readelf.c:6422 +#: src/readelf.c:7068 #, c-format msgid " no arguments." msgstr " немає аргументів." -#: src/readelf.c:6657 +#: src/readelf.c:7303 #, c-format msgid "vendor opcode not verified?" msgstr "код операції постачальника не перевірено?" -#: src/readelf.c:6685 +#: src/readelf.c:7331 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" " [%5d] зміщення DIE: %6, зміщення CU DIE: %6, назва: %s\n" -#: src/readelf.c:6726 +#: src/readelf.c:7372 #, c-format msgid "" "\n" @@ -5639,12 +5845,12 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" " %*s Рядок\n" -#: src/readelf.c:6740 +#: src/readelf.c:7386 #, c-format msgid " *** error while reading strings: %s\n" msgstr " *** помилка під час читання рядків: %s\n" -#: src/readelf.c:6760 +#: src/readelf.c:7406 #, c-format msgid "" "\n" @@ -5653,7 +5859,7 @@ msgstr "" "\n" "Розділ таблиці пошуку вікон виклику [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:6862 +#: src/readelf.c:7508 #, c-format msgid "" "\n" @@ -5662,22 +5868,22 @@ msgstr "" "\n" "Розділ таблиці обробки виключень [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:6885 +#: src/readelf.c:7531 #, c-format msgid " LPStart encoding: %#x " msgstr " Кодування LPStart: %#x " -#: src/readelf.c:6897 +#: src/readelf.c:7543 #, c-format msgid " TType encoding: %#x " msgstr " Кодування TType: %#x " -#: src/readelf.c:6911 +#: src/readelf.c:7557 #, c-format msgid " Call site encoding: %#x " msgstr " Кодування місця виклику:%#x " -#: src/readelf.c:6924 +#: src/readelf.c:7570 msgid "" "\n" " Call site table:" @@ -5685,7 +5891,7 @@ msgstr "" "\n" " Таблиця місця виклику:" -#: src/readelf.c:6938 +#: src/readelf.c:7584 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5698,12 +5904,12 @@ msgstr "" " Місце застосування: %#\n" " Дія: %u\n" -#: src/readelf.c:6998 +#: src/readelf.c:7644 #, c-format msgid "invalid TType encoding" msgstr "некоректне кодування TType" -#: src/readelf.c:7019 +#: src/readelf.c:7665 #, c-format msgid "" "\n" @@ -5712,37 +5918,37 @@ msgstr "" "\n" "Розділ GDB [%2zu] «%s» за зміщенням %# містить % байтів:\n" -#: src/readelf.c:7048 +#: src/readelf.c:7694 #, c-format msgid " Version: %\n" msgstr " Версія: %\n" -#: src/readelf.c:7064 +#: src/readelf.c:7712 #, c-format msgid " CU offset: %#\n" msgstr " зміщення CU: %#\n" -#: src/readelf.c:7071 +#: src/readelf.c:7719 #, c-format msgid " TU offset: %#\n" msgstr " зміщення TU: %#\n" -#: src/readelf.c:7078 +#: src/readelf.c:7726 #, c-format msgid " address offset: %#\n" msgstr " зміщення адреси: %#\n" -#: src/readelf.c:7085 +#: src/readelf.c:7733 #, c-format msgid " symbol offset: %#\n" msgstr " зміщення символу: %#\n" -#: src/readelf.c:7092 +#: src/readelf.c:7740 #, c-format msgid " constant offset: %#\n" msgstr " стале зміщення: %#\n" -#: src/readelf.c:7099 +#: src/readelf.c:7747 #, c-format msgid "" "\n" @@ -5751,7 +5957,7 @@ msgstr "" "\n" " Список CU зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:7121 +#: src/readelf.c:7769 #, c-format msgid "" "\n" @@ -5760,7 +5966,7 @@ msgstr "" "\n" " Список TU зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:7147 +#: src/readelf.c:7795 #, c-format msgid "" "\n" @@ -5769,7 +5975,7 @@ msgstr "" "\n" " Список адрес зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:7174 +#: src/readelf.c:7824 #, c-format msgid "" "\n" @@ -5778,17 +5984,17 @@ msgstr "" "\n" " Таблиця символів за зміщенням %# містить %zu позицій:\n" -#: src/readelf.c:7259 +#: src/readelf.c:7909 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "не вдалося отримати дескриптор контексту зневаджування: %s" -#: src/readelf.c:7409 src/readelf.c:8010 +#: src/readelf.c:8069 src/readelf.c:8675 src/readelf.c:8786 src/readelf.c:8844 #, c-format msgid "cannot convert core note data: %s" msgstr "не вдалося перетворити дані запису ядра: %s" -#: src/readelf.c:7750 +#: src/readelf.c:8416 #, c-format msgid "" "\n" @@ -5797,21 +6003,21 @@ msgstr "" "\n" "%*s... <повторюється %u разів> ..." -#: src/readelf.c:8109 +#: src/readelf.c:8919 msgid " Owner Data size Type\n" msgstr " Власник Розм. даних Тип\n" -#: src/readelf.c:8127 +#: src/readelf.c:8937 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:8161 +#: src/readelf.c:8987 #, c-format msgid "cannot get content of note section: %s" msgstr "не вдалося отримати вміст розділу записів: %s" -#: src/readelf.c:8188 +#: src/readelf.c:9014 #, c-format msgid "" "\n" @@ -5821,7 +6027,7 @@ msgstr "" "Розділ записів (note) [%2zu] «%s» з % байтів за зміщенням " "%#0:\n" -#: src/readelf.c:8211 +#: src/readelf.c:9037 #, c-format msgid "" "\n" @@ -5830,7 +6036,7 @@ msgstr "" "\n" "Сегмент записів з % байтів за зміщенням %#0:\n" -#: src/readelf.c:8257 +#: src/readelf.c:9083 #, c-format msgid "" "\n" @@ -5839,12 +6045,12 @@ msgstr "" "\n" "У розділі [%Zu] «%s» не міститься даних для створення дампу.\n" -#: src/readelf.c:8263 src/readelf.c:8286 +#: src/readelf.c:9089 src/readelf.c:9112 #, c-format msgid "cannot get data for section [%Zu] '%s': %s" msgstr "не вдалося отримати дані для розділу [%Zu] «%s»: %s" -#: src/readelf.c:8267 +#: src/readelf.c:9093 #, c-format msgid "" "\n" @@ -5853,7 +6059,7 @@ msgstr "" "\n" "Шіст. дамп розділу [%Zu] «%s», % байтів за зміщенням %#0:\n" -#: src/readelf.c:8280 +#: src/readelf.c:9106 #, c-format msgid "" "\n" @@ -5862,7 +6068,7 @@ msgstr "" "\n" "У розділі [%Zu] «%s» не міститься рядків для створення дампу.\n" -#: src/readelf.c:8290 +#: src/readelf.c:9116 #, c-format msgid "" "\n" @@ -5871,7 +6077,7 @@ msgstr "" "\n" "Розділ рядків [%Zu] «%s» містить % байтів за зміщенням %#0:\n" -#: src/readelf.c:8338 +#: src/readelf.c:9164 #, c-format msgid "" "\n" @@ -5880,7 +6086,7 @@ msgstr "" "\n" "розділу [%lu] не існує" -#: src/readelf.c:8367 +#: src/readelf.c:9193 #, c-format msgid "" "\n" @@ -5889,12 +6095,12 @@ msgstr "" "\n" "розділу «%s» не існує" -#: src/readelf.c:8424 +#: src/readelf.c:9250 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "не вдалося отримати покажчик символів архіву «%s»: %s" -#: src/readelf.c:8427 +#: src/readelf.c:9253 #, c-format msgid "" "\n" @@ -5903,7 +6109,7 @@ msgstr "" "\n" "У архіві «%s» немає покажчика символів\n" -#: src/readelf.c:8431 +#: src/readelf.c:9257 #, c-format msgid "" "\n" @@ -5912,12 +6118,12 @@ msgstr "" "\n" "Покажчик архіву «%s» містить %Zu записів:\n" -#: src/readelf.c:8449 +#: src/readelf.c:9275 #, c-format msgid "cannot extract member at offset %Zu in '%s': %s" msgstr "не вдалося видобути елемент за зміщенням %Zu у «%s»: %s" -#: src/readelf.c:8454 +#: src/readelf.c:9280 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Елемент архіву «%s» містить:\n" @@ -5983,12 +6189,12 @@ msgstr "Некоректна основа числення: %s" msgid "%s: file format not recognized" msgstr "%s: не вдалося розпізнати формат файла" -#: src/size.c:438 src/size.c:581 +#: src/size.c:438 src/size.c:571 #, c-format msgid " (ex %s)" msgstr " (прикл. %s)" -#: src/size.c:606 +#: src/size.c:596 msgid "(TOTALS)\n" msgstr "(ЗАГАЛОМ)\n" @@ -6030,27 +6236,27 @@ msgstr "Замінник --radix=o" msgid "Print the strings of printable characters in files." msgstr "Вивести рядки файлів з символів, придатних для друку." -#: src/strings.c:260 src/strings.c:295 +#: src/strings.c:267 src/strings.c:302 #, c-format msgid "invalid value '%s' for %s parameter" msgstr "некоректне значення «%s» параметра %s" -#: src/strings.c:306 +#: src/strings.c:313 #, c-format msgid "invalid minimum length of matched string size" msgstr "некоректна мінімальна довжина розмірності рядка для порівняння" -#: src/strings.c:591 +#: src/strings.c:596 #, c-format msgid "lseek64 failed" msgstr "помилка lseek64" -#: src/strings.c:608 src/strings.c:672 +#: src/strings.c:613 src/strings.c:677 #, c-format msgid "re-mmap failed" msgstr "помилка повторного використання mmap" -#: src/strings.c:645 +#: src/strings.c:650 #, c-format msgid "mprotect failed" msgstr "помилка mprotect" @@ -6123,7 +6329,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 вказано двічі" @@ -6150,87 +6356,87 @@ msgstr "" "%s: не можна використовувати -o або -f під час вилучення додаткового вмісту " "архіву" -#: src/strip.c:467 +#: src/strip.c:468 #, c-format msgid "cannot open EBL backend" msgstr "не вдалося відкрити канал сервера EBL" -#: src/strip.c:517 src/strip.c:541 +#: src/strip.c:518 src/strip.c:542 #, c-format msgid "cannot create new file '%s': %s" msgstr "не вдалося створити файл «%s»: %s" -#: src/strip.c:601 +#: src/strip.c:608 #, c-format msgid "illformed file '%s'" msgstr "помилкове форматування файла «%s»" -#: src/strip.c:905 src/strip.c:994 +#: src/strip.c:930 src/strip.c:1019 #, c-format msgid "while generating output file: %s" msgstr "під час спроби створення файла з виведеними даними: %s" -#: src/strip.c:967 src/strip.c:1929 +#: src/strip.c:992 src/strip.c:1957 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: помилка під час створення заголовка ELF: %s" -#: src/strip.c:981 +#: src/strip.c:1006 #, c-format msgid "while preparing output for '%s'" msgstr "під час приготування виведених даних для «%s»" -#: src/strip.c:1032 src/strip.c:1088 +#: src/strip.c:1057 src/strip.c:1114 #, c-format msgid "while create section header section: %s" msgstr "під час створення розділу заголовка розділу: %s" -#: src/strip.c:1038 +#: src/strip.c:1063 #, c-format msgid "cannot allocate section data: %s" msgstr "не вдалося розмістити дані розділу: %s" -#: src/strip.c:1097 +#: src/strip.c:1123 #, c-format msgid "while create section header string table: %s" msgstr "під час створення таблиці рядків заголовка розділу: %s" -#: src/strip.c:1724 +#: src/strip.c:1752 #, c-format msgid "bad relocation" msgstr "помилкове пересування" -#: src/strip.c:1841 src/strip.c:1951 +#: src/strip.c:1869 src/strip.c:1979 #, c-format msgid "while writing '%s': %s" msgstr "під час запису «%s»: %s" -#: src/strip.c:1852 +#: src/strip.c:1880 #, c-format msgid "while creating '%s'" msgstr "під час спроби створення «%s»" -#: src/strip.c:1874 +#: src/strip.c:1902 #, c-format msgid "while computing checksum for debug information" msgstr "під час обчислення контрольної суми для діагностичних даних" -#: src/strip.c:1937 +#: src/strip.c:1965 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: помилка під час читання файла: %s" -#: src/strip.c:1976 src/strip.c:1996 +#: src/strip.c:2004 src/strip.c:2024 #, c-format msgid "while writing '%s'" msgstr "під час спроби запису «%s»" -#: src/strip.c:2030 src/strip.c:2037 +#: src/strip.c:2061 src/strip.c:2068 #, c-format msgid "error while finishing '%s': %s" msgstr "помилка під час завершення «%s»: %s" -#: src/strip.c:2060 src/strip.c:2117 +#: src/strip.c:2091 src/strip.c:2148 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "не вдалося встановити права доступу та дату зміни «%s»" @@ -6269,211 +6475,215 @@ 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:263 src/unstrip.c:1828 #, c-format msgid "cannot create program headers: %s" msgstr "не вдалося створити заголовки програми: %s" -#: src/unstrip.c:262 +#: src/unstrip.c:269 #, c-format msgid "cannot copy program header: %s" msgstr "не вдалося скопіювати заголовок програми: %s" -#: src/unstrip.c:272 +#: src/unstrip.c:279 #, c-format msgid "cannot copy section header: %s" msgstr "не вдалося скопіювати заголовок розділу: %s" -#: src/unstrip.c:275 src/unstrip.c:1501 +#: src/unstrip.c:282 src/unstrip.c:1509 #, c-format msgid "cannot get section data: %s" msgstr "не вдалося отримати дані розділу: %s" -#: src/unstrip.c:277 src/unstrip.c:1503 +#: src/unstrip.c:284 src/unstrip.c:1511 #, c-format msgid "cannot copy section data: %s" msgstr "не вдалося скопіювати дані розділу: %s" -#: src/unstrip.c:301 +#: src/unstrip.c:308 #, c-format msgid "cannot create directory '%s'" msgstr "не вдалося створити каталог «%s»" -#: src/unstrip.c:341 src/unstrip.c:758 src/unstrip.c:1535 +#: src/unstrip.c:348 src/unstrip.c:765 src/unstrip.c:1543 #, 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:364 src/unstrip.c:582 src/unstrip.c:603 src/unstrip.c:615 +#: src/unstrip.c:1564 src/unstrip.c:1694 src/unstrip.c:1718 #, c-format msgid "cannot update symbol table: %s" msgstr "не вдалося оновити таблицю символів: %s" -#: src/unstrip.c:367 +#: src/unstrip.c:374 #, c-format msgid "cannot update section header: %s" msgstr "не вдалося оновити заголовок розділу: %s" -#: src/unstrip.c:406 src/unstrip.c:417 +#: src/unstrip.c:413 src/unstrip.c:424 #, c-format msgid "cannot update relocation: %s" msgstr "не вдалося оновити пересування: %s" -#: src/unstrip.c:504 +#: src/unstrip.c:511 #, c-format msgid "cannot get symbol version: %s" msgstr "не вдалося отримати версію символу: %s" -#: src/unstrip.c:516 +#: src/unstrip.c:523 #, 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:771 #, c-format msgid "invalid string offset in symbol [%Zu]" msgstr "некоректне зміщення рядка у символі [%Zu]" -#: src/unstrip.c:906 src/unstrip.c:1246 +#: src/unstrip.c:913 src/unstrip.c:1254 #, 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:954 src/unstrip.c:973 src/unstrip.c:1006 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "не вдалося прочитати розділ «.gnu.prelink_undo»: %s" -#: src/unstrip.c:987 +#: src/unstrip.c:994 #, c-format msgid "invalid contents in '%s' section" msgstr "некоректний вміст розділу «%s»" -#: src/unstrip.c:1042 src/unstrip.c:1366 +#: src/unstrip.c:1049 src/unstrip.c:1374 #, 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:1174 src/unstrip.c:1189 src/unstrip.c:1455 #, c-format msgid "cannot add section name to string table: %s" msgstr "не вдалося додати назву розділу до таблиці рядків: %s" -#: src/unstrip.c:1190 +#: src/unstrip.c:1198 #, c-format msgid "cannot update section header string table data: %s" msgstr "не вдалося оновити дані заголовка розділу у таблиці рядків: %s" -#: src/unstrip.c:1217 src/unstrip.c:1221 +#: src/unstrip.c:1225 src/unstrip.c:1229 #, 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:1233 src/unstrip.c:1237 src/unstrip.c:1470 #, c-format msgid "cannot get section count: %s" msgstr "не вдалося отримати кількість розділів: %s" -#: src/unstrip.c:1232 +#: src/unstrip.c:1240 #, 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:1299 src/unstrip.c:1389 #, c-format msgid "cannot read section header string table: %s" msgstr "не вдалося прочитати таблицю рядків заголовка розділу: %s" -#: src/unstrip.c:1441 +#: src/unstrip.c:1449 #, c-format msgid "cannot add new section: %s" msgstr "не вдалося додати новий розділ: %s" -#: src/unstrip.c:1543 +#: src/unstrip.c:1551 #, c-format msgid "symbol [%Zu] has invalid section index" msgstr "символ [%Zu] має некоректний індекс розділу" -#: src/unstrip.c:1781 +#: src/unstrip.c:1789 #, c-format msgid "cannot read section data: %s" msgstr "не вдалося прочитати дані розділу: %s" -#: src/unstrip.c:1802 +#: src/unstrip.c:1810 #, c-format msgid "cannot get ELF header: %s" msgstr "не вдалося отримати заголовок ELF: %s" -#: src/unstrip.c:1830 +#: src/unstrip.c:1838 #, c-format msgid "cannot update program header: %s" msgstr "не вдалося оновити заголовок програми: %s" -#: src/unstrip.c:1835 src/unstrip.c:1914 +#: src/unstrip.c:1843 src/unstrip.c:1922 #, c-format msgid "cannot write output file: %s" msgstr "не вдалося записати файл виведених даних: %s" -#: src/unstrip.c:1883 +#: src/unstrip.c:1891 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Дані DWARF не скориговано відповідно до відхилення перед компонуванням; " "спробуйте виправити це командою prelink -u" -#: src/unstrip.c:1886 +#: src/unstrip.c:1894 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -6481,57 +6691,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:1913 src/unstrip.c:1964 src/unstrip.c:1976 src/unstrip.c:2062 #, 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:1955 +msgid "WARNING: " +msgstr "" + +#: src/unstrip.c:1957 +msgid ", use --force" +msgstr "" + +#: src/unstrip.c:1980 +msgid "ELF header identification (e_ident) different" +msgstr "" -#: src/unstrip.c:1994 +#: src/unstrip.c:1983 +msgid "ELF header type (e_type) different" +msgstr "" + +#: src/unstrip.c:1986 +msgid "ELF header machine type (e_machine) different" +msgstr "" + +#: src/unstrip.c:1989 +msgid "stripped program header (e_phnum) smaller than unstripped" +msgstr "" + +#: src/unstrip.c:2019 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "не вдалося знайти очищений файл для модуля «%s»: %s" -#: src/unstrip.c:1998 +#: src/unstrip.c:2023 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "не вдалося відкрити очищений файл «%s» для модуля «%s»: %s" -#: src/unstrip.c:2013 +#: src/unstrip.c:2038 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "не вдалося знайти файл діагностичних даних для модуля «%s»: %s" -#: src/unstrip.c:2017 +#: src/unstrip.c:2042 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "не вдалося відкрити файл діагностичних даних «%s» для модуля «%s»: %s" -#: src/unstrip.c:2030 +#: src/unstrip.c:2055 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "у модулі «%s» файл «%s» не очищено strip" -#: src/unstrip.c:2061 +#: src/unstrip.c:2086 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "не вдалося кешувати адреси розділів для модуля «%s»: %s" -#: src/unstrip.c:2194 +#: src/unstrip.c:2219 #, c-format msgid "no matching modules found" msgstr "відповідних модулів не виявлено" -#: src/unstrip.c:2203 +#: src/unstrip.c:2228 #, c-format msgid "matched more than one module" msgstr "встановлено відповідність декількох модулів" -#: src/unstrip.c:2250 +#: src/unstrip.c:2275 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -6539,7 +6768,7 @@ msgstr "" "ОЧИЩЕНИЙ-ФАЙЛ ФАЙЛ-DEBUG\n" "[МОДУЛЬ...]" -#: src/unstrip.c:2251 +#: src/unstrip.c:2276 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" @@ -6595,6 +6824,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 fc576fc..986b341 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,552 @@ +2014-08-25 Josh Stone + + * Makefile.am: Prevent premature @AR@ replacement in a sed expression. + +2014-07-04 Menanteau Guy + Mark Wielaard + + * elflint (check_symtab): Add ".TOC." to the list of possibly + dangling symbols because of sourceware PR13621. + +2014-06-14 Mark Wielaard + + * elflint (check_symtab): Use ebl_func_addr_mask on st_value. + +2014-05-27 Mark Wielaard + + * readelf.c (print_debug): Skip section if name is NULL. + +2014-05-26 Mark Wielaard + + * readelf.c (handle_relocs_rela): Print header like handle_relocs_rel + does, when sh_info == 0. + +2014-05-26 Mark Wielaard + + * 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 + + * 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 + + * elflint.c (check_reloc_shdr): Check ebl_check_reloc_target_type. + +2014-05-01 Mark Wielaard + + * readelf.c (find_no_debuginfo): Call dwfl_standard_find_debuginfo + if looking for alternate debug file. + +2014-04-11 Mark Wielaard + + * Makefile.am (AM_CPPFLAGS): Add -I libdwelf. + +2014-04-22 Mark Wielaard + + * readelf.c (handle_core_item): Make sure variable length array + contains at least enough space for terminating zero char. + +2014-04-22 Mark Wielaard + + * readelf.c (print_gdb_index_section): Use unsigned int for 31 bits + left shift. + +2014-03-13 Mark Wielaard + + * Makefile.am: Remove no_mudflap.os. Remove libmudflap from all + LDADD lines. + * strings.c (process_chunk): Remove _MUDFLAP condition. + +2014-04-09 Mark Wielaard + + * readelf.c (print_debug_aranges_section): Don't get the raw section + data, use the possibly decompressed .[z]debug sectiondata. + (print_debug_ranges_section): Likewise. + (print_debug_frame_section): Likewise. + (print_debug_line_section): Likewise. + (print_debug_loc_section): Likewise. + (print_debug_macinfo_section): Likewise. + (print_debug_macro_section): Likewise. + +2014-04-10 Mark Wielaard + + * readelf.c (buf_read_ulong): Pass actual long size to convert. + +2014-03-05 Mark Wielaard + + * readelf.c (attr_callback): Print DW_FORM_sdata values as signed + numbers. + +2014-02-24 Mark Wielaard + + * readelf (print_phdr): Check there is a SHT_PROGBITS section at the + offset given by p_offsets for a PT_INTERP segment before trying to + display the interpreter string. + +2014-02-07 Mark Wielaard + + * readelf.c (print_phdr): Check phdr->p_filesz and make sure + interpreter string is zero terminated before calling printf. + +2014-01-22 Mark Wielaard + + * Makefile.am (nm_no_Wformat): Removed. + (size_no_Wformat): Likewise. + (strings_no_Wformat): Likewise. + (addr2line_no_Wformat): Likewise. + * size.c (show_sysv): Use fmtstr directly as literal in printf. + (show_sysv_one_line): Likewise. + * strings.c (locfmt): Removed. + (radix): New static enum. + (parse_opt): Set radix, not locfmt. + (process_chunk_mb): Use fmtstr directly as literal in printf based + on radix. + (process_chunk): Likewise. + * nm.c (show_symbols_sysv): Use fmtstr directly as literal in printf. + (show_symbols_bsd): Likewise. + (show_symbols_posix): Likewise. + +2014-01-21 Mark Wielaard + + * stack.c (show_inlines): New static boolean. + (print_frame): New function split out from... + (print_frames): ..here. If show_inlines is true and we found a + DIE for the frame address, call print_inline_frames otherwise + call print_frame. Keep track of and track frame_nr. + (print_inline_frames): New function. + (parse_opt): Handle '-i'. + (main): Add 'i' to options. + +2014-01-27 Mark Wielaard + + * stack.c (maxframes): Initialize to 256. + (main): Document new default in options. Document magic number + used in frames.allocated initialization. + +2014-01-20 Mark Wielaard + + * stack.c (show_debugname): New static boolean. + (die_name): New function. + (print_frames): If show_debugname is true set symname to the + first function-like DIE with a name in scope for the address in + the debuginfo. + (parse_opt): Handle '-d'. + (main): Add 'd' to options. + +2014-01-20 Mark Wielaard + + * addr2line.c (handle_address): Initialize scopes to NULL. + +2014-01-17 Roland McGrath + + * strip.c (handle_elf): Check for bogus values in sh_link, sh_info, + st_shndx, e_shstrndx, and SHT_GROUP or SHT_SYMTAB_SHNDX data. + Don't use assert on input values, instead bail with "illformed" error. + +2014-01-17 Roland McGrath + + * readelf.c (handle_dynamic, handle_symtab): Check for bogus sh_link. + (handle_verneed, handle_verdef, handle_versym, handle_hash): Likewise. + (handle_scngrp): Check for bogus sh_info. + +2014-01-17 Jakub Jelinek + + * elflint.c (section_name): Return "" instead of + crashing on invalid section name. + (check_symtab, is_rel_dyn, check_rela, check_rel, check_dynamic, + check_symtab_shndx, check_hash, check_versym): Robustify. + (check_hash): Don't check entries beyond end of section. + (check_note): Don't crash if gelf_rawchunk fails. + +2014-01-17 Petr Machata + + * readelf.c (handle_dynamic, handle_relocs_rel) + (handle_relocs_rela, handle_versym, print_liblist): + Use gelf_fsize instead of relying on shdr->sh_entsize. + +2014-01-14 Mark Wielaard + + * readelf.c (print_debug_macro_section): Clear vendor array before + use. + +2014-01-15 Jan Kratochvil + + Fix corruption of non-C++ symbols by the demangler. + * nm.c (show_symbols_sysv, show_symbols_bsd, show_symbols_posix) + (show_symbols): Check for _Z. + * stack.c (print_frames) : Check for _Z. + +2014-01-02 Mark Wielaard + + * stack.c (show_raw): Declare unconditionally. + (parse_opt): Handle '-r' unconditionally. + (main): Show "raw" option even without USE_DEMANGLE. + +2014-01-02 Mark Wielaard + + * stack.c (print_frames): Print 0x before build-id hex-offset. + +2014-01-02 Mark Wielaard + + * stack.c (maxframes): Increase to 2048. + (struct frames): Add allocated field. + (frame_callback): If frames used is frames allocated, realloc. + (print_frames): Show an error if maxframes has been reached. + (parse_opt): Allow -n 0 for unlimited frames. + (main): Document -n 0 and new default 2048 frames. Allocate initial + number of frames with malloc. + +2013-12-30 Mark Wielaard + + * stack.c (parse_opt): Explicitly call dwfl_linux_proc_attach + or dwfl_core_file_attach and check for errors. + +2013-12-28 Mark Wielaard + + * stack.c (print_frames): Remove address width code and use... + (get_addr_width): ...this new function. + (show_modules): New static boolean. + (module_callback): New static function. + (parse_opt): Handle '-l'. + (main): Add 'l' to options. If show_modules then use dwfl_getmodules + with module_callback to show all detected modules and possible + build_id, elf and dwarf files. + +2013-12-27 Mark Wielaard + + * stack.c (frames_shown): New static boolean. + (EXIT_OK,EXIT_ERROR,EXIT_BAD,EXIT_USAGES): New defines. + (frame_callback): Return -1 on error. Don't print error. + (print_frames): Add arguments, tid, dwflerr and what. Print tid. + If there was an error report it with address and module if possible. + Record whether any frames were actually printed. + (thread_callback): Collect tid and err, pass it to print_frames. + (parse_opt): Use EXIT_BAD for errors. On ARGP_KEY_END print errno + if dwfl_linux_proc_report returned it. Check whether we are properly + attached with dwfl_pid. + (main): Document exit status. Don't report DWARF_CB_ABORT from + callbacks as error. Pass real errors to print_frames. Return + EXIT_BAD if no frames could be shown. Return EXIT_ERROR if there + were any non-fatal errors. + +2013-12-23 Mark Wielaard + + * Makefile.am (stack_LDADD): Add demanglelib. + * stack.c (show_quiet): New static boolean, default false. + (show_raw): Likewise. + (demangle_buffer_len): New static size_t. + (demangle_buffer): New static char *. + (print_frames): Don't resolve pc name if show_quiet. Demangle name + unless show_raw. + (parse_opt): Handle '-q' and '-r'. + (main): Add 'q' and 'r' to options. Free demangle_buffer. + +2013-12-23 Mark Wielaard + + * stack.c (OPT_DEBUGINFO): New define. + (OPT_COREFILE): Likewise. + (pid): New static. + (core_fd): Likewise. + (core): Likewise. + (exec): Likewise. + (debuginfo_path): Likewise. + (parse_opt): Handle '-p', '--core', '-e' and '--debuginfo-path'. + Do argument sanity checking. Setup Dwfl. + (main): Add 'p', 'core', 'e' and 'debuginfo-path' to options. + Remove argp_child children, simplify argp doc, remove custom + usage message and construction of dwfl with dwfl_standard_argp. + Use pid directly as tid. close core and core_fd if opened. Print + pid of process or core. + +2013-12-23 Mark Wielaard + + * stack.c (show_build_id): New static boolean. + (print_frames): Print module build-id, load address and pc offset + if show_build_id is true. + (parse_opt): Handle '-b'. + (main): Add -b to options. + +2013-12-22 Mark Wielaard + + * stack.c (maxframes): New static unsigned. Initialize to 64. + (struct frame): New struct. + (struct frames): Likewise. + (dwfl): New static Dwfl pointer. + (frame_callback): Use arg as struct frames and fill it next frame. + Return DWARF_CB_ABORT when maxframes has been reached. Move + printing of frame to... + (print_frames): ...here. New function. + (thread_callback): Use arg as struct frames and set frames to zero. + Call print_frames. + (parse_opt): Handle '-n'. + (main): Add -n to options. Allocate frames using maxframes. Pass + frames to frame_callback and thread_callback. + +2013-12-20 Mark Wielaard + + * stack.c (show_one_tid): New static boolean. + (parse_opt): Handle '-1'. + (main): Add -1 to options. Call dwfl_getthread_frames when + show_one_tid is true. + +2013-12-18 Mark Wielaard + + * addr2line.c (options): Add symbol-sections, 'x'. + (show_symbol_sections): New static bool. + (parse_opt): Handle 'x'. + (print_addrsym): Use dwfl_module_addrinfo value.r + Also show section of address with show_symbol_sections. + (find_symbol): Use dwfl_module_getsym_info and set value. + (handle_address): Request value and use it instead of sym.st_value. + * readelf.c (format_dwarf_addr): Use dwfl_module_addrinfo to get + name and offset. + +2013-12-17 Masatake YAMATO + Mark Wielaard + + * stack.c (show_activation, show_module, show_source): New variables. + (parse_opt): Set show_activation if -a option is given. + Set show_module if -m option is given. Set show_source if -s option + is given. Set all show booleans when -v option is given. + (main): Added `-a', `-m', `-s', and `-v' to the help message. + (frame_callback): Print module and source file information. + +2013-11-25 Petr Machata + + * elflint.c (valid_e_machine): Add EM_AARCH64. + +2013-11-14 Petr Machata + + * readelf.c (handle_core_item) <'h'>: New branch for handling + fields that shouldn't be displayed. + +2013-11-10 Mark Wielaard + + * stack.c: Use ARGP_PROGRAM_VERSION_HOOK_DEF and + ARGP_PROGRAM_BUG_ADDRESS_DEF. + (print_version): New function. + +2013-11-09 Mark Wielaard + + * arlib.c (arlib_init): Call snprintf before using the result + with memcpy. + (arlib_finalize): Likewise. + * nm.c (show_symbols_sysv): Don't modify cnt inside assert. + +2013-11-07 Jan Kratochvil + + * Makefile.am (bin_PROGRAMS): Add stack. + (stack_LDADD): New. + * stack.c: New file. + +2013-11-05 Mark Wielaard + + * readelf.c (print_debug_ranges_section): Cast address to size_t + before comparison. + (print_debug_loc_section): Likewise. + +2013-10-18 Mark Wielaard + + * ar.c (main): Correct operation check when instance_specifed is set. + +2013-09-26 Petr Machata + + * readelf.c (handle_file_note): New function. + (handle_notes_data): Call it to handle NT_FILE notes. + +2013-09-26 Petr Machata + + * readelf.c (handle_siginfo_note): New function. + (handle_notes_data): Call it to handle NT_SIGINFO notes. + (buf_read_int, buf_read_ulong, buf_has_data): New functions. + +2013-08-13 Mark Wielaard + + * addr2line.c (options): Add "inlines", 'i'. + (show_inlines): New bool. + (parse_opt): Handle 'i'. + (print_diesym): New static function. + (print_src): New function taking code from... + (handle_address): here. Call print_src. Print inlines. + +2013-08-12 Mark Wielaard + + * addr2line.c (main): If there is a newline char at end of buf, + then remove it. + +2013-07-05 Mark Wielaard + + * readelf.c (print_ops): Take CU as argument, use it to print + parameter_ref DIE offset. + (struct listptr): Replace base field with cu. + (listptr_base): New function. + (compare_listptr): Use listptr_base. + (notice_listptr): Take CU as argument. + (skip_listptr_hole): Likewise. + (print_debug_ranges_section): Pass NULL as CU to skip_listptr_hole. + (print_cfa_program): Pass NULL as CU to print_ops. + (struct attrcb_args): Replace cu_base field with cu. + (attr_callback): Pass cu not cu_base to notice_listptr. + (print_debug_units): Don't calculate base, just set cu. + (print_debug_loc_section): Pass cu to skip_listptr_hole and + print_ops. + +2013-05-06 Mark Wielaard + + * readelf.c (print_ops): Format first DW_OP_GNU_implicit_pointer + argument as DIE offset. + +2013-04-24 Mark Wielaard + + * Makefile.am: Use AM_CPPFLAGS instead of INCLUDES. + +2013-03-25 Mark Wielaard + + * readelf.c (argp_options): Add decodedline. + (decodedline): New boolean initialized to false. + (parse_opt): Set decodedline when arg is decodedline. + (print_decoded_line_section): New function. + (print_debug_line_section): Call print_decoded_line_section when + decodedline is true. + +2013-03-25 Mark Wielaard + + * readelf.c (argp_option): Add decodedaranges. + (decodedaranges): New boolean initialized to false. + (parse_opt): Set decodedaranges when arg is decodedaranges. + (print_debug_aranges_section): Reimplemented and original + implementation renamed to... + (print_decoded_aranges_section): this. + +2013-03-25 Mark Wielaard + + * readelf.c (attrcb_args): Add Dwarf_Die. + (attr_callback): When highpc is in constant form also print as + address. + (print_debug_units): Set args.die. + +2013-03-19 Mark Wielaard + + * readelf.c (print_gdb_index_section): Free format_dwarf_addr results. + +2013-03-18 Mark Wielaard + + * readelf.c (print_gdb_index_section): Accept version 8. + +2013-03-01 Mark Wielaard + + * findtextrel.c (process_file): Release ELF and close file when not + text relocations are found. + * strip.c (handle_elf): Track memory used for .debuglink section data + and free when done. + +2013-02-24 Mark Wielaard + + * elflint.c (check_symtab): Add __bss_start__ to the list of symbols + allowed to have out of section values because of GNU ld bugs. + +2013-02-06 Mark Wielaard + + * elflint.c (check_symtab): Add __bss_start and __TMC_END__ to the + list of symbols allowed to have out of section values because of + GNU ld bugs in either .symtab or .dynsym, but only when they are + zero sized. + +2013-01-24 Mark Wielaard + + * readelf.c (argp_option): Add unresolved-address-offsets, U. + (print_unresolved_addresses): New static. + (parse_opt): Handle 'U', set print_unprocessed_values. + (format_dwarf_addr): Take and handle new raw argument. + (print_ops): Call format_dwarf_addr with raw offset values. + (print_debug_ranges_section): Likewise. + (print_debug_frame_section): Likewise. + (attr_callback): Likewise. + (print_debug_line_section): Likewise. + (print_debug_loc_section): Likewise. + (print_gdb_index_section): Likewise. + +2013-01-18 Mark Wielaard + + * readelf.c (struct listptr): Add base Dwarf_Addr field. + (compare_listptr): Warn for same offset with different base. + (notice_listptr): Take base argument and set it. + (skip_listptr_hole): Likewise. + (struct attrcb_args): Removed unused cu_offset field. + Add cu_base Dwarf_Addr field. + (attr_callback): Call notice_listptr with cbargs->cu_base. + (print_debug_units): Set args.cu_base. + (print_debug_ranges_section): Get base and use for format_dwarf_addr. + (print_debug_loc_section): Likewise. + +2013-01-29 Jan Kratochvil + + * readelf.c (handle_core_items): Limit special repeated items handling + to single-item formats '\n', 'b' and 'B', assert OFFSET 0 there. + +2012-12-18 Mark Wielaard + + * readelf.c (ELF_INPUT_SECTION): New argp key value. + (argp_option): Add elf-section. + (elf_input_section): New static. + (parse_opt): Handle ELF_INPUT_SECTION and set elf_input_section. + (open_input_section): New function. + (process_file): Call open_input_section if elf_input_section set. + +2013-01-13 David Abdurachmanov + + ar.c (do_oper_delete): Fix num passed to memset. + +2012-12-21 Mark Wielaard + + * readelf.c (print_debug_frame_section): Adjust FDE start address + if pcrel before feeding it to format_dwarf_addr. + +2012-12-21 Mark Wielaard + + * addr2line.c (main): Call dwfl_end. + +2012-12-11 Roland McGrath + + * nm.c (show_symbols_sysv): Fix size passed to snprintf for invalid + sh_name case. + Reported by David Abdurachmanov . + +2012-10-16 Mark Wielaard + + * readelf.c (print_ops): DW_OP_skip and DW_OP_bra targets are + calculated beginning after the operand and 2-byte constant. + +2012-10-12 Jan Kratochvil + + * readelf.c (ITEM_WRAP_COLUMN, REGISTER_WRAP_COLUMN): Merge to ... + (WRAP_COLUMN): ... here. + (print_core_item): Remove parameter format_max. Update function + comment. Replace FORMAT_MAX by the real output width. + (handle_core_item): Remove the FORMAT_MAX values in TYPES, DO_TYPE, + calls of print_core_item, remove variable maxfmt, change + ITEM_WRAP_COLUMN to WRAP_COLUMN. + (handle_core_register): Remove the FORMAT_MAX values in TYPES, BITS, + calls of print_core_item, change REGISTER_WRAP_COLUMN to WRAP_COLUMN. + +2012-10-11 Jan Kratochvil + + * readelf.c (handle_core_item) : Make run an outer block variable. + Increase run only if LASTBIT != 0. Print last element only if RUN > 0. + 2012-08-27 Mark Wielaard * readelf.c (print_debug_macro_section): Print offset as PRIx64. diff --git a/src/Makefile.am b/src/Makefile.am index cf4875e..28dad85 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to create Makefile.in ## -## Copyright (C) 1996-2012 Red Hat, Inc. +## Copyright (C) 1996-2014 Red Hat, Inc. ## This file is part of elfutils. ## ## This file is free software; you can redistribute it and/or modify @@ -19,14 +19,12 @@ include $(top_srcdir)/config/eu.am DEFS += $(YYDEBUG) -DDEBUGPRED=@DEBUGPRED@ \ -DSRCDIR=\"$(shell cd $(srcdir);pwd)\" -DOBJDIR=\"$(shell pwd)\" -INCLUDES += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ - -I$(srcdir)/../libdw -I$(srcdir)/../libdwfl \ - -I$(srcdir)/../libasm +AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ + -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \ + -I$(srcdir)/../libdwfl -I$(srcdir)/../libasm AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw -no_mudflap.os = -fmudflap - YACC = @YACC@ -d AM_YFLAGS = -pld AM_LFLAGS = -Pld -olex.yy.c @@ -37,7 +35,7 @@ native_ld = @native_ld@ base_cpu = @base_cpu@ bin_PROGRAMS = readelf nm size strip ld elflint findtextrel addr2line \ - elfcmp objdump ranlib strings ar unstrip + elfcmp objdump ranlib strings ar unstrip stack ld_dsos = libld_elf_i386_pic.a @@ -88,33 +86,30 @@ if DEMANGLE demanglelib = -lstdc++ endif -nm_no_Wformat = yes -size_no_Wformat = yes -strings_no_Wformat = yes -addr2line_no_Wformat = yes # XXX While the file is not finished, don't warn about this ldgeneric_no_Wunused = yes -readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ +readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) -ldl +nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) -ldl \ $(demanglelib) -size_LDADD = $(libelf) $(libeu) $(libmudflap) -strip_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -ld_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl +size_LDADD = $(libelf) $(libeu) +strip_LDADD = $(libebl) $(libelf) $(libeu) -ldl +ld_LDADD = $(libebl) $(libelf) $(libeu) -ldl if NATIVE_LD # -ldl is always needed for libebl. ld_LDADD += libld_elf.a endif ld_LDFLAGS = -rdynamic -elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap) -addr2line_LDADD = $(libdw) $(libelf) $(libmudflap) -elfcmp_LDADD = $(libebl) $(libelf) $(libmudflap) -ldl -objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) -strings_LDADD = $(libelf) $(libeu) $(libmudflap) -ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) -unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) -ldl +elflint_LDADD = $(libebl) $(libelf) $(libeu) -ldl +findtextrel_LDADD = $(libdw) $(libelf) +addr2line_LDADD = $(libdw) $(libelf) +elfcmp_LDADD = $(libebl) $(libelf) -ldl +objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) -ldl +ranlib_LDADD = libar.a $(libelf) $(libeu) +strings_LDADD = $(libelf) $(libeu) +ar_LDADD = libar.a $(libelf) $(libeu) +unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) -ldl +stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) -ldl $(demanglelib) ldlex.o: ldscript.c ldlex_no_Werror = yes @@ -165,7 +160,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 > $@.new diff --git a/src/Makefile.in b/src/Makefile.in index 8922d26..d1a5bad 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -19,6 +18,51 @@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -37,25 +81,26 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/config/eu.am ChangeLog \ - ldlex.c ldscript.c -@MUDFLAP_TRUE@am__append_1 = -fmudflap +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am ldlex.c ldscript.c \ + $(top_srcdir)/config/depcomp $(top_srcdir)/config/ylwrap \ + $(noinst_HEADERS) ChangeLog bin_PROGRAMS = readelf$(EXEEXT) nm$(EXEEXT) size$(EXEEXT) \ strip$(EXEEXT) ld$(EXEEXT) elflint$(EXEEXT) \ findtextrel$(EXEEXT) addr2line$(EXEEXT) elfcmp$(EXEEXT) \ objdump$(EXEEXT) ranlib$(EXEEXT) strings$(EXEEXT) ar$(EXEEXT) \ - unstrip$(EXEEXT) + unstrip$(EXEEXT) stack$(EXEEXT) @NATIVE_LD_FALSE@noinst_PROGRAMS = $(am__EXEEXT_1) # We never build this library but we need to get the dependency files # of all the linker backends that might be used in a non-generic linker. -@NEVER_TRUE@am__append_2 = libdummy.a +@NEVER_TRUE@am__append_1 = libdummy.a # -ldl is always needed for libebl. -@NATIVE_LD_TRUE@am__append_3 = libld_elf.a +@NATIVE_LD_TRUE@am__append_2 = libld_elf.a @NATIVE_LD_TRUE@am_libld_elf_i386_pic_a_OBJECTS = subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -65,8 +110,11 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = libar_a_AR = $(AR) $(ARFLAGS) libar_a_LIBADD = am_libar_a_OBJECTS = arlib.$(OBJEXT) arlib2.$(OBJEXT) \ @@ -94,28 +142,24 @@ am__DEPENDENCIES_1 = @BUILD_STATIC_FALSE@am__DEPENDENCIES_2 = ../libdw/libdw.so @BUILD_STATIC_TRUE@am__DEPENDENCIES_2 = ../libdw/libdw.a \ @BUILD_STATIC_TRUE@ $(am__DEPENDENCIES_1) $(libelf) $(libebl) -addr2line_DEPENDENCIES = $(am__DEPENDENCIES_2) $(libelf) \ - $(am__DEPENDENCIES_1) +addr2line_DEPENDENCIES = $(am__DEPENDENCIES_2) $(libelf) ar_SOURCES = ar.c ar_OBJECTS = ar.$(OBJEXT) -ar_DEPENDENCIES = libar.a $(libelf) $(libeu) $(am__DEPENDENCIES_1) +ar_DEPENDENCIES = libar.a $(libelf) $(libeu) elfcmp_SOURCES = elfcmp.c elfcmp_OBJECTS = elfcmp.$(OBJEXT) -elfcmp_DEPENDENCIES = $(libebl) $(libelf) $(am__DEPENDENCIES_1) +elfcmp_DEPENDENCIES = $(libebl) $(libelf) elflint_SOURCES = elflint.c elflint_OBJECTS = elflint.$(OBJEXT) -elflint_DEPENDENCIES = $(libebl) $(libelf) $(libeu) \ - $(am__DEPENDENCIES_1) +elflint_DEPENDENCIES = $(libebl) $(libelf) $(libeu) findtextrel_SOURCES = findtextrel.c findtextrel_OBJECTS = findtextrel.$(OBJEXT) -findtextrel_DEPENDENCIES = $(am__DEPENDENCIES_2) $(libelf) \ - $(am__DEPENDENCIES_1) +findtextrel_DEPENDENCIES = $(am__DEPENDENCIES_2) $(libelf) am_ld_OBJECTS = ld.$(OBJEXT) ldgeneric.$(OBJEXT) ldlex.$(OBJEXT) \ ldscript.$(OBJEXT) symbolhash.$(OBJEXT) sectionhash.$(OBJEXT) \ versionhash.$(OBJEXT) ld_OBJECTS = $(am_ld_OBJECTS) -ld_DEPENDENCIES = $(libebl) $(libelf) $(libeu) $(am__DEPENDENCIES_1) \ - $(am__append_3) +ld_DEPENDENCIES = $(libebl) $(libelf) $(libeu) $(am__append_2) ld_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(ld_LDFLAGS) $(LDFLAGS) -o \ $@ am_libld_elf_i386_so_OBJECTS = @@ -124,32 +168,34 @@ libld_elf_i386_so_LDADD = $(LDADD) nm_SOURCES = nm.c nm_OBJECTS = nm.$(OBJEXT) nm_DEPENDENCIES = $(am__DEPENDENCIES_2) $(libebl) $(libelf) $(libeu) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) objdump_SOURCES = objdump.c objdump_OBJECTS = objdump.$(OBJEXT) -objdump_DEPENDENCIES = $(libasm) $(libebl) $(libelf) $(libeu) \ - $(am__DEPENDENCIES_1) +objdump_DEPENDENCIES = $(libasm) $(libebl) $(libelf) $(libeu) ranlib_SOURCES = ranlib.c ranlib_OBJECTS = ranlib.$(OBJEXT) -ranlib_DEPENDENCIES = libar.a $(libelf) $(libeu) $(am__DEPENDENCIES_1) +ranlib_DEPENDENCIES = libar.a $(libelf) $(libeu) readelf_SOURCES = readelf.c readelf_OBJECTS = readelf.$(OBJEXT) readelf_DEPENDENCIES = $(am__DEPENDENCIES_2) $(libebl) $(libelf) \ - $(libeu) $(am__DEPENDENCIES_1) + $(libeu) size_SOURCES = size.c size_OBJECTS = size.$(OBJEXT) -size_DEPENDENCIES = $(libelf) $(libeu) $(am__DEPENDENCIES_1) +size_DEPENDENCIES = $(libelf) $(libeu) +stack_SOURCES = stack.c +stack_OBJECTS = stack.$(OBJEXT) +stack_DEPENDENCIES = $(libebl) $(libelf) $(am__DEPENDENCIES_2) \ + $(libeu) $(am__DEPENDENCIES_1) strings_SOURCES = strings.c strings_OBJECTS = strings.$(OBJEXT) -strings_DEPENDENCIES = $(libelf) $(libeu) $(am__DEPENDENCIES_1) +strings_DEPENDENCIES = $(libelf) $(libeu) strip_SOURCES = strip.c strip_OBJECTS = strip.$(OBJEXT) -strip_DEPENDENCIES = $(libebl) $(libelf) $(libeu) \ - $(am__DEPENDENCIES_1) +strip_DEPENDENCIES = $(libebl) $(libelf) $(libeu) unstrip_SOURCES = unstrip.c unstrip_OBJECTS = unstrip.$(OBJEXT) unstrip_DEPENDENCIES = $(libebl) $(libelf) $(am__DEPENDENCIES_2) \ - $(libeu) $(am__DEPENDENCIES_1) + $(libeu) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -178,43 +224,99 @@ am__uninstall_files_from_dir = { \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(bin_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = @MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ || LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) +AM_V_LEX = $(am__v_LEX_@AM_V@) +am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) +am__v_LEX_0 = @echo " LEX " $@; +am__v_LEX_1 = YLWRAP = $(top_srcdir)/config/ylwrap @MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ || +am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ + -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) +AM_V_YACC = $(am__v_YACC_@AM_V@) +am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) +am__v_YACC_0 = @echo " YACC " $@; +am__v_YACC_1 = SOURCES = $(libar_a_SOURCES) $(libdummy_a_SOURCES) \ $(libld_elf_a_SOURCES) $(libld_elf_i386_pic_a_SOURCES) \ addr2line.c ar.c elfcmp.c elflint.c findtextrel.c \ $(ld_SOURCES) $(libld_elf_i386_so_SOURCES) nm.c objdump.c \ - ranlib.c readelf.c size.c strings.c strip.c unstrip.c + ranlib.c readelf.c size.c stack.c strings.c strip.c unstrip.c DIST_SOURCES = $(libar_a_SOURCES) $(am__libdummy_a_SOURCES_DIST) \ $(am__libld_elf_a_SOURCES_DIST) \ $(libld_elf_i386_pic_a_SOURCES) addr2line.c ar.c elfcmp.c \ elflint.c findtextrel.c $(ld_SOURCES) \ $(libld_elf_i386_so_SOURCES) nm.c objdump.c ranlib.c readelf.c \ - size.c strings.c strip.c unstrip.c + size.c stack.c strings.c strip.c unstrip.c +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -225,10 +327,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -249,6 +354,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -259,6 +365,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -273,6 +380,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -322,32 +430,27 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. \ -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ - -I$(srcdir)/../libdw -I$(srcdir)/../libdwfl \ - -I$(srcdir)/../libasm -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ - $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) - + -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \ + -I$(srcdir)/../libdwfl -I$(srcdir)/../libasm +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ + $(if $($(*F)_no_Werror),,-Werror) \ + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ + $($(*F)_CFLAGS) + +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda make-debug-archive none_ld.os \ $(ld_modules:.c=.os) *.gconv -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw -no_mudflap.os = -fmudflap AM_YFLAGS = -pld AM_LFLAGS = -Pld -olex.yy.c native_ld = @native_ld@ ld_dsos = libld_elf_i386_pic.a @NATIVE_LD_FALSE@noinst_LIBRARIES = libld_elf.a libar.a $(ld_dsos) \ -@NATIVE_LD_FALSE@ $(am__append_2) -@NATIVE_LD_TRUE@noinst_LIBRARIES = libld_elf.a libar.a $(am__append_2) +@NATIVE_LD_FALSE@ $(am__append_1) +@NATIVE_LD_TRUE@noinst_LIBRARIES = libld_elf.a libar.a $(am__append_1) @NATIVE_LD_TRUE@native_ld_cflags = -DBASE_ELF_NAME=elf_$(base_cpu) @NEVER_TRUE@libdummy_a_SOURCES = i386_ld.c ld_SOURCES = ld.c ldgeneric.c ldlex.l ldscript.y symbolhash.c sectionhash.c \ @@ -370,30 +473,27 @@ bin_SCRIPTS = make-debug-archive libebl = ../libebl/libebl.a libeu = ../lib/libeu.a @DEMANGLE_TRUE@demanglelib = -lstdc++ -nm_no_Wformat = yes -size_no_Wformat = yes -strings_no_Wformat = yes -addr2line_no_Wformat = yes + # XXX While the file is not finished, don't warn about this ldgeneric_no_Wunused = yes -readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ +readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) -ldl +nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) -ldl \ $(demanglelib) -size_LDADD = $(libelf) $(libeu) $(libmudflap) -strip_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -ld_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl \ - $(am__append_3) +size_LDADD = $(libelf) $(libeu) +strip_LDADD = $(libebl) $(libelf) $(libeu) -ldl +ld_LDADD = $(libebl) $(libelf) $(libeu) -ldl $(am__append_2) ld_LDFLAGS = -rdynamic -elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap) -addr2line_LDADD = $(libdw) $(libelf) $(libmudflap) -elfcmp_LDADD = $(libebl) $(libelf) $(libmudflap) -ldl -objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl -ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) -strings_LDADD = $(libelf) $(libeu) $(libmudflap) -ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) -unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) -ldl +elflint_LDADD = $(libebl) $(libelf) $(libeu) -ldl +findtextrel_LDADD = $(libdw) $(libelf) +addr2line_LDADD = $(libdw) $(libelf) +elfcmp_LDADD = $(libebl) $(libelf) -ldl +objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) -ldl +ranlib_LDADD = libar.a $(libelf) $(libeu) +strings_LDADD = $(libelf) $(libeu) +ar_LDADD = libar.a $(libelf) $(libeu) +unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) -ldl +stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) -ldl $(demanglelib) ldlex_no_Werror = yes # Machine-specific linker code. @@ -440,32 +540,40 @@ $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + libar.a: $(libar_a_OBJECTS) $(libar_a_DEPENDENCIES) $(EXTRA_libar_a_DEPENDENCIES) - -rm -f libar.a - $(libar_a_AR) libar.a $(libar_a_OBJECTS) $(libar_a_LIBADD) - $(RANLIB) libar.a + $(AM_V_at)-rm -f libar.a + $(AM_V_AR)$(libar_a_AR) libar.a $(libar_a_OBJECTS) $(libar_a_LIBADD) + $(AM_V_at)$(RANLIB) libar.a + libdummy.a: $(libdummy_a_OBJECTS) $(libdummy_a_DEPENDENCIES) $(EXTRA_libdummy_a_DEPENDENCIES) - -rm -f libdummy.a - $(libdummy_a_AR) libdummy.a $(libdummy_a_OBJECTS) $(libdummy_a_LIBADD) - $(RANLIB) libdummy.a + $(AM_V_at)-rm -f libdummy.a + $(AM_V_AR)$(libdummy_a_AR) libdummy.a $(libdummy_a_OBJECTS) $(libdummy_a_LIBADD) + $(AM_V_at)$(RANLIB) libdummy.a + libld_elf.a: $(libld_elf_a_OBJECTS) $(libld_elf_a_DEPENDENCIES) $(EXTRA_libld_elf_a_DEPENDENCIES) - -rm -f libld_elf.a - $(libld_elf_a_AR) libld_elf.a $(libld_elf_a_OBJECTS) $(libld_elf_a_LIBADD) - $(RANLIB) libld_elf.a + $(AM_V_at)-rm -f libld_elf.a + $(AM_V_AR)$(libld_elf_a_AR) libld_elf.a $(libld_elf_a_OBJECTS) $(libld_elf_a_LIBADD) + $(AM_V_at)$(RANLIB) libld_elf.a + libld_elf_i386_pic.a: $(libld_elf_i386_pic_a_OBJECTS) $(libld_elf_i386_pic_a_DEPENDENCIES) $(EXTRA_libld_elf_i386_pic_a_DEPENDENCIES) - -rm -f libld_elf_i386_pic.a - $(libld_elf_i386_pic_a_AR) libld_elf_i386_pic.a $(libld_elf_i386_pic_a_OBJECTS) $(libld_elf_i386_pic_a_LIBADD) - $(RANLIB) libld_elf_i386_pic.a + $(AM_V_at)-rm -f libld_elf_i386_pic.a + $(AM_V_AR)$(libld_elf_i386_pic_a_AR) libld_elf_i386_pic.a $(libld_elf_i386_pic_a_OBJECTS) $(libld_elf_i386_pic_a_LIBADD) + $(AM_V_at)$(RANLIB) libld_elf_i386_pic.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p; \ - then echo "$$p"; echo "$$p"; else :; fi; \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ @@ -486,7 +594,8 @@ uninstall-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ + -e 's/$$/$(EXEEXT)/' \ + `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files @@ -496,55 +605,77 @@ clean-binPROGRAMS: clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) + addr2line$(EXEEXT): $(addr2line_OBJECTS) $(addr2line_DEPENDENCIES) $(EXTRA_addr2line_DEPENDENCIES) @rm -f addr2line$(EXEEXT) - $(LINK) $(addr2line_OBJECTS) $(addr2line_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(addr2line_OBJECTS) $(addr2line_LDADD) $(LIBS) + ar$(EXEEXT): $(ar_OBJECTS) $(ar_DEPENDENCIES) $(EXTRA_ar_DEPENDENCIES) @rm -f ar$(EXEEXT) - $(LINK) $(ar_OBJECTS) $(ar_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(ar_OBJECTS) $(ar_LDADD) $(LIBS) + elfcmp$(EXEEXT): $(elfcmp_OBJECTS) $(elfcmp_DEPENDENCIES) $(EXTRA_elfcmp_DEPENDENCIES) @rm -f elfcmp$(EXEEXT) - $(LINK) $(elfcmp_OBJECTS) $(elfcmp_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(elfcmp_OBJECTS) $(elfcmp_LDADD) $(LIBS) + elflint$(EXEEXT): $(elflint_OBJECTS) $(elflint_DEPENDENCIES) $(EXTRA_elflint_DEPENDENCIES) @rm -f elflint$(EXEEXT) - $(LINK) $(elflint_OBJECTS) $(elflint_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(elflint_OBJECTS) $(elflint_LDADD) $(LIBS) + findtextrel$(EXEEXT): $(findtextrel_OBJECTS) $(findtextrel_DEPENDENCIES) $(EXTRA_findtextrel_DEPENDENCIES) @rm -f findtextrel$(EXEEXT) - $(LINK) $(findtextrel_OBJECTS) $(findtextrel_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(findtextrel_OBJECTS) $(findtextrel_LDADD) $(LIBS) + ld$(EXEEXT): $(ld_OBJECTS) $(ld_DEPENDENCIES) $(EXTRA_ld_DEPENDENCIES) @rm -f ld$(EXEEXT) - $(ld_LINK) $(ld_OBJECTS) $(ld_LDADD) $(LIBS) + $(AM_V_CCLD)$(ld_LINK) $(ld_OBJECTS) $(ld_LDADD) $(LIBS) + @NATIVE_LD_TRUE@libld_elf_i386.so$(EXEEXT): $(libld_elf_i386_so_OBJECTS) $(libld_elf_i386_so_DEPENDENCIES) $(EXTRA_libld_elf_i386_so_DEPENDENCIES) @NATIVE_LD_TRUE@ @rm -f libld_elf_i386.so$(EXEEXT) -@NATIVE_LD_TRUE@ $(LINK) $(libld_elf_i386_so_OBJECTS) $(libld_elf_i386_so_LDADD) $(LIBS) +@NATIVE_LD_TRUE@ $(AM_V_CCLD)$(LINK) $(libld_elf_i386_so_OBJECTS) $(libld_elf_i386_so_LDADD) $(LIBS) + nm$(EXEEXT): $(nm_OBJECTS) $(nm_DEPENDENCIES) $(EXTRA_nm_DEPENDENCIES) @rm -f nm$(EXEEXT) - $(LINK) $(nm_OBJECTS) $(nm_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(nm_OBJECTS) $(nm_LDADD) $(LIBS) + objdump$(EXEEXT): $(objdump_OBJECTS) $(objdump_DEPENDENCIES) $(EXTRA_objdump_DEPENDENCIES) @rm -f objdump$(EXEEXT) - $(LINK) $(objdump_OBJECTS) $(objdump_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(objdump_OBJECTS) $(objdump_LDADD) $(LIBS) + ranlib$(EXEEXT): $(ranlib_OBJECTS) $(ranlib_DEPENDENCIES) $(EXTRA_ranlib_DEPENDENCIES) @rm -f ranlib$(EXEEXT) - $(LINK) $(ranlib_OBJECTS) $(ranlib_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(ranlib_OBJECTS) $(ranlib_LDADD) $(LIBS) + readelf$(EXEEXT): $(readelf_OBJECTS) $(readelf_DEPENDENCIES) $(EXTRA_readelf_DEPENDENCIES) @rm -f readelf$(EXEEXT) - $(LINK) $(readelf_OBJECTS) $(readelf_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(readelf_OBJECTS) $(readelf_LDADD) $(LIBS) + size$(EXEEXT): $(size_OBJECTS) $(size_DEPENDENCIES) $(EXTRA_size_DEPENDENCIES) @rm -f size$(EXEEXT) - $(LINK) $(size_OBJECTS) $(size_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(size_OBJECTS) $(size_LDADD) $(LIBS) + +stack$(EXEEXT): $(stack_OBJECTS) $(stack_DEPENDENCIES) $(EXTRA_stack_DEPENDENCIES) + @rm -f stack$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(stack_OBJECTS) $(stack_LDADD) $(LIBS) + strings$(EXEEXT): $(strings_OBJECTS) $(strings_DEPENDENCIES) $(EXTRA_strings_DEPENDENCIES) @rm -f strings$(EXEEXT) - $(LINK) $(strings_OBJECTS) $(strings_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(strings_OBJECTS) $(strings_LDADD) $(LIBS) + strip$(EXEEXT): $(strip_OBJECTS) $(strip_DEPENDENCIES) $(EXTRA_strip_DEPENDENCIES) @rm -f strip$(EXEEXT) - $(LINK) $(strip_OBJECTS) $(strip_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(strip_OBJECTS) $(strip_LDADD) $(LIBS) + unstrip$(EXEEXT): $(unstrip_OBJECTS) $(unstrip_DEPENDENCIES) $(EXTRA_unstrip_DEPENDENCIES) @rm -f unstrip$(EXEEXT) - $(LINK) $(unstrip_OBJECTS) $(unstrip_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(unstrip_OBJECTS) $(unstrip_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ @@ -615,6 +746,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readelf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sectionhash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/size.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symbolhash.Po@am__quote@ @@ -622,45 +754,34 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/versionhash.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .l.c: - $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) + $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) .y.c: - $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE) - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) + $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -672,15 +793,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -689,6 +806,21 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -836,11 +968,12 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ - clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ - distclean distclean-compile distclean-generic distclean-tags \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-binPROGRAMS install-binSCRIPTS install-data \ +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ + clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-binSCRIPTS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ @@ -848,7 +981,7 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS installcheck-am installcheck-binPROGRAMS \ installcheck-binSCRIPTS installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS @@ -893,7 +1026,7 @@ installcheck-binPROGRAMS: $(bin_PROGRAMS) 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 > $@.new diff --git a/src/addr2line.c b/src/addr2line.c index 7d241f3..50fc2b3 100644 --- a/src/addr2line.c +++ b/src/addr2line.c @@ -1,5 +1,5 @@ /* Locate source files and line information for given addresses - Copyright (C) 2005-2010, 2012 Red Hat, Inc. + Copyright (C) 2005-2010, 2012, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2005. @@ -61,9 +61,13 @@ static const struct argp_option options[] = N_("Show absolute file names using compilation directory"), 0 }, { "functions", 'f', NULL, 0, N_("Also show function names"), 0 }, { "symbols", 'S', NULL, 0, N_("Also show symbol or section names"), 0 }, + { "symbols-sections", 'x', NULL, 0, N_("Also show symbol and the section names"), 0 }, { "flags", 'F', NULL, 0, N_("Also show line table flags"), 0 }, { "section", 'j', "NAME", 0, N_("Treat addresses as offsets relative to NAME section."), 0 }, + { "inlines", 'i', NULL, 0, + N_("Show all source locations that caused inline expansion of subroutines at the address."), + 0 }, { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 }, /* Unsupported options. */ @@ -111,9 +115,15 @@ static bool show_functions; /* True if ELF symbol or section info should be shown. */ static bool show_symbols; +/* True if section associated with a symbol address should be shown. */ +static bool show_symbol_sections; + /* If non-null, take address parameters as relative to named section. */ static const char *just_section; +/* True if all inlined subroutines of the current address should be shown. */ +static bool show_inlines; + int main (int argc, char *argv[]) @@ -152,11 +162,15 @@ main (int argc, char *argv[]) char *buf = NULL; size_t len = 0; + ssize_t chars; while (!feof_unlocked (stdin)) { - if (getline (&buf, &len, stdin) < 0) + if ((chars = getline (&buf, &len, stdin)) < 0) break; + if (buf[chars - 1] == '\n') + buf[chars - 1] = '\0'; + result = handle_address (buf, dwfl); } @@ -169,6 +183,7 @@ main (int argc, char *argv[]) while (++remaining < argc); } + dwfl_end (dwfl); return result; } @@ -223,10 +238,19 @@ parse_opt (int key, char *arg, struct argp_state *state) show_symbols = true; break; + case 'x': + show_symbols = true; + show_symbol_sections = true; + break; + case 'j': just_section = arg; break; + case 'i': + show_inlines = true; + break; + default: return ARGP_ERR_UNKNOWN; } @@ -327,8 +351,9 @@ static void print_addrsym (Dwfl_Module *mod, GElf_Addr addr) { GElf_Sym s; - GElf_Word shndx; - const char *name = dwfl_module_addrsym (mod, addr, &s, &shndx); + GElf_Off off; + const char *name = dwfl_module_addrinfo (mod, addr, &off, &s, + NULL, NULL, NULL); if (name == NULL) { /* No symbol name. Get a section name instead. */ @@ -340,10 +365,51 @@ print_addrsym (Dwfl_Module *mod, GElf_Addr addr) else printf ("(%s)+%#" PRIx64 "\n", name, addr); } - else if (addr == s.st_value) - puts (name); else - printf ("%s+%#" PRIx64 "\n", name, addr - s.st_value); + { + if (off == 0) + printf ("%s", name); + else + printf ("%s+%#" PRIx64 "", name, off); + + // Also show section name for address. + if (show_symbol_sections) + { + Dwarf_Addr ebias; + Elf_Scn *scn = dwfl_module_address_section (mod, &addr, &ebias); + if (scn != NULL) + { + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr != NULL) + { + Elf *elf = dwfl_module_getelf (mod, &ebias); + GElf_Ehdr ehdr; + if (gelf_getehdr (elf, &ehdr) != NULL) + printf (" (%s)", elf_strptr (elf, ehdr.e_shstrndx, + shdr->sh_name)); + } + } + } + puts (""); + } +} + +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 @@ -369,11 +435,14 @@ find_symbol (Dwfl_Module *mod, { const char *looking_for = ((void **) arg)[0]; GElf_Sym *symbol = ((void **) arg)[1]; + GElf_Addr *value = ((void **) arg)[2]; int n = dwfl_module_getsymtab (mod); for (int i = 1; i < n; ++i) { - const char *symbol_name = dwfl_module_getsym (mod, i, symbol, NULL); + const char *symbol_name = dwfl_module_getsym_info (mod, i, symbol, + value, NULL, NULL, + NULL); if (symbol_name == NULL || symbol_name[0] == '\0') continue; switch (GELF_ST_TYPE (symbol->st_info)) @@ -437,6 +506,30 @@ adjust_to_section (const char *name, uintmax_t *addr, Dwfl *dwfl) return false; } +static void +print_src (const char *src, int lineno, int linecol, Dwarf_Die *cu) +{ + const char *comp_dir = ""; + const char *comp_dir_sep = ""; + + if (only_basenames) + src = basename (src); + else if (use_comp_dir && src[0] != '/') + { + Dwarf_Attribute attr; + comp_dir = dwarf_formstring (dwarf_attr (cu, DW_AT_comp_dir, &attr)); + if (comp_dir != NULL) + comp_dir_sep = "/"; + } + + if (linecol != 0) + printf ("%s%s%s:%d:%d", + comp_dir, comp_dir_sep, src, lineno, linecol); + else + printf ("%s%s%s:%d", + comp_dir, comp_dir_sep, src, lineno); +} + static int handle_address (const char *string, Dwfl *dwfl) { @@ -463,7 +556,8 @@ handle_address (const char *string, Dwfl *dwfl) /* It was symbol[+offset]. */ GElf_Sym sym; - void *arg[2] = { name, &sym }; + GElf_Addr value = 0; + void *arg[3] = { name, &sym, &value }; (void) dwfl_getmodules (dwfl, &find_symbol, arg, 0); if (arg[0] != NULL) error (0, 0, gettext ("cannot find symbol '%s'"), name); @@ -474,7 +568,7 @@ handle_address (const char *string, Dwfl *dwfl) gettext ("offset %#" PRIxMAX " lies outside" " contents of '%s'"), addr, name); - addr += sym.st_value; + addr += value; parsed = true; } break; @@ -505,28 +599,11 @@ handle_address (const char *string, Dwfl *dwfl) const char *src; int lineno, linecol; + if (line != NULL && (src = dwfl_lineinfo (line, &addr, &lineno, &linecol, NULL, NULL)) != NULL) { - const char *comp_dir = ""; - const char *comp_dir_sep = ""; - - if (only_basenames) - src = basename (src); - else if (use_comp_dir && src[0] != '/') - { - comp_dir = dwfl_line_comp_dir (line); - if (comp_dir != NULL) - comp_dir_sep = "/"; - } - - if (linecol != 0) - printf ("%s%s%s:%d:%d", - comp_dir, comp_dir_sep, src, lineno, linecol); - else - printf ("%s%s%s:%d", - comp_dir, comp_dir_sep, src, lineno); - + print_src (src, lineno, linecol, dwfl_linecu (line)); if (show_flags) { Dwarf_Addr bias; @@ -560,6 +637,72 @@ handle_address (const char *string, Dwfl *dwfl) else puts ("??:0"); + if (show_inlines) + { + Dwarf_Addr bias = 0; + Dwarf_Die *cudie = dwfl_module_addrdie (mod, addr, &bias); + + Dwarf_Die *scopes = NULL; + int nscopes = dwarf_getscopes (cudie, addr - bias, &scopes); + if (nscopes < 0) + return 1; + + if (nscopes > 0) + { + Dwarf_Die subroutine; + Dwarf_Off dieoff = dwarf_dieoffset (&scopes[0]); + dwarf_offdie (dwfl_module_getdwarf (mod, &bias), + dieoff, &subroutine); + free (scopes); + + nscopes = dwarf_getscopes_die (&subroutine, &scopes); + if (nscopes > 1) + { + Dwarf_Die cu; + Dwarf_Files *files; + if (dwarf_diecu (&scopes[0], &cu, NULL, NULL) != NULL + && dwarf_getsrcfiles (cudie, &files, NULL) == 0) + { + for (int i = 0; i < nscopes - 1; i++) + { + Dwarf_Word val; + Dwarf_Attribute attr; + Dwarf_Die *die = &scopes[i]; + if (dwarf_tag (die) != DW_TAG_inlined_subroutine) + continue; + + if (show_functions) + print_diesym (&scopes[i + 1]); + + src = NULL; + lineno = 0; + linecol = 0; + if (dwarf_formudata (dwarf_attr (die, DW_AT_call_file, + &attr), &val) == 0) + src = dwarf_filesrc (files, val, NULL, NULL); + + if (dwarf_formudata (dwarf_attr (die, DW_AT_call_line, + &attr), &val) == 0) + lineno = val; + + if (dwarf_formudata (dwarf_attr (die, DW_AT_call_column, + &attr), &val) == 0) + linecol = val; + + if (src != NULL) + { + print_src (src, lineno, linecol, &cu); + putchar ('\n'); + } + else + puts ("??:0"); + } + } + } + } + free (scopes); + } + return 0; } diff --git a/src/ar.c b/src/ar.c index 03da1b7..f51f0ef 100644 --- a/src/ar.c +++ b/src/ar.c @@ -202,7 +202,7 @@ MEMBER parameter required for 'a', 'b', and 'i' modifiers")); if (instance_specifed) { /* Only valid for certain operations. */ - if (operation == oper_extract && operation == oper_delete) + if (operation != oper_extract && operation != oper_delete) error (1, 0, gettext ("\ 'N' is only meaningful with the 'x' and 'd' options")); @@ -919,7 +919,7 @@ do_oper_delete (const char *arfname, char **argv, int argc, long int instance) { bool *found = alloca (sizeof (bool) * argc); - memset (found, '\0', sizeof (found)); + memset (found, '\0', sizeof (bool) * argc); /* List of the files we keep. */ struct armem *to_copy = NULL; diff --git a/src/arlib.c b/src/arlib.c index 62c517c..43a9145 100644 --- a/src/arlib.c +++ b/src/arlib.c @@ -59,11 +59,11 @@ arlib_init (void) _FORTIFY_SOURCE=2 would not let us play these games. Therefore we play it safe. */ char tmpbuf[sizeof (ar_hdr.ar_date) + 1]; - memcpy (ar_hdr.ar_date, tmpbuf, - snprintf (tmpbuf, sizeof (tmpbuf), "%-*lld", + int s = snprintf (tmpbuf, sizeof (tmpbuf), "%-*lld", (int) sizeof (ar_hdr.ar_date), (arlib_deterministic_output ? 0 - : (long long int) time (NULL)))); + : (long long int) time (NULL))); + memcpy (ar_hdr.ar_date, tmpbuf, s); assert ((sizeof (struct ar_hdr) % sizeof (uint32_t)) == 0); /* Note the string for the ar_uid and ar_gid cases is longer than @@ -121,10 +121,10 @@ arlib_finalize (void) symtab.longnames = obstack_finish (&symtab.longnamesob); - memcpy (&((struct ar_hdr *) symtab.longnames)->ar_size, tmpbuf, - snprintf (tmpbuf, sizeof (tmpbuf), "%-*zu", + int s = snprintf (tmpbuf, sizeof (tmpbuf), "%-*zu", (int) sizeof (((struct ar_hdr *) NULL)->ar_size), - symtab.longnameslen - sizeof (struct ar_hdr))); + symtab.longnameslen - sizeof (struct ar_hdr)); + memcpy (&((struct ar_hdr *) symtab.longnames)->ar_size, tmpbuf, s); } symtab.symsofflen = obstack_object_size (&symtab.symsoffob); diff --git a/src/elflint.c b/src/elflint.c index 4084987..d6a4774 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -1,5 +1,5 @@ /* Pedantic checking of ELF files compliance with gABI/psABI spec. - Copyright (C) 2001-2012 Red Hat, Inc. + Copyright (C) 2001-2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2001. @@ -123,6 +123,10 @@ static uint32_t shstrndx; /* Array to count references in section groups. */ static int *scnref; +/* Numbers of sections and program headers. */ +static unsigned int shnum; +static unsigned int phnum; + int main (int argc, char *argv[]) @@ -311,10 +315,19 @@ section_name (Ebl *ebl, int idx) { GElf_Shdr shdr_mem; GElf_Shdr *shdr; + const char *ret; + + if ((unsigned int) idx > shnum) + return ""; shdr = gelf_getshdr (elf_getscn (ebl->elf, idx), &shdr_mem); + if (shdr == NULL) + return ""; - return elf_strptr (ebl->elf, shstrndx, shdr->sh_name); + ret = elf_strptr (ebl->elf, shstrndx, shdr->sh_name); + if (ret == NULL) + return ""; + return ret; } @@ -331,17 +344,12 @@ static const int valid_e_machine[] = EM_CRIS, EM_JAVELIN, EM_FIREPATH, EM_ZSP, EM_MMIX, EM_HUANY, EM_PRISM, EM_AVR, EM_FR30, EM_D10V, EM_D30V, EM_V850, EM_M32R, EM_MN10300, EM_MN10200, EM_PJ, EM_OPENRISC, EM_ARC_A5, EM_XTENSA, EM_ALPHA, - EM_TILEGX, EM_TILEPRO + EM_TILEGX, EM_TILEPRO, EM_AARCH64 }; #define nvalid_e_machine \ (sizeof (valid_e_machine) / sizeof (valid_e_machine[0])) -/* Numbers of sections and program headers. */ -static unsigned int shnum; -static unsigned int phnum; - - static void check_elf_header (Ebl *ebl, GElf_Ehdr *ehdr, size_t size) { @@ -625,7 +633,8 @@ section [%2d] '%s': symbol table cannot have more than one extended index sectio } } - if (shdr->sh_entsize != gelf_fsize (ebl->elf, ELF_T_SYM, 1, EV_CURRENT)) + size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_SYM, 1, EV_CURRENT); + if (shdr->sh_entsize != sh_entsize) ERROR (gettext ("\ section [%2u] '%s': entry size is does not match ElfXX_Sym\n"), idx, section_name (ebl, idx)); @@ -663,7 +672,7 @@ section [%2d] '%s': XINDEX for zeroth entry not zero\n"), xndxscnidx, section_name (ebl, xndxscnidx)); } - for (size_t cnt = 1; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) + for (size_t cnt = 1; cnt < shdr->sh_size / sh_entsize; ++cnt) { sym = gelf_getsymshndx (data, xndxdata, cnt, &sym_mem, &xndx); if (sym == NULL) @@ -683,7 +692,8 @@ section [%2d] '%s': symbol %zu: invalid name value\n"), else { name = elf_strptr (ebl->elf, shdr->sh_link, sym->st_name); - assert (name != NULL); + assert (name != NULL + || strshdr->sh_type != SHT_STRTAB); } if (sym->st_shndx == SHN_XINDEX) @@ -758,29 +768,44 @@ 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 - behind. These are symbols in .symtab. */ + behind. These are symbols in .symtab or .dynsym + and for the named symbols have zero size. See + sourceware PR13621. */ if (!gnuld - || strcmp (section_name (ebl, idx), ".symtab") + || (strcmp (section_name (ebl, idx), ".symtab") + && strcmp (section_name (ebl, idx), + ".dynsym")) + || sym->st_size != 0 || (strcmp (name, "__preinit_array_start") != 0 && strcmp (name, "__preinit_array_end") != 0 && strcmp (name, "__init_array_start") != 0 && strcmp (name, "__init_array_end") != 0 && strcmp (name, "__fini_array_start") != 0 - && strcmp (name, "__fini_array_end") != 0)) + && strcmp (name, "__fini_array_end") != 0 + && strcmp (name, "__bss_start") != 0 + && strcmp (name, "__bss_start__") != 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"), @@ -800,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"), @@ -834,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 ("\ @@ -1032,9 +1057,11 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *ehdr, int idx, const GElf_Shdr *shdr, { GElf_Shdr rcshdr_mem; const GElf_Shdr *rcshdr = gelf_getshdr (scn, &rcshdr_mem); - assert (rcshdr != NULL); - if (rcshdr->sh_type == SHT_DYNAMIC) + if (rcshdr == NULL) + break; + + if (rcshdr->sh_type == SHT_DYNAMIC && rcshdr->sh_entsize) { /* Found the dynamic section. Look through it. */ Elf_Data *d = elf_getdata (scn, NULL); @@ -1044,7 +1071,9 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *ehdr, int idx, const GElf_Shdr *shdr, { GElf_Dyn dyn_mem; GElf_Dyn *dyn = gelf_getdyn (d, cnt, &dyn_mem); - assert (dyn != NULL); + + if (dyn == NULL) + break; if (dyn->d_tag == DT_RELCOUNT) { @@ -1058,7 +1087,9 @@ section [%2d] '%s': DT_RELCOUNT used for this RELA section\n"), /* Does the number specified number of relative relocations exceed the total number of relocations? */ - if (dyn->d_un.d_val > shdr->sh_size / shdr->sh_entsize) + if (shdr->sh_entsize != 0 + && dyn->d_un.d_val > (shdr->sh_size + / shdr->sh_entsize)) ERROR (gettext ("\ section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"), idx, section_name (ebl, idx), @@ -1192,8 +1223,7 @@ check_reloc_shdr (Ebl *ebl, const GElf_Ehdr *ehdr, const GElf_Shdr *shdr, destshdr_memp); if (*destshdrp != NULL) { - if((*destshdrp)->sh_type != SHT_PROGBITS - && (*destshdrp)->sh_type != SHT_NOBITS) + if(! ebl_check_reloc_target_type (ebl, (*destshdrp)->sh_type)) { reldyn = is_rel_dyn (ebl, ehdr, idx, shdr, true); if (!reldyn) @@ -1218,7 +1248,8 @@ section [%2d] '%s': no relocations for merge-able sections possible\n"), } } - if (shdr->sh_entsize != gelf_fsize (ebl->elf, reltype, 1, EV_CURRENT)) + size_t sh_entsize = gelf_fsize (ebl->elf, reltype, 1, EV_CURRENT); + if (shdr->sh_entsize != sh_entsize) ERROR (gettext (reltype == ELF_T_RELA ? "\ section [%2d] '%s': section entry size does not match ElfXX_Rela\n" : "\ section [%2d] '%s': section entry size does not match ElfXX_Rel\n"), @@ -1441,7 +1472,8 @@ check_rela (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) Elf_Data *symdata = elf_getdata (symscn, NULL); enum load_state state = state_undecided; - for (size_t cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) + size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_RELA, 1, EV_CURRENT); + for (size_t cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) { GElf_Rela rela_mem; GElf_Rela *rela = gelf_getrela (data, cnt, &rela_mem); @@ -1491,7 +1523,8 @@ check_rel (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) Elf_Data *symdata = elf_getdata (symscn, NULL); enum load_state state = state_undecided; - for (size_t cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) + size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_REL, 1, EV_CURRENT); + for (size_t cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) { GElf_Rel rel_mem; GElf_Rel *rel = gelf_getrel (data, cnt, &rel_mem); @@ -1590,7 +1623,8 @@ section [%2d] '%s': referenced as string table for section [%2d] '%s' but type i shdr->sh_link, section_name (ebl, shdr->sh_link), idx, section_name (ebl, idx)); - if (shdr->sh_entsize != gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT)) + size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT); + if (shdr->sh_entsize != sh_entsize) ERROR (gettext ("\ section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"), idx, section_name (ebl, idx)); @@ -1600,7 +1634,7 @@ section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"), idx, section_name (ebl, idx)); bool non_null_warned = false; - for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) + for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) { GElf_Dyn dyn_mem; GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dyn_mem); @@ -1872,6 +1906,8 @@ section [%2d] '%s': entry size does not match Elf32_Word\n"), idx, section_name (ebl, idx)); if (symshdr != NULL + && shdr->sh_entsize + && symshdr->sh_entsize && (shdr->sh_size / shdr->sh_entsize < symshdr->sh_size / symshdr->sh_entsize)) ERROR (gettext ("\ @@ -1898,6 +1934,12 @@ section [%2d] '%s': extended section index in section [%2zu] '%s' refers to same } Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL); + if (data == NULL) + { + ERROR (gettext ("section [%2d] '%s': cannot get section data\n"), + idx, section_name (ebl, idx)); + return; + } if (*((Elf32_Word *) data->d_buf) != 0) ERROR (gettext ("symbol 0 should have zero extended section index\n")); @@ -1940,7 +1982,7 @@ section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"), size_t maxidx = nchain; - if (symshdr != NULL) + if (symshdr != NULL && symshdr->sh_entsize != 0) { size_t symsize = symshdr->sh_size / symshdr->sh_entsize; @@ -1951,18 +1993,28 @@ section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"), maxidx = symsize; } + Elf32_Word *buf = (Elf32_Word *) data->d_buf; + Elf32_Word *end = (Elf32_Word *) ((char *) data->d_buf + shdr->sh_size); size_t cnt; for (cnt = 2; cnt < 2 + nbucket; ++cnt) - if (((Elf32_Word *) data->d_buf)[cnt] >= maxidx) + { + if (buf + cnt >= end) + break; + else if (buf[cnt] >= maxidx) ERROR (gettext ("\ section [%2d] '%s': hash bucket reference %zu out of bounds\n"), idx, section_name (ebl, idx), cnt - 2); + } for (; cnt < 2 + nbucket + nchain; ++cnt) - if (((Elf32_Word *) data->d_buf)[cnt] >= maxidx) + { + if (buf + cnt >= end) + break; + else if (buf[cnt] >= maxidx) ERROR (gettext ("\ section [%2d] '%s': hash chain reference %zu out of bounds\n"), idx, section_name (ebl, idx), cnt - 2 - nbucket); + } } @@ -1992,18 +2044,28 @@ section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n"), maxidx = symsize; } + Elf64_Xword *buf = (Elf64_Xword *) data->d_buf; + Elf64_Xword *end = (Elf64_Xword *) ((char *) data->d_buf + shdr->sh_size); size_t cnt; for (cnt = 2; cnt < 2 + nbucket; ++cnt) - if (((Elf64_Xword *) data->d_buf)[cnt] >= maxidx) + { + if (buf + cnt >= end) + break; + else if (buf[cnt] >= maxidx) ERROR (gettext ("\ section [%2d] '%s': hash bucket reference %zu out of bounds\n"), idx, section_name (ebl, idx), cnt - 2); + } for (; cnt < 2 + nbucket + nchain; ++cnt) - if (((Elf64_Xword *) data->d_buf)[cnt] >= maxidx) + { + if (buf + cnt >= end) + break; + else if (buf[cnt] >= maxidx) ERROR (gettext ("\ section [%2d] '%s': hash chain reference %" PRIu64 " out of bounds\n"), - idx, section_name (ebl, idx), (uint64_t) (cnt - 2 - nbucket)); + idx, section_name (ebl, idx), (uint64_t) cnt - 2 - nbucket); + } } @@ -2028,7 +2090,7 @@ section [%2d] '%s': bitmask size not power of 2: %u\n"), if (shdr->sh_size < (4 + bitmask_words + nbuckets) * sizeof (Elf32_Word)) { ERROR (gettext ("\ -section [%2d] '%s': hash table section is too small (is %ld, expected at least%ld)\n"), +section [%2d] '%s': hash table section is too small (is %ld, expected at least %ld)\n"), idx, section_name (ebl, idx), (long int) shdr->sh_size, (long int) ((4 + bitmask_words + nbuckets) * sizeof (Elf32_Word))); return; @@ -2700,8 +2762,9 @@ section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no dynamic s /* The number of elements in the version symbol table must be the same as the number of symbols. */ - if (shdr->sh_size / shdr->sh_entsize - != symshdr->sh_size / symshdr->sh_entsize) + if (shdr->sh_entsize && symshdr->sh_entsize + && (shdr->sh_size / shdr->sh_entsize + != symshdr->sh_size / symshdr->sh_entsize)) ERROR (gettext ("\ section [%2d] '%s' has different number of entries than symbol table [%2d] '%s'\n"), idx, section_name (ebl, idx), diff --git a/src/findtextrel.c b/src/findtextrel.c index 39f7c92..9fd8163 100644 --- a/src/findtextrel.c +++ b/src/findtextrel.c @@ -311,7 +311,7 @@ process_file (const char *fname, bool more_than_one) if (!have_textrel) { error (0, 0, gettext ("no text relocations reported in '%s'"), fname); - return 1; + goto err_elf_close; } int fd2 = -1; diff --git a/src/ldlex.c b/src/ldlex.c index 5a1d321..81493c2 100644 --- a/src/ldlex.c +++ b/src/ldlex.c @@ -28,7 +28,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 35 +#define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -73,7 +73,6 @@ typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN @@ -104,6 +103,8 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#endif /* ! C99 */ + #endif /* ! FLEXINT_H */ #ifdef __cplusplus @@ -172,7 +173,12 @@ typedef unsigned int flex_uint32_t; typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif -extern int ldleng; +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t ldleng; extern FILE *ldin, *ldout; @@ -211,11 +217,6 @@ extern FILE *ldin, *ldout; #define unput(c) yyunput( c, (yytext_ptr) ) -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state @@ -233,7 +234,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -303,8 +304,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* yy_hold_char holds the character lost when ldtext is formed. */ static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int ldleng; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t ldleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; @@ -332,7 +333,7 @@ static void ld_init_buffer (YY_BUFFER_STATE b,FILE *file ); YY_BUFFER_STATE ld_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE ld_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE ld_scan_bytes (yyconst char *bytes,int len ); +YY_BUFFER_STATE ld_scan_bytes (yyconst char *bytes,yy_size_t len ); void *ldalloc (yy_size_t ); void *ldrealloc (void *,yy_size_t ); @@ -364,7 +365,7 @@ void ldfree (void * ); /* Begin user sect3 */ -#define ldwrap(n) 1 +#define ldwrap() 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; @@ -1145,7 +1146,7 @@ static int pop_state (void); static int handle_ifdef (void); static void invalid_char (int ch); -#line 1149 "ldlex.c" +#line 1150 "ldlex.c" #define INITIAL 0 #define IGNORE 1 @@ -1185,7 +1186,7 @@ FILE *ldget_out (void ); void ldset_out (FILE * out_str ); -int ldget_leng (void ); +yy_size_t ldget_leng (void ); char *ldget_text (void ); @@ -1246,7 +1247,7 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - unsigned n; \ + size_t n; \ for ( n = 0; n < max_size && \ (c = getc( ldin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -1339,7 +1340,7 @@ YY_DECL return kVERSION_SCRIPT; } -#line 1343 "ldlex.c" +#line 1344 "ldlex.c" if ( !(yy_init) ) { @@ -1410,7 +1411,7 @@ yy_find_action: if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) { - int yyl; + yy_size_t yyl; for ( yyl = 0; yyl < ldleng; ++yyl ) if ( ldtext[yyl] == '\n' ) @@ -1754,7 +1755,7 @@ YY_RULE_SETUP #line 198 "ldlex.l" ECHO; YY_BREAK -#line 1758 "ldlex.c" +#line 1759 "ldlex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(IGNORE): yyterminate(); @@ -1942,21 +1943,21 @@ static int yy_get_next_buffer (void) else { - int num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -1987,7 +1988,7 @@ static int yy_get_next_buffer (void) /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); + (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } @@ -2083,7 +2084,7 @@ static int yy_get_next_buffer (void) yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 218); - return yy_is_jam ? 0 : yy_current_state; + return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) @@ -2098,7 +2099,7 @@ static int yy_get_next_buffer (void) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ - register int number_to_move = (yy_n_chars) + 2; + register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = @@ -2151,7 +2152,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -2429,7 +2430,7 @@ void ldpop_buffer_state (void) */ static void ldensure_buffer_stack (void) { - int num_to_alloc; + yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { @@ -2521,17 +2522,17 @@ YY_BUFFER_STATE ld_scan_string (yyconst char * yystr ) /** Setup the input buffer state to scan the given bytes. The next call to ldlex() will * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE ld_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +YY_BUFFER_STATE ld_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; - int i; + yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; @@ -2613,7 +2614,7 @@ FILE *ldget_out (void) /** Get the length of the current token. * */ -int ldget_leng (void) +yy_size_t ldget_leng (void) { return ldleng; } diff --git a/src/ldscript.c b/src/ldscript.c index 4fd1a7e..5ebed84 100644 --- a/src/ldscript.c +++ b/src/ldscript.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.7. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.5" +#define YYBISON_VERSION "2.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -58,8 +58,6 @@ /* Pull parsers. */ #define YYPULL 1 -/* Using locations. */ -#define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse ldparse @@ -70,10 +68,8 @@ #define yydebug lddebug #define yynerrs ldnerrs - /* Copy the first part of user declarations. */ - -/* Line 268 of yacc.c */ +/* Line 371 of yacc.c */ #line 1 "ldscript.y" /* Parser for linker scripts. @@ -136,14 +132,16 @@ static void add_versions (struct version *versions); extern int yylex (void); +/* Line 371 of yacc.c */ +#line 137 "ldscript.c" -/* Line 268 of yacc.c */ -#line 142 "ldscript.c" - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE @@ -153,11 +151,17 @@ extern int yylex (void); # define YYERROR_VERBOSE 0 #endif -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 +/* In a future release of Bison, this section will be replaced + by #include "y.tab.h". */ +#ifndef YY_LD_LDSCRIPT_H_INCLUDED +# define YY_LD_LDSCRIPT_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int lddebug; #endif - /* Tokens. */ #ifndef YYTOKENTYPE @@ -225,12 +229,10 @@ extern int yylex (void); - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 293 of yacc.c */ +/* Line 387 of yacc.c */ #line 63 "ldscript.y" uintmax_t num; @@ -247,21 +249,36 @@ typedef union YYSTYPE struct id_list *id_list; - -/* Line 293 of yacc.c */ -#line 253 "ldscript.c" +/* Line 387 of yacc.c */ +#line 254 "ldscript.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif +extern YYSTYPE ldlval; -/* Copy the second part of user declarations. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int ldparse (void *YYPARSE_PARAM); +#else +int ldparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int ldparse (void); +#else +int ldparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + +#endif /* !YY_LD_LDSCRIPT_H_INCLUDED */ +/* Copy the second part of user declarations. */ -/* Line 343 of yacc.c */ -#line 265 "ldscript.c" +/* Line 390 of yacc.c */ +#line 282 "ldscript.c" #ifdef short # undef short @@ -314,24 +331,24 @@ typedef short int yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ -# define YY_(msgid) msgid +# define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) +# define YYUSE(E) ((void) (E)) #else -# define YYUSE(e) /* empty */ +# define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint -# define YYID(n) (n) +# define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) @@ -367,6 +384,7 @@ YYID (yyi) # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif @@ -458,20 +476,20 @@ union yyalloc #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from FROM to TO. The source and destination do +/* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ while (YYID (0)) # endif # endif @@ -589,7 +607,7 @@ static const yytype_uint16 yyrline[] = }; #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -605,7 +623,7 @@ static const char *const yytname[] = "inputsection", "sectionname", "sort_opt_name", "exclude_opt", "expr", "filename_id_list", "comma_opt", "filename_id_listelem", "versionlist", "version", "version_stmt_list", "version_stmt", "filename_id_star_list", - "filename_id", "filename_id_star", 0 + "filename_id", "filename_id_star", YY_NULL }; #endif @@ -738,10 +756,10 @@ static const yytype_uint8 yytable[] = 0, 0, 0, 0, 81, 0, 78 }; -#define yypact_value_is_default(yystate) \ - ((yystate) == (-86)) +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-86))) -#define yytable_value_is_error(yytable_value) \ +#define yytable_value_is_error(Yytable_value) \ YYID (0) static const yytype_int16 yycheck[] = @@ -820,62 +838,35 @@ static const yytype_uint8 yystos[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (1); \ - goto yybackup; \ - } \ - else \ - { \ +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) - +/* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (YYID (0)) -#endif - - /* This macro is provided for backward compatibility. */ - #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ - #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else @@ -925,6 +916,8 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) YYSTYPE const * const yyvaluep; #endif { + FILE *yyo = yyoutput; + YYUSE (yyo); if (!yyvaluep) return; # ifdef YYPRINT @@ -936,7 +929,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) switch (yytype) { default: - break; + break; } } @@ -1176,12 +1169,11 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = 0; + const char *yyformat = YY_NULL; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -1241,11 +1233,13 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, break; } yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } } } } @@ -1265,10 +1259,12 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, # undef YYCASE_ } - yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } if (*yymsg_alloc < yysize) { @@ -1328,32 +1324,27 @@ yydestruct (yymsg, yytype, yyvaluep) { default: - break; + break; } } -/* Prevent warnings from -Wmissing-prototypes. */ -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ /* The lookahead symbol. */ int yychar; + +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; +YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); /* Number of syntax errors so far. */ int yynerrs; @@ -1393,7 +1384,7 @@ yyparse () `yyss': related to states. `yyvs': related to semantic values. - Refer to the stacks thru separate pointers, to allow yyoverflow + Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ @@ -1411,7 +1402,7 @@ yyparse () int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken; + int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -1429,9 +1420,8 @@ yyparse () Keep to zero when no symbol should be popped. */ int yylen = 0; - yytoken = 0; - yyss = yyssa; - yyvs = yyvsa; + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -1440,14 +1430,6 @@ yyparse () yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - yyssp = yyss; - yyvsp = yyvs; - goto yysetstate; /*------------------------------------------------------------. @@ -1588,7 +1570,9 @@ yybackup: yychar = YYEMPTY; yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -1625,15 +1609,13 @@ yyreduce: switch (yyn) { case 3: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 137 "ldscript.y" { add_versions ((yyvsp[(2) - (2)].version)); } break; case 6: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 145 "ldscript.y" { if (likely (ld_state.entry == NULL)) @@ -1642,8 +1624,7 @@ yyreduce: break; case 7: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 150 "ldscript.y" { ld_new_searchdir ((yyvsp[(3) - (5)].str)); @@ -1651,8 +1632,7 @@ yyreduce: break; case 8: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 154 "ldscript.y" { if (likely (ld_state.pagesize == 0)) @@ -1661,8 +1641,7 @@ yyreduce: break; case 9: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 159 "ldscript.y" { if (likely (ld_state.interp == NULL) @@ -1672,8 +1651,7 @@ yyreduce: break; case 10: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 165 "ldscript.y" { new_segment ((yyvsp[(2) - (5)].num), (yyvsp[(4) - (5)].output_rule)); @@ -1681,8 +1659,7 @@ yyreduce: break; case 11: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 169 "ldscript.y" { fputs_unlocked (gettext ("mode for segment invalid\n"), @@ -1692,8 +1669,7 @@ yyreduce: break; case 12: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 175 "ldscript.y" { /* First little optimization. If there is only one @@ -1708,36 +1684,31 @@ yyreduce: break; case 13: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 186 "ldscript.y" { add_inputfiles ((yyvsp[(3) - (4)].filename_list)); } break; case 14: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 188 "ldscript.y" { add_inputfiles (mark_as_needed ((yyvsp[(3) - (4)].filename_list))); } break; case 15: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 190 "ldscript.y" { add_versions ((yyvsp[(3) - (4)].version)); } break; case 16: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 192 "ldscript.y" { /* XXX TODO */ } break; case 17: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 196 "ldscript.y" { (yyvsp[(2) - (2)].output_rule)->next = (yyvsp[(1) - (2)].output_rule)->next; @@ -1746,15 +1717,13 @@ yyreduce: break; case 18: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 201 "ldscript.y" { (yyval.output_rule) = (yyvsp[(1) - (1)].output_rule); } break; case 19: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 205 "ldscript.y" { (yyval.output_rule) = new_output_rule (output_assignment); @@ -1763,8 +1732,7 @@ yyreduce: break; case 20: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 210 "ldscript.y" { (yyval.output_rule) = new_output_rule (output_section); @@ -1780,8 +1748,7 @@ yyreduce: break; case 21: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 222 "ldscript.y" { /* This is a short cut for "ID { *(ID) }". */ @@ -1807,22 +1774,19 @@ yyreduce: break; case 22: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 246 "ldscript.y" { (yyval.assignment) = new_assignment ((yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].expr), false); } break; case 23: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 248 "ldscript.y" { (yyval.assignment) = new_assignment ((yyvsp[(3) - (6)].str), (yyvsp[(5) - (6)].expr), true); } break; case 24: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 252 "ldscript.y" { (yyvsp[(2) - (2)].input_rule)->next = (yyvsp[(1) - (2)].input_rule)->next; @@ -1831,15 +1795,13 @@ yyreduce: break; case 25: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 257 "ldscript.y" { (yyval.input_rule) = (yyvsp[(1) - (1)].input_rule); } break; case 26: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 261 "ldscript.y" { (yyval.input_rule) = new_input_rule (input_section); @@ -1848,8 +1810,7 @@ yyreduce: break; case 27: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 266 "ldscript.y" { (yyvsp[(3) - (4)].filemask_section_name)->keep_flag = true; @@ -1860,8 +1821,7 @@ yyreduce: break; case 28: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 273 "ldscript.y" { (yyval.input_rule) = new_input_rule (input_assignment); @@ -1870,8 +1830,7 @@ yyreduce: break; case 29: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 280 "ldscript.y" { (yyval.filemask_section_name) = (struct filemask_section_name *) @@ -1884,36 +1843,31 @@ yyreduce: break; case 30: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 291 "ldscript.y" { (yyval.sectionname) = new_input_section_name ((yyvsp[(1) - (1)].str), false); } break; case 31: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 293 "ldscript.y" { (yyval.sectionname) = new_input_section_name ((yyvsp[(3) - (4)].str), true); } break; case 32: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 297 "ldscript.y" { (yyval.str) = (yyvsp[(3) - (4)].str); } break; case 33: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 299 "ldscript.y" { (yyval.str) = NULL; } break; case 34: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 303 "ldscript.y" { (yyval.expr) = new_expr (exp_align); @@ -1922,15 +1876,13 @@ yyreduce: break; case 35: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 308 "ldscript.y" { (yyval.expr) = (yyvsp[(2) - (3)].expr); } break; case 36: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 310 "ldscript.y" { (yyval.expr) = new_expr (exp_mult); @@ -1940,8 +1892,7 @@ yyreduce: break; case 37: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 316 "ldscript.y" { (yyval.expr) = new_expr ((yyvsp[(2) - (3)].op)); @@ -1951,8 +1902,7 @@ yyreduce: break; case 38: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 322 "ldscript.y" { (yyval.expr) = new_expr ((yyvsp[(2) - (3)].op)); @@ -1962,8 +1912,7 @@ yyreduce: break; case 39: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 328 "ldscript.y" { (yyval.expr) = new_expr (exp_and); @@ -1973,8 +1922,7 @@ yyreduce: break; case 40: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 334 "ldscript.y" { (yyval.expr) = new_expr (exp_or); @@ -1984,8 +1932,7 @@ yyreduce: break; case 41: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 340 "ldscript.y" { (yyval.expr) = new_expr (exp_num); @@ -1994,8 +1941,7 @@ yyreduce: break; case 42: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 345 "ldscript.y" { (yyval.expr) = new_expr (exp_id); @@ -2004,22 +1950,19 @@ yyreduce: break; case 43: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 350 "ldscript.y" { (yyval.expr) = new_expr (exp_sizeof_headers); } break; case 44: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 352 "ldscript.y" { (yyval.expr) = new_expr (exp_pagesize); } break; case 45: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 356 "ldscript.y" { (yyvsp[(3) - (3)].filename_list)->next = (yyvsp[(1) - (3)].filename_list)->next; @@ -2028,15 +1971,13 @@ yyreduce: break; case 46: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 361 "ldscript.y" { (yyval.filename_list) = (yyvsp[(1) - (1)].filename_list); } break; case 49: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 369 "ldscript.y" { /* First little optimization. If there is only one @@ -2051,22 +1992,19 @@ yyreduce: break; case 50: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 380 "ldscript.y" { (yyval.filename_list) = mark_as_needed ((yyvsp[(3) - (4)].filename_list)); } break; case 51: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 382 "ldscript.y" { (yyval.filename_list) = new_filename_listelem ((yyvsp[(1) - (1)].str)); } break; case 52: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 387 "ldscript.y" { (yyvsp[(2) - (2)].version)->next = (yyvsp[(1) - (2)].version)->next; @@ -2075,15 +2013,13 @@ yyreduce: break; case 53: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 392 "ldscript.y" { (yyval.version) = (yyvsp[(1) - (1)].version); } break; case 54: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 396 "ldscript.y" { (yyvsp[(2) - (4)].version)->versionname = ""; @@ -2093,8 +2029,7 @@ yyreduce: break; case 55: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 402 "ldscript.y" { (yyvsp[(3) - (5)].version)->versionname = (yyvsp[(1) - (5)].str); @@ -2104,8 +2039,7 @@ yyreduce: break; case 56: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 408 "ldscript.y" { (yyvsp[(3) - (6)].version)->versionname = (yyvsp[(1) - (6)].str); @@ -2115,36 +2049,31 @@ yyreduce: break; case 57: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 417 "ldscript.y" { (yyval.version) = merge_versions ((yyvsp[(1) - (2)].version), (yyvsp[(2) - (2)].version)); } break; case 58: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 419 "ldscript.y" { (yyval.version) = (yyvsp[(1) - (1)].version); } break; case 59: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 423 "ldscript.y" { (yyval.version) = new_version (NULL, (yyvsp[(2) - (2)].id_list)); } break; case 60: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 425 "ldscript.y" { (yyval.version) = new_version ((yyvsp[(2) - (2)].id_list), NULL); } break; case 61: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 430 "ldscript.y" { struct id_list *newp = new_id_listelem ((yyvsp[(2) - (3)].str)); @@ -2154,44 +2083,38 @@ yyreduce: break; case 62: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 436 "ldscript.y" { (yyval.id_list) = new_id_listelem ((yyvsp[(1) - (2)].str)); } break; case 63: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 440 "ldscript.y" { (yyval.str) = (yyvsp[(1) - (1)].str); } break; case 64: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 442 "ldscript.y" { (yyval.str) = (yyvsp[(1) - (1)].str); } break; case 65: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 446 "ldscript.y" { (yyval.str) = (yyvsp[(1) - (1)].str); } break; case 66: - -/* Line 1806 of yacc.c */ +/* Line 1792 of yacc.c */ #line 448 "ldscript.y" { (yyval.str) = NULL; } break; - -/* Line 1806 of yacc.c */ -#line 2195 "ldscript.c" +/* Line 1792 of yacc.c */ +#line 2118 "ldscript.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2354,7 +2277,9 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -2378,7 +2303,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#if !defined(yyoverflow) || YYERROR_VERBOSE +#if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -2420,8 +2345,7 @@ yyreturn: } - -/* Line 2067 of yacc.c */ +/* Line 2055 of yacc.c */ #line 451 "ldscript.y" @@ -2776,4 +2700,3 @@ add_versions (struct version *versions) } while (versions != NULL); } - diff --git a/src/ldscript.h b/src/ldscript.h index 5ce0bf6..f96b1bd 100644 --- a/src/ldscript.h +++ b/src/ldscript.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.7. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,6 +30,15 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ +#ifndef YY_LD_LDSCRIPT_H_INCLUDED +# define YY_LD_LDSCRIPT_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int lddebug; +#endif /* Tokens. */ #ifndef YYTOKENTYPE @@ -97,12 +106,10 @@ - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 2068 of yacc.c */ +/* Line 2058 of yacc.c */ #line 63 "ldscript.y" uintmax_t num; @@ -119,9 +126,8 @@ typedef union YYSTYPE struct id_list *id_list; - -/* Line 2068 of yacc.c */ -#line 125 "ldscript.h" +/* Line 2058 of yacc.c */ +#line 131 "ldscript.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -130,4 +136,18 @@ typedef union YYSTYPE extern YYSTYPE ldlval; +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int ldparse (void *YYPARSE_PARAM); +#else +int ldparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int ldparse (void); +#else +int ldparse (); +#endif +#endif /* ! YYPARSE_PARAM */ +#endif /* !YY_LD_LDSCRIPT_H_INCLUDED */ diff --git a/src/nm.c b/src/nm.c index f50da0b..4f2e0e7 100644 --- a/src/nm.c +++ b/src/nm.c @@ -1,5 +1,5 @@ /* Print symbol information from ELF file in human-readable form. - Copyright (C) 2000-2008, 2009, 2011, 2012 Red Hat, Inc. + Copyright (C) 2000-2008, 2009, 2011, 2012, 2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -763,14 +763,16 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname, { GElf_Shdr shdr_mem; - assert (elf_ndxscn (scn) == cnt++); + assert (elf_ndxscn (scn) == cnt); + cnt++; char *name = elf_strptr (ebl->elf, shstrndx, gelf_getshdr (scn, &shdr_mem)->sh_name); if (unlikely (name == NULL)) { - name = alloca (sizeof "[invalid sh_name 0x12345678]"); - snprintf (name, sizeof name, "[invalid sh_name %#" PRIx32 "]", + const size_t bufsz = sizeof "[invalid sh_name 0x12345678]"; + name = alloca (bufsz); + snprintf (name, bufsz, "[invalid sh_name %#" PRIx32 "]", gelf_getshdr (scn, &shdr_mem)->sh_name); } scnnames[elf_ndxscn (scn)] = name; @@ -792,15 +794,6 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname, /* TRANS: the "sysv|" parts makes the string unique. */ longest_where, sgettext ("sysv|Line")); - /* Which format string to use (different radix for numbers). */ - const char *number_fmtstr; - if (radix == radix_hex) - number_fmtstr = "%0*" PRIx64; - else if (radix == radix_decimal) - number_fmtstr = "%0*" PRId64; - else - number_fmtstr = "%0*" PRIo64; - #ifdef USE_DEMANGLE size_t demangle_buffer_len = 0; char *demangle_buffer = NULL; @@ -818,8 +811,8 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname, symstrbuf, sizeof symstrbuf); #ifdef USE_DEMANGLE - /* Demangle if necessary. */ - if (demangle) + /* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */ + if (demangle && symstr[0] == '_' && symstr[1] == 'Z') { int status = -1; char *dmsymstr = __cxa_demangle (symstr, demangle_buffer, @@ -848,9 +841,15 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname, addressbuf[0] = sizebuf[0] = '\0'; else { - snprintf (addressbuf, sizeof (addressbuf), number_fmtstr, + snprintf (addressbuf, sizeof (addressbuf), + (radix == radix_hex ? "%0*" PRIx64 + : (radix == radix_decimal ? "%0*" PRId64 + : "%0*" PRIo64)), digits, syms[cnt].sym.st_value); - snprintf (sizebuf, sizeof (sizebuf), number_fmtstr, + snprintf (sizebuf, sizeof (sizebuf), + (radix == radix_hex ? "%0*" PRIx64 + : (radix == radix_decimal ? "%0*" PRId64 + : "%0*" PRIo64)), digits, syms[cnt].sym.st_size); } @@ -927,19 +926,6 @@ show_symbols_bsd (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx, if (prefix != NULL && ! print_file_name) printf ("\n%s:\n", fname); - static const char *const fmtstrs[] = - { - [radix_hex] = "%6$s%2$0*1$" PRIx64 "%8$s %7$s%3$c%4$s %5$s", - [radix_decimal] = "%6$s%*" PRId64 "%8$s %7$s%3$c%4$s %5$s", - [radix_octal] = "%6$s%2$0*1$" PRIo64 "%8$s %7$s%3$c%4$s %5$s" - }; - static const char *const sfmtstrs[] = - { - [radix_hex] = "%6$s%2$0*1$" PRIx64 "%8$s %10$0*9$" PRIx64 " %7$s%3$c%4$s %5$s", - [radix_decimal] = "%6$s%2$*1$" PRId64 "%8$s %10$*9$" PRId64 " %7$s%3$c%4$s %5$s", - [radix_octal] = "%6$s%2$0*1$" PRIo64 "%8$s %10$0*9$" PRIo64 " %7$s%3$c%4$s %5$s" - }; - #ifdef USE_DEMANGLE size_t demangle_buffer_len = 0; char *demangle_buffer = NULL; @@ -963,8 +949,8 @@ show_symbols_bsd (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx, continue; #ifdef USE_DEMANGLE - /* Demangle if necessary. */ - if (demangle) + /* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */ + if (demangle && symstr[0] == '_' && symstr[1] == 'Z') { int status = -1; char *dmsymstr = __cxa_demangle (symstr, demangle_buffer, @@ -1014,16 +1000,41 @@ show_symbols_bsd (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx, else color = color_symbol; } - - printf (print_size && syms[cnt].sym.st_size != 0 - ? sfmtstrs[radix] : fmtstrs[radix], - digits, syms[cnt].sym.st_value, - class_type_char (elf, ehdr, &syms[cnt].sym), marker, - symstr, - color_mode ? color_address : "", - color, - color_mode ? color_off : "", - digits, (uint64_t) syms[cnt].sym.st_size); + if (print_size && syms[cnt].sym.st_size != 0) + { +#define HEXFMT "%6$s%2$0*1$" PRIx64 "%8$s %10$0*9$" PRIx64 " %7$s%3$c%4$s %5$s" +#define DECFMT "%6$s%2$*1$" PRId64 "%8$s %10$*9$" PRId64 " %7$s%3$c%4$s %5$s" +#define OCTFMT "%6$s%2$0*1$" PRIo64 "%8$s %10$0*9$" PRIo64 " %7$s%3$c%4$s %5$s" + printf ((radix == radix_hex ? HEXFMT + : (radix == radix_decimal ? DECFMT : OCTFMT)), + digits, syms[cnt].sym.st_value, + class_type_char (elf, ehdr, &syms[cnt].sym), marker, + symstr, + color_mode ? color_address : "", + color, + color_mode ? color_off : "", + digits, (uint64_t) syms[cnt].sym.st_size); +#undef HEXFMT +#undef DECFMT +#undef OCTFMT + } + else + { +#define HEXFMT "%6$s%2$0*1$" PRIx64 "%8$s %7$s%3$c%4$s %5$s" +#define DECFMT "%6$s%2$*1$" PRId64 "%8$s %7$s%3$c%4$s %5$s" +#define OCTFMT "%6$s%2$0*1$" PRIo64 "%8$s %7$s%3$c%4$s %5$s" + printf ((radix == radix_hex ? HEXFMT + : (radix == radix_decimal ? DECFMT : OCTFMT)), + digits, syms[cnt].sym.st_value, + class_type_char (elf, ehdr, &syms[cnt].sym), marker, + symstr, + color_mode ? color_address : "", + color, + color_mode ? color_off : ""); +#undef HEXFMT +#undef DECFMT +#undef OCTFMT + } } if (color_mode) @@ -1045,14 +1056,6 @@ show_symbols_posix (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx, if (prefix != NULL && ! print_file_name) printf ("%s:\n", fullname); - const char *fmtstr; - if (radix == radix_hex) - fmtstr = "%s %c%s %0*" PRIx64 " %0*" PRIx64 "\n"; - else if (radix == radix_decimal) - fmtstr = "%s %c%s %*" PRId64 " %*" PRId64 "\n"; - else - fmtstr = "%s %c%s %0*" PRIo64 " %0*" PRIo64 "\n"; - int digits = length_map[gelf_getclass (elf) - 1][radix]; #ifdef USE_DEMANGLE @@ -1074,8 +1077,8 @@ show_symbols_posix (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx, continue; #ifdef USE_DEMANGLE - /* Demangle if necessary. */ - if (demangle) + /* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */ + if (demangle && symstr[0] == '_' && symstr[1] == 'Z') { int status = -1; char *dmsymstr = __cxa_demangle (symstr, demangle_buffer, @@ -1094,7 +1097,11 @@ show_symbols_posix (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx, putchar_unlocked (' '); } - printf (fmtstr, + printf ((radix == radix_hex + ? "%s %c%s %0*" PRIx64 " %0*" PRIx64 "\n" + : (radix == radix_decimal + ? "%s %c%s %*" PRId64 " %*" PRId64 "\n" + : "%s %c%s %0*" PRIo64 " %0*" PRIo64 "\n")), symstr, class_type_char (elf, ehdr, &syms[cnt].sym), mark_special @@ -1242,8 +1249,8 @@ show_symbols (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, Elf_Scn *xndxscn, continue; #ifdef USE_DEMANGLE - /* Demangle if necessary. */ - if (demangle) + /* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */ + if (demangle && symstr[0] == '_' && symstr[1] == 'Z') { int status = -1; char *dmsymstr = __cxa_demangle (symstr, demangle_buffer, diff --git a/src/readelf.c b/src/readelf.c index 2954e74..6bbe436 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -1,5 +1,5 @@ /* Print information from ELF file in human-readable form. - Copyright (C) 1999-2012 Red Hat, Inc. + Copyright (C) 1999-2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 1999. @@ -42,6 +42,7 @@ #include #include #include +#include #include #include "../libelf/libelfP.h" @@ -61,9 +62,16 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; /* Bug report address. */ ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; +/* argp key value for --elf-section, non-ascii. */ +#define ELF_INPUT_SECTION 256 + /* Definitions of arguments for argp functions. */ static const struct argp_option options[] = { + { NULL, 0, NULL, 0, N_("ELF input selection:"), 0 }, + { "elf-section", ELF_INPUT_SECTION, "SECTION", OPTION_ARG_OPTIONAL, + N_("Use the named SECTION (default .gnu_debugdata) as (compressed) ELF " + "input data"), 0 }, { NULL, 0, NULL, 0, N_("ELF output selection:"), 0 }, { "all", 'a', NULL, 0, N_("All these plus -p .strtab -p .dynstr -p .comment"), 0 }, @@ -87,8 +95,8 @@ static const struct argp_option options[] = { NULL, 0, NULL, 0, N_("Additional output selection:"), 0 }, { "debug-dump", 'w', "SECTION", OPTION_ARG_OPTIONAL, N_("Display DWARF section content. SECTION can be one of abbrev, " - "aranges, frame, gdb_index, info, loc, line, ranges, pubnames, str, " - "macinfo, macro or exception"), 0 }, + "aranges, decodedaranges, frame, gdb_index, info, loc, line, " + "decodedline, ranges, pubnames, str, macinfo, macro or exception"), 0 }, { "hex-dump", 'x', "SECTION", 0, N_("Dump the uninterpreted contents of SECTION, by number or name"), 0 }, { "strings", 'p', "SECTION", OPTION_ARG_OPTIONAL, @@ -100,6 +108,8 @@ static const struct argp_option options[] = { NULL, 0, NULL, 0, N_("Output control:"), 0 }, { "numeric-addresses", 'N', NULL, 0, N_("Do not find symbol names for addresses in DWARF data"), 0 }, + { "unresolved-address-offsets", 'U', NULL, 0, + N_("Display just offsets instead of resolving values to addresses in DWARF data"), 0 }, { "wide", 'W', NULL, 0, N_("Ignored for compatibility (lines always wide)"), 0 }, { NULL, 0, NULL, 0, NULL, 0 } @@ -121,6 +131,8 @@ static struct argp argp = options, parse_opt, args_doc, doc, NULL, NULL, NULL }; +/* If non-null, the section from which we should read to (compressed) ELF. */ +static const char *elf_input_section = NULL; /* Flags set by the option controlling the output. */ @@ -169,6 +181,15 @@ static bool any_control_option; /* True if we should print addresses from DWARF in symbolic form. */ static bool print_address_names = true; +/* True if we should print raw values instead of relativized addresses. */ +static bool print_unresolved_addresses = false; + +/* True if we should print the .debug_aranges section using libdw. */ +static bool decodedaranges = false; + +/* True if we should print the .debug_aranges section using libdw. */ +static bool decodedline = false; + /* Select printing of debugging sections. */ static enum section_e { @@ -377,6 +398,11 @@ parse_opt (int key, char *arg, print_debug_sections |= section_abbrev; else if (strcmp (arg, "aranges") == 0) print_debug_sections |= section_aranges; + else if (strcmp (arg, "decodedaranges") == 0) + { + print_debug_sections |= section_aranges; + decodedaranges = true; + } else if (strcmp (arg, "ranges") == 0) { print_debug_sections |= section_ranges; @@ -393,6 +419,11 @@ parse_opt (int key, char *arg, } else if (strcmp (arg, "line") == 0) print_debug_sections |= section_line; + else if (strcmp (arg, "decodedline") == 0) + { + print_debug_sections |= section_line; + decodedline = true; + } else if (strcmp (arg, "pubnames") == 0) print_debug_sections |= section_pubnames; else if (strcmp (arg, "str") == 0) @@ -430,6 +461,9 @@ parse_opt (int key, char *arg, case 'N': print_address_names = false; break; + case 'U': + print_unresolved_addresses = true; + break; case ARGP_KEY_NO_ARGS: fputs (gettext ("Missing file name.\n"), stderr); goto do_argp_help; @@ -445,6 +479,12 @@ parse_opt (int key, char *arg, break; case 'W': /* Ignored. */ break; + case ELF_INPUT_SECTION: + if (arg == NULL) + elf_input_section = ".gnu_debugdata"; + else + elf_input_section = arg; + break; default: return ARGP_ERR_UNKNOWN; } @@ -466,6 +506,121 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ } +/* Create a file descriptor to read the data from the + elf_input_section given a file descriptor to an ELF file. */ +static int +open_input_section (int fd) +{ + size_t shnums; + size_t cnt; + size_t shstrndx; + Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL); + if (elf == NULL) + { + error (0, 0, gettext ("cannot generate Elf descriptor: %s"), + elf_errmsg (-1)); + return -1; + } + + if (elf_getshdrnum (elf, &shnums) < 0) + { + error (0, 0, gettext ("cannot determine number of sections: %s"), + elf_errmsg (-1)); + open_error: + elf_end (elf); + return -1; + } + + if (elf_getshdrstrndx (elf, &shstrndx) < 0) + { + error (0, 0, gettext ("cannot get section header string table index")); + goto open_error; + } + + for (cnt = 0; cnt < shnums; ++cnt) + { + Elf_Scn *scn = elf_getscn (elf, cnt); + if (scn == NULL) + { + error (0, 0, gettext ("cannot get section: %s"), + elf_errmsg (-1)); + goto open_error; + } + + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + if (unlikely (shdr == NULL)) + { + error (0, 0, gettext ("cannot get section header: %s"), + elf_errmsg (-1)); + goto open_error; + } + + const char *sname = elf_strptr (elf, shstrndx, shdr->sh_name); + if (sname == NULL) + { + error (0, 0, gettext ("cannot get section name")); + goto open_error; + } + + if (strcmp (sname, elf_input_section) == 0) + { + Elf_Data *data = elf_rawdata (scn, NULL); + if (data == NULL) + { + error (0, 0, gettext ("cannot get %s content: %s"), + sname, elf_errmsg (-1)); + goto open_error; + } + + /* Create (and immediately unlink) a temporary file to store + section data in to create a file descriptor for it. */ + const char *tmpdir = getenv ("TMPDIR") ?: P_tmpdir; + static const char suffix[] = "/readelfXXXXXX"; + int tmplen = strlen (tmpdir) + sizeof (suffix); + char *tempname = alloca (tmplen); + sprintf (tempname, "%s%s", tmpdir, suffix); + + int sfd = mkstemp (tempname); + if (sfd == -1) + { + error (0, 0, gettext ("cannot create temp file '%s'"), + tempname); + goto open_error; + } + unlink (tempname); + + ssize_t size = data->d_size; + if (write_retry (sfd, data->d_buf, size) != size) + { + error (0, 0, gettext ("cannot write section data")); + goto open_error; + } + + if (elf_end (elf) != 0) + { + error (0, 0, gettext ("error while closing Elf descriptor: %s"), + elf_errmsg (-1)); + return -1; + } + + if (lseek (sfd, 0, SEEK_SET) == -1) + { + error (0, 0, gettext ("error while rewinding file descriptor")); + return -1; + } + + return sfd; + } + } + + /* Named section not found. */ + if (elf_end (elf) != 0) + error (0, 0, gettext ("error while closing Elf descriptor: %s"), + elf_errmsg (-1)); + return -1; +} + /* Check if the file is an archive, and if so dump its index. */ static void check_archive_index (int fd, const char *fname, bool only_one) @@ -538,18 +693,32 @@ process_dwflmod (Dwfl_Module *dwflmod, return DWARF_CB_OK; } -/* Stub libdwfl callback, only the ELF handle already open is ever used. */ +/* Stub libdwfl callback, only the ELF handle already open is ever used. + Only used for finding the alternate debug file if the Dwarf comes from + the main file. We are not interested in separate debuginfo. */ static int -find_no_debuginfo (Dwfl_Module *mod __attribute__ ((unused)), - void **userdata __attribute__ ((unused)), - const char *modname __attribute__ ((unused)), - Dwarf_Addr base __attribute__ ((unused)), - const char *file_name __attribute__ ((unused)), - const char *debuglink_file __attribute__ ((unused)), - GElf_Word debuglink_crc __attribute__ ((unused)), - char **debuginfo_file_name __attribute__ ((unused))) +find_no_debuginfo (Dwfl_Module *mod, + void **userdata, + const char *modname, + Dwarf_Addr base, + const char *file_name, + const char *debuglink_file, + GElf_Word debuglink_crc, + char **debuginfo_file_name) { - return -1; + Dwarf_Addr dwbias; + dwfl_module_info (mod, NULL, NULL, NULL, &dwbias, NULL, NULL, NULL); + + /* We are only interested if the Dwarf has been setup on the main + elf file but is only missing the alternate debug link. If dwbias + hasn't even been setup, this is searching for separate debuginfo + for the main elf. We don't care in that case. */ + if (dwbias == (Dwarf_Addr) -1) + return -1; + + return dwfl_standard_find_debuginfo (mod, userdata, modname, base, + file_name, debuglink_file, + debuglink_crc, debuginfo_file_name); } /* Process one input file. */ @@ -562,6 +731,21 @@ process_file (int fd, const char *fname, bool only_one) if (!any_control_option) return; + if (elf_input_section != NULL) + { + /* Replace fname and fd with section content. */ + char *fnname = alloca (strlen (fname) + strlen (elf_input_section) + 2); + sprintf (fnname, "%s:%s", fname, elf_input_section); + fd = open_input_section (fd); + if (fd == -1) + { + error (0, 0, gettext ("No such section '%s' in '%s'"), + elf_input_section, fname); + return; + } + fname = fnname; + } + /* Duplicate an fd for dwfl_report_offline to swallow. */ int dwfl_fd = dup (fd); if (unlikely (dwfl_fd < 0)) @@ -606,6 +790,11 @@ process_file (int fd, const char *fname, bool only_one) dwfl_getmodules (dwfl, &process_dwflmod, &a, 0); } dwfl_end (dwfl); + + /* Need to close the replaced fd if we created it. Caller takes + care of original. */ + if (elf_input_section != NULL) + close (fd); } @@ -1012,11 +1201,28 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) if (phdr->p_type == PT_INTERP) { - /* We can show the user the name of the interpreter. */ + /* If we are sure the file offset is valid then we can show + the user the name of the interpreter. We check whether + there is a section at the file offset. Normally there + would be a section called ".interp". But in separate + .debug files it is a NOBITS section (and so doesn't match + with gelf_offscn). Which probably means the offset is + not valid another reason could be because the ELF file + just doesn't contain any section headers, in that case + just play it safe and don't display anything. */ + + Elf_Scn *scn = gelf_offscn (ebl->elf, phdr->p_offset); + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + size_t maxsize; char *filedata = elf_rawfile (ebl->elf, &maxsize); - if (filedata != NULL && phdr->p_offset < maxsize) + if (shdr != NULL && shdr->sh_type == SHT_PROGBITS + && filedata != NULL && phdr->p_offset < maxsize + && phdr->p_filesz <= maxsize - phdr->p_offset + && memchr (filedata + phdr->p_offset, '\0', + phdr->p_filesz) != NULL) printf (gettext ("\t[Requesting program interpreter: %s]\n"), filedata + phdr->p_offset); } @@ -1189,6 +1395,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) Elf32_Word *grpref = (Elf32_Word *) data->d_buf; GElf_Sym sym_mem; + GElf_Sym *sym = gelf_getsym (symdata, shdr->sh_info, &sym_mem); + printf ((grpref[0] & GRP_COMDAT) ? ngettext ("\ \nCOMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n", @@ -1201,8 +1409,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) data->d_size / sizeof (Elf32_Word) - 1), elf_ndxscn (scn), elf_strptr (ebl->elf, shstrndx, shdr->sh_name), - elf_strptr (ebl->elf, symshdr->sh_link, - gelf_getsym (symdata, shdr->sh_info, &sym_mem)->st_name) + (sym == NULL ? NULL + : elf_strptr (ebl->elf, symshdr->sh_link, sym->st_name)) ?: gettext (""), data->d_size / sizeof (Elf32_Word) - 1); @@ -1353,10 +1561,12 @@ static void handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) { int class = gelf_getclass (ebl->elf); - GElf_Shdr glink; + GElf_Shdr glink_mem; + GElf_Shdr *glink; Elf_Data *data; size_t cnt; size_t shstrndx; + size_t sh_entsize; /* Get the data of the section. */ data = elf_getdata (scn, NULL); @@ -1368,21 +1578,26 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); + sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT); + + glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); + if (glink == NULL) + error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), + elf_ndxscn (scn)); + printf (ngettext ("\ \nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", "\ \nDynamic segment contains %lu entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", - shdr->sh_size / shdr->sh_entsize), - (unsigned long int) (shdr->sh_size / shdr->sh_entsize), + shdr->sh_size / sh_entsize), + (unsigned long int) (shdr->sh_size / sh_entsize), class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, shdr->sh_offset, (int) shdr->sh_link, - elf_strptr (ebl->elf, shstrndx, - gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), - &glink)->sh_name)); + elf_strptr (ebl->elf, shstrndx, glink->sh_name)); fputs_unlocked (gettext (" Type Value\n"), stdout); - for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) + for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) { GElf_Dyn dynmem; GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem); @@ -1531,7 +1746,8 @@ static void handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) { int class = gelf_getclass (ebl->elf); - 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; /* Get the data of the section. */ Elf_Data *data = elf_getdata (scn, NULL); @@ -1717,7 +1933,8 @@ static void handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) { int class = gelf_getclass (ebl->elf); - 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; /* Get the data of the section. */ Elf_Data *data = elf_getdata (scn, NULL); @@ -1754,7 +1971,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", @@ -1765,6 +1983,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") @@ -1964,6 +2195,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); + GElf_Shdr glink_mem; + GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), + &glink_mem); + if (glink == NULL) + error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), + elf_ndxscn (scn)); + /* Now we can compute the number of entries in the section. */ unsigned int nsyms = data->d_size / (class == ELFCLASS32 ? sizeof (Elf32_Sym) @@ -1974,15 +2212,12 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) nsyms), (unsigned int) elf_ndxscn (scn), elf_strptr (ebl->elf, shstrndx, shdr->sh_name), nsyms); - GElf_Shdr glink; printf (ngettext (" %lu local symbol String table: [%2u] '%s'\n", " %lu local symbols String table: [%2u] '%s'\n", shdr->sh_info), (unsigned long int) shdr->sh_info, (unsigned int) shdr->sh_link, - elf_strptr (ebl->elf, shstrndx, - gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), - &glink)->sh_name)); + elf_strptr (ebl->elf, shstrndx, glink->sh_name)); fputs_unlocked (class == ELFCLASS32 ? gettext ("\ @@ -2218,7 +2453,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); - GElf_Shdr glink; + GElf_Shdr glink_mem; + GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), + &glink_mem); + if (glink == NULL) + error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), + elf_ndxscn (scn)); + printf (ngettext ("\ \nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", "\ @@ -2229,9 +2470,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, shdr->sh_offset, (unsigned int) shdr->sh_link, - elf_strptr (ebl->elf, shstrndx, - gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), - &glink)->sh_name)); + elf_strptr (ebl->elf, shstrndx, glink->sh_name)); unsigned int offset = 0; for (int cnt = shdr->sh_info; --cnt >= 0; ) @@ -2284,8 +2523,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); + GElf_Shdr glink_mem; + GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), + &glink_mem); + if (glink == NULL) + error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), + elf_ndxscn (scn)); + int class = gelf_getclass (ebl->elf); - GElf_Shdr glink; printf (ngettext ("\ \nVersion definition section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", "\ @@ -2297,9 +2542,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, shdr->sh_offset, (unsigned int) shdr->sh_link, - elf_strptr (ebl->elf, shstrndx, - gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), - &glink)->sh_name)); + elf_strptr (ebl->elf, shstrndx, glink->sh_name)); unsigned int offset = 0; for (int cnt = shdr->sh_info; --cnt >= 0; ) @@ -2561,25 +2804,30 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) filename = NULL; } + GElf_Shdr glink_mem; + GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), + &glink_mem); + size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_HALF, 1, EV_CURRENT); + if (glink == NULL) + error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), + elf_ndxscn (scn)); + /* Print the header. */ - GElf_Shdr glink; printf (ngettext ("\ \nVersion symbols section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'", "\ \nVersion symbols section [%2u] '%s' contains %d entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'", - shdr->sh_size / shdr->sh_entsize), + shdr->sh_size / sh_entsize), (unsigned int) elf_ndxscn (scn), elf_strptr (ebl->elf, shstrndx, shdr->sh_name), - (int) (shdr->sh_size / shdr->sh_entsize), + (int) (shdr->sh_size / sh_entsize), class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, shdr->sh_offset, (unsigned int) shdr->sh_link, - elf_strptr (ebl->elf, shstrndx, - gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), - &glink)->sh_name)); + elf_strptr (ebl->elf, shstrndx, glink->sh_name)); /* Now we can finally look at the actual contents of this section. */ - for (unsigned int cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) + for (unsigned int cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) { if (cnt % 2 == 0) printf ("\n %4d:", cnt); @@ -2628,7 +2876,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx, for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt) ++counts[lengths[cnt]]; - GElf_Shdr glink; + GElf_Shdr glink_mem; + GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, + shdr->sh_link), + &glink_mem); + if (glink == NULL) + { + error (0, 0, gettext ("invalid sh_link value in section %Zu"), + elf_ndxscn (scn)); + return; + } + printf (ngettext ("\ \nHistogram for bucket list length in section [%2u] '%s' (total of %d bucket):\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", "\ @@ -2641,9 +2899,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx, shdr->sh_addr, shdr->sh_offset, (unsigned int) shdr->sh_link, - elf_strptr (ebl->elf, shstrndx, - gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), - &glink)->sh_name)); + elf_strptr (ebl->elf, shstrndx, glink->sh_name)); if (extrastr != NULL) fputs (extrastr, stdout); @@ -2903,7 +3159,8 @@ print_liblist (Ebl *ebl) if (shdr != NULL && shdr->sh_type == SHT_GNU_LIBLIST) { - int nentries = shdr->sh_size / shdr->sh_entsize; + size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_LIB, 1, EV_CURRENT); + int nentries = shdr->sh_size / sh_entsize; printf (ngettext ("\ \nLibrary list section [%2zu] '%s' at offset %#0" PRIx64 " contains %d entry:\n", "\ @@ -3111,43 +3368,52 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) static char * format_dwarf_addr (Dwfl_Module *dwflmod, - int address_size, Dwarf_Addr address) + int address_size, Dwarf_Addr address, Dwarf_Addr raw) { /* See if there is a name we can give for this address. */ GElf_Sym sym; - const char *name = print_address_names - ? dwfl_module_addrsym (dwflmod, address, &sym, NULL) : NULL; - if (name != NULL) - sym.st_value = address - sym.st_value; + GElf_Off off = 0; + const char *name = (print_address_names && ! print_unresolved_addresses) + ? dwfl_module_addrinfo (dwflmod, address, &off, &sym, NULL, NULL, NULL) + : NULL; - /* Relativize the address. */ - int n = dwfl_module_relocations (dwflmod); - int i = n < 1 ? -1 : dwfl_module_relocate_address (dwflmod, &address); + const char *scn; + if (print_unresolved_addresses) + { + address = raw; + scn = NULL; + } + else + { + /* Relativize the address. */ + int n = dwfl_module_relocations (dwflmod); + int i = n < 1 ? -1 : dwfl_module_relocate_address (dwflmod, &address); - /* In an ET_REL file there is a section name to refer to. */ - const char *scn = (i < 0 ? NULL - : dwfl_module_relocation_info (dwflmod, i, NULL)); + /* In an ET_REL file there is a section name to refer to. */ + scn = (i < 0 ? NULL + : dwfl_module_relocation_info (dwflmod, i, NULL)); + } char *result; if ((name != NULL - ? (sym.st_value != 0 + ? (off != 0 ? (scn != NULL ? (address_size == 0 ? asprintf (&result, gettext ("%s+%#" PRIx64 " <%s+%#" PRIx64 ">"), - scn, address, name, sym.st_value) + scn, address, name, off) : asprintf (&result, gettext ("%s+%#0*" PRIx64 " <%s+%#" PRIx64 ">"), scn, 2 + address_size * 2, address, - name, sym.st_value)) + name, off)) : (address_size == 0 ? asprintf (&result, gettext ("%#" PRIx64 " <%s+%#" PRIx64 ">"), - address, name, sym.st_value) + address, name, off) : asprintf (&result, gettext ("%#0*" PRIx64 " <%s+%#" PRIx64 ">"), 2 + address_size * 2, address, - name, sym.st_value))) + name, off))) : (scn != NULL ? (address_size == 0 ? asprintf (&result, @@ -3566,7 +3832,7 @@ print_block (size_t n, const void *block) static void print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, unsigned int vers, unsigned int addrsize, unsigned int offset_size, - Dwarf_Word len, const unsigned char *data) + struct Dwarf_CU *cu, Dwarf_Word len, const unsigned char *data) { const unsigned int ref_size = vers < 3 ? addrsize : offset_size; @@ -3611,7 +3877,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, data += addrsize; CONSUME (addrsize); - char *a = format_dwarf_addr (dwflmod, 0, addr); + char *a = format_dwarf_addr (dwflmod, 0, addr, addr); printf ("%*s[%4" PRIuMAX "] %s %s\n", indent, "", (uintmax_t) offset, op_name, a); free (a); @@ -3802,7 +4068,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, NEED (2); printf ("%*s[%4" PRIuMAX "] %s %" PRIuMAX "\n", indent, "", (uintmax_t) offset, op_name, - (uintmax_t) (offset + read_2sbyte_unaligned (dbg, data))); + (uintmax_t) (offset + read_2sbyte_unaligned (dbg, data) + 3)); CONSUME (2); data += 2; offset += 3; @@ -3836,7 +4102,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, /* Byte offset operand. */ get_sleb128 (sleb, data); /* XXX check overrun */ - printf ("%*s[%4" PRIuMAX "] %s %#" PRIxMAX ", %+" PRId64 "\n", + printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "] %+" PRId64 "\n", indent, "", (intmax_t) offset, op_name, (uintmax_t) addr, sleb); CONSUME (data - start); @@ -3852,17 +4118,20 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, indent, "", (uintmax_t) offset, op_name); NEED (uleb); print_ops (dwflmod, dbg, indent + 6, indent + 6, vers, - addrsize, offset_size, uleb, data); + addrsize, offset_size, cu, uleb, data); data += uleb; CONSUME (data - start); offset += 1 + (data - start); break; case DW_OP_GNU_const_type: - /* DIE offset, size plus block. */ + /* 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 */ + if (! print_unresolved_addresses && cu != NULL) + uleb += cu->start; uint8_t usize = *(uint8_t *) data++; NEED (usize); printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "] ", @@ -3874,21 +4143,29 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, break; case DW_OP_GNU_regval_type: + /* 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 */ - printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 " %#" PRIx64 "\n", + if (! print_unresolved_addresses && cu != NULL) + uleb2 += cu->start; + printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 " [%6" PRIx64 "]\n", indent, "", (uintmax_t) offset, op_name, uleb, uleb2); CONSUME (data - start); offset += 1 + (data - start); break; case DW_OP_GNU_deref_type: + /* 1-byte unsigned size of value, uleb128 CU relative + DW_TAG_base_type DIE offset. */ start = data; NEED (2); usize = *(uint8_t *) data++; get_uleb128 (uleb, data); /* XXX check overrun */ + if (! print_unresolved_addresses && cu != NULL) + uleb += cu->start; printf ("%*s[%4" PRIuMAX "] %s %" PRIu8 " [%6" PRIxMAX "]\n", indent, "", (uintmax_t) offset, op_name, usize, uleb); @@ -3898,9 +4175,13 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, case DW_OP_GNU_convert: case DW_OP_GNU_reinterpret: + /* uleb128 CU relative offset to DW_TAG_base_type, or zero + for conversion to untyped. */ start = data; NEED (1); get_uleb128 (uleb, data); /* XXX check overrun */ + if (uleb != 0 && ! print_unresolved_addresses && cu != NULL) + uleb += cu->start; printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n", indent, "", (uintmax_t) offset, op_name, uleb); CONSUME (data - start); @@ -3911,9 +4192,11 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, /* 4 byte CU relative reference to the abstract optimized away DW_TAG_formal_parameter. */ NEED (4); + uintmax_t param_off = (uintmax_t) read_4ubyte_unaligned (dbg, data); + if (! print_unresolved_addresses && cu != NULL) + param_off += cu->start; printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n", - indent, "", (uintmax_t) offset, op_name, - (uintmax_t) read_4ubyte_unaligned (dbg, data)); + indent, "", (uintmax_t) offset, op_name, param_off); CONSUME (4); data += 4; offset += 5; @@ -3944,11 +4227,32 @@ struct listptr bool addr64:1; bool dwarf64:1; bool warned:1; + struct Dwarf_CU *cu; }; #define listptr_offset_size(p) ((p)->dwarf64 ? 8 : 4) #define listptr_address_size(p) ((p)->addr64 ? 8 : 4) +static Dwarf_Addr +listptr_base (struct listptr *p) +{ + Dwarf_Addr base; + Dwarf_Die cu = CUDIE (p->cu); + /* Find the base address of the compilation unit. It will normally + be specified by DW_AT_low_pc. In DWARF-3 draft 4, the base + address could be overridden by DW_AT_entry_pc. It's been + removed, but GCC emits DW_AT_entry_pc and not DW_AT_lowpc for + compilation units with discontinuous ranges. */ + if (unlikely (dwarf_lowpc (&cu, &base) != 0)) + { + Dwarf_Attribute attr_mem; + if (dwarf_formaddr (dwarf_attr (&cu, DW_AT_entry_pc, &attr_mem), + &base) != 0) + base = 0; + } + return base; +} + static int compare_listptr (const void *a, const void *b, void *arg) { @@ -3977,6 +4281,13 @@ compare_listptr (const void *a, const void *b, void *arg) gettext ("%s %#" PRIx64 " used with different offset sizes"), name, (uint64_t) p1->offset); } + if (listptr_base (p1) != listptr_base (p2)) + { + p1->warned = p2->warned = true; + error (0, 0, + gettext ("%s %#" PRIx64 " used with different base addresses"), + name, (uint64_t) p1->offset); + } } return 0; @@ -4003,7 +4314,7 @@ reset_listptr (struct listptr_table *table) static void notice_listptr (enum section_e section, struct listptr_table *table, uint_fast8_t address_size, uint_fast8_t offset_size, - Dwarf_Off offset) + struct Dwarf_CU *cu, Dwarf_Off offset) { if (print_debug_sections & section) { @@ -4023,7 +4334,8 @@ notice_listptr (enum section_e section, struct listptr_table *table, { .addr64 = address_size == 8, .dwarf64 = offset_size == 8, - .offset = offset + .offset = offset, + .cu = cu }; assert (p->offset == offset); } @@ -4040,7 +4352,8 @@ sort_listptr (struct listptr_table *table, const char *name) static bool skip_listptr_hole (struct listptr_table *table, size_t *idxp, uint_fast8_t *address_sizep, uint_fast8_t *offset_sizep, - ptrdiff_t offset, unsigned char **readp, unsigned char *endp) + Dwarf_Addr *base, struct Dwarf_CU **cu, ptrdiff_t offset, + unsigned char **readp, unsigned char *endp) { if (table->n == 0) return false; @@ -4071,6 +4384,10 @@ skip_listptr_hole (struct listptr_table *table, size_t *idxp, *address_sizep = listptr_address_size (p); if (offset_sizep != NULL) *offset_sizep = listptr_offset_size (p); + if (base != NULL) + *base = listptr_base (p); + if (cu != NULL) + *cu = p->cu; return false; } @@ -4151,9 +4468,8 @@ print_debug_abbrev_section (Dwfl_Module *dwflmod __attribute__ ((unused)), not have to know a bit about the structure of the section, libdwarf takes care of it. */ static void -print_debug_aranges_section (Dwfl_Module *dwflmod __attribute__ ((unused)), - Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, - GElf_Shdr *shdr, Dwarf *dbg) +print_decoded_aranges_section (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, + GElf_Shdr *shdr, Dwarf *dbg) { Dwarf_Aranges *aranges; size_t cnt; @@ -4164,6 +4480,16 @@ print_debug_aranges_section (Dwfl_Module *dwflmod __attribute__ ((unused)), return; } + GElf_Shdr glink_mem; + GElf_Shdr *glink; + glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); + if (glink == NULL) + { + error (0, 0, gettext ("invalid sh_link value in section %Zu"), + elf_ndxscn (scn)); + return; + } + printf (ngettext ("\ \nDWARF section [%2zu] '%s' at offset %#" PRIx64 " contains %zu entry:\n", "\ @@ -4205,6 +4531,166 @@ print_debug_aranges_section (Dwfl_Module *dwflmod __attribute__ ((unused)), } } + +/* Print content of DWARF .debug_aranges section. */ +static void +print_debug_aranges_section (Dwfl_Module *dwflmod __attribute__ ((unused)), + Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, + GElf_Shdr *shdr, Dwarf *dbg) +{ + if (decodedaranges) + { + print_decoded_aranges_section (ebl, ehdr, scn, shdr, dbg); + return; + } + + Elf_Data *data = dbg->sectiondata[IDX_debug_aranges]; + + if (unlikely (data == NULL)) + { + error (0, 0, gettext ("cannot get .debug_aranges content: %s"), + elf_errmsg (-1)); + return; + } + + printf (gettext ("\ +\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), + elf_ndxscn (scn), section_name (ebl, ehdr, shdr), + (uint64_t) shdr->sh_offset); + + const unsigned char *readp = data->d_buf; + const unsigned char *readendp = readp + data->d_size; + + while (readp < readendp) + { + const unsigned char *hdrstart = readp; + size_t start_offset = hdrstart - (const unsigned char *) data->d_buf; + + printf (gettext ("\nTable at offset %Zu:\n"), start_offset); + if (readp + 4 > readendp) + { + invalid_data: + error (0, 0, gettext ("invalid data in section [%zu] '%s'"), + elf_ndxscn (scn), section_name (ebl, ehdr, shdr)); + return; + } + + Dwarf_Word length = read_4ubyte_unaligned_inc (dbg, readp); + unsigned int length_bytes = 4; + if (length == DWARF3_LENGTH_64_BIT) + { + if (readp + 8 > readendp) + goto invalid_data; + length = read_8ubyte_unaligned_inc (dbg, readp); + length_bytes = 8; + } + + const unsigned char *nexthdr = readp + length; + printf (gettext ("\n Length: %6" PRIu64 "\n"), + (uint64_t) length); + + if (nexthdr > readendp) + goto invalid_data; + + if (length == 0) + continue; + + if (readp + 2 > readendp) + goto invalid_data; + uint_fast16_t version = read_2ubyte_unaligned_inc (dbg, readp); + printf (gettext (" DWARF version: %6" PRIuFAST16 "\n"), + version); + if (version != 2) + { + error (0, 0, gettext ("unsupported aranges version")); + goto next_table; + } + + Dwarf_Word offset; + if (readp + length_bytes > readendp) + goto invalid_data; + if (length_bytes == 8) + offset = read_8ubyte_unaligned_inc (dbg, readp); + else + offset = read_4ubyte_unaligned_inc (dbg, readp); + printf (gettext (" CU offset: %6" PRIx64 "\n"), + (uint64_t) offset); + + if (readp + 1 > readendp) + goto invalid_data; + unsigned int address_size = *readp++; + printf (gettext (" Address size: %6" PRIu64 "\n"), + (uint64_t) address_size); + if (address_size != 4 && address_size != 8) + { + error (0, 0, gettext ("unsupported address size")); + goto next_table; + } + + unsigned int segment_size = *readp++; + printf (gettext (" Segment size: %6" PRIu64 "\n\n"), + (uint64_t) segment_size); + if (segment_size != 0 && segment_size != 4 && segment_size != 8) + { + error (0, 0, gettext ("unsupported segment size")); + goto next_table; + } + + /* Round the address to the next multiple of 2*address_size. */ + readp += ((2 * address_size - ((readp - hdrstart) % (2 * address_size))) + % (2 * address_size)); + + while (readp < nexthdr) + { + Dwarf_Word range_address; + Dwarf_Word range_length; + Dwarf_Word segment = 0; + if (readp + 2 * address_size + segment_size > readendp) + goto invalid_data; + if (address_size == 4) + { + range_address = read_4ubyte_unaligned_inc (dbg, readp); + range_length = read_4ubyte_unaligned_inc (dbg, readp); + } + else + { + range_address = read_8ubyte_unaligned_inc (dbg, readp); + range_length = read_8ubyte_unaligned_inc (dbg, readp); + } + + if (segment_size == 4) + segment = read_4ubyte_unaligned_inc (dbg, readp); + else if (segment_size == 8) + segment = read_8ubyte_unaligned_inc (dbg, readp); + + if (range_address == 0 && range_length == 0 && segment == 0) + break; + + char *b = format_dwarf_addr (dwflmod, address_size, range_address, + range_address); + char *e = format_dwarf_addr (dwflmod, address_size, + range_address + range_length - 1, + range_length); + if (segment_size != 0) + printf (gettext (" %s..%s (%" PRIx64 ")\n"), b, e, + (uint64_t) segment); + else + printf (gettext (" %s..%s\n"), b, e); + free (b); + free (e); + } + + next_table: + if (readp != nexthdr) + { + size_t padding = nexthdr - readp; + printf (gettext (" %Zu padding bytes\n"), padding); + readp = nexthdr; + } + } +} + + /* Print content of DWARF .debug_ranges section. */ static void print_debug_ranges_section (Dwfl_Module *dwflmod, @@ -4212,7 +4698,7 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) { - Elf_Data *data = elf_rawdata (scn, NULL); + Elf_Data *data = dbg->sectiondata[IDX_debug_ranges]; if (unlikely (data == NULL)) { @@ -4232,6 +4718,7 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, uint_fast8_t address_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; bool first = true; + Dwarf_Addr base = 0; unsigned char *const endp = (unsigned char *) data->d_buf + data->d_size; unsigned char *readp = data->d_buf; while (readp < endp) @@ -4239,11 +4726,11 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, ptrdiff_t offset = readp - (unsigned char *) data->d_buf; if (first && skip_listptr_hole (&known_rangelistptr, &listptr_idx, - &address_size, NULL, + &address_size, NULL, &base, NULL, offset, &readp, endp)) continue; - if (unlikely (data->d_size - offset < address_size * 2)) + if (unlikely (data->d_size - offset < (size_t) address_size * 2)) { printf (gettext (" [%6tx] \n"), offset); break; @@ -4266,9 +4753,10 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, if (begin == (Dwarf_Addr) -1l) /* Base address entry. */ { - char *b = format_dwarf_addr (dwflmod, address_size, end); + char *b = format_dwarf_addr (dwflmod, address_size, end, end); printf (gettext (" [%6tx] base address %s\n"), offset, b); free (b); + base = end; } else if (begin == 0 && end == 0) /* End of list entry. */ { @@ -4278,8 +4766,10 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, } else { - char *b = format_dwarf_addr (dwflmod, address_size, begin); - char *e = format_dwarf_addr (dwflmod, address_size, end); + char *b = format_dwarf_addr (dwflmod, address_size, base + begin, + begin); + char *e = format_dwarf_addr (dwflmod, address_size, base + end, + end); /* We have an address range entry. */ if (first) /* First address range entry in a list. */ printf (gettext (" [%6tx] %s..%s\n"), offset, b, e); @@ -4438,7 +4928,8 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, // XXX overflow check get_uleb128 (op1, readp); /* Length of DW_FORM_block. */ printf (" def_cfa_expression %" PRIu64 "\n", op1); - print_ops (dwflmod, dbg, 10, 10, version, ptr_size, 0, op1, readp); + print_ops (dwflmod, dbg, 10, 10, version, ptr_size, 0, NULL, + op1, readp); readp += op1; break; case DW_CFA_expression: @@ -4447,7 +4938,8 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, get_uleb128 (op2, readp); /* Length of DW_FORM_block. */ printf (" expression r%" PRIu64 " (%s) \n", op1, regname (op1)); - print_ops (dwflmod, dbg, 10, 10, version, ptr_size, 0, op2, readp); + print_ops (dwflmod, dbg, 10, 10, version, ptr_size, 0, NULL, + op2, readp); readp += op2; break; case DW_CFA_offset_extended_sf: @@ -4490,7 +4982,8 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, get_uleb128 (op2, readp); /* Length of DW_FORM_block. */ printf (" val_expression r%" PRIu64 " (%s)\n", op1, regname (op1)); - print_ops (dwflmod, dbg, 10, 10, version, ptr_size, 0, op2, readp); + print_ops (dwflmod, dbg, 10, 10, version, ptr_size, 0, + NULL, op2, readp); readp += op2; break; case DW_CFA_MIPS_advance_loc8: @@ -4710,7 +5203,18 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, (void) elf_getshdrstrndx (ebl->elf, &shstrndx); const char *scnname = elf_strptr (ebl->elf, shstrndx, shdr->sh_name); - Elf_Data *data = elf_rawdata (scn, NULL); + /* Needed if we find PC-relative addresses. */ + GElf_Addr bias; + if (dwfl_module_getelf (dwflmod, &bias) == NULL) + { + error (0, 0, gettext ("cannot get ELF: %s"), dwfl_errmsg (-1)); + return; + } + + bool is_eh_frame = strcmp (scnname, ".eh_frame") == 0; + Elf_Data *data = (is_eh_frame + ? elf_rawdata (scn, NULL) + : dbg->sectiondata[IDX_debug_frame]); if (unlikely (data == NULL)) { @@ -4718,7 +5222,6 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, scnname, elf_errmsg (-1)); return; } - bool is_eh_frame = strcmp (scnname, ".eh_frame") == 0; if (is_eh_frame) printf (gettext ("\ @@ -4956,8 +5459,21 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, Dwarf_Word address_range = read_ubyte_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 + if necessary to make sure the calculation is done on the + full 64 bit address even when initial_location only holds + the lower 32 bits. */ + Dwarf_Addr pc_start = initial_location; + if (ptr_size == 4) + pc_start = (uint64_t) (int32_t) pc_start; + if ((fde_encoding & 0x70) == DW_EH_PE_pcrel) + pc_start += ((uint64_t) shdr->sh_addr + + (base - (const unsigned char *) data->d_buf) + - bias); + char *a = format_dwarf_addr (dwflmod, cie->address_size, - initial_location); + pc_start, initial_location); printf ("\n [%6tx] FDE length=%" PRIu64 " cie=[%6tx]\n" " CIE_pointer: %" PRIu64 "\n" " initial_location: %s", @@ -5038,12 +5554,13 @@ struct attrcb_args { Dwfl_Module *dwflmod; Dwarf *dbg; + Dwarf_Die *die; int level; bool silent; unsigned int version; unsigned int addrsize; unsigned int offset_size; - Dwarf_Off cu_offset; + struct Dwarf_CU *cu; }; @@ -5085,7 +5602,8 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) dwarf_errmsg (-1)); return DWARF_CB_ABORT; } - char *a = format_dwarf_addr (cbargs->dwflmod, cbargs->addrsize, addr); + char *a = format_dwarf_addr (cbargs->dwflmod, cbargs->addrsize, + addr, addr); printf (" %*s%-20s (%s) %s\n", (int) (level * 2), "", dwarf_attr_name (attr), dwarf_form_name (form), a); @@ -5176,7 +5694,8 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) 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, num); + 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), @@ -5185,7 +5704,8 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) case DW_AT_ranges: notice_listptr (section_ranges, &known_rangelistptr, - cbargs->addrsize, cbargs->offset_size, num); + 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), @@ -5230,14 +5750,46 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) if (cbargs->silent) break; - if (valuestr == NULL) - printf (" %*s%-20s (%s) %" PRIuMAX "\n", - (int) (level * 2), "", dwarf_attr_name (attr), - dwarf_form_name (form), (uintmax_t) num); + /* When highpc is in constant form it is relative to lowpc. + In that case also show the address. */ + Dwarf_Addr highpc; + if (attr == DW_AT_high_pc && dwarf_highpc (cbargs->die, &highpc) == 0) + { + char *a = format_dwarf_addr (cbargs->dwflmod, cbargs->addrsize, + highpc, highpc); + printf (" %*s%-20s (%s) %" PRIuMAX " (%s)\n", + (int) (level * 2), "", dwarf_attr_name (attr), + dwarf_form_name (form), (uintmax_t) num, a); + free (a); + } else - printf (" %*s%-20s (%s) %s (%" PRIuMAX ")\n", - (int) (level * 2), "", dwarf_attr_name (attr), - dwarf_form_name (form), valuestr, (uintmax_t) num); + { + Dwarf_Sword snum = 0; + if (form == DW_FORM_sdata) + if (unlikely (dwarf_formsdata (attrp, &snum) != 0)) + goto attrval_out; + + if (valuestr == NULL) + { + printf (" %*s%-20s (%s)", + (int) (level * 2), "", dwarf_attr_name (attr), + dwarf_form_name (form)); + if (form == DW_FORM_sdata) + printf (" %" PRIdMAX "\n", (intmax_t) snum); + else + printf (" %" PRIuMAX "\n", (uintmax_t) num); + } + else + { + printf (" %*s%-20s (%s) %s", + (int) (level * 2), "", dwarf_attr_name (attr), + dwarf_form_name (form), valuestr); + if (form == DW_FORM_sdata) + printf (" (%" PRIdMAX ")\n", (intmax_t) snum); + else + printf (" (%" PRIuMAX ")\n", (uintmax_t) num); + } + } break; case DW_FORM_flag: @@ -5312,7 +5864,7 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) print_ops (cbargs->dwflmod, cbargs->dbg, 12 + level * 2, 12 + level * 2, cbargs->version, cbargs->addrsize, cbargs->offset_size, - block.length, block.data); + attrp->cu, block.length, block.data); break; } break; @@ -5394,8 +5946,7 @@ print_debug_units (Dwfl_Module *dwflmod, .silent = silent, .version = version, .addrsize = addrsize, - .offset_size = offsize, - .cu_offset = offset + .offset_size = offsize }; offset += cuhl; @@ -5412,6 +5963,8 @@ print_debug_units (Dwfl_Module *dwflmod, goto do_return; } + args.cu = dies[0].cu; + do { offset = dwarf_dieoffset (&dies[level]); @@ -5440,6 +5993,7 @@ print_debug_units (Dwfl_Module *dwflmod, /* Print the attribute values. */ args.level = level; + args.die = &dies[level]; (void) dwarf_getattrs (&dies[level], attr_callback, &args, 0); /* Make room for the next level's DIE. */ @@ -5499,9 +6053,95 @@ print_debug_types_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, static void +print_decoded_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, + Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) +{ + printf (gettext ("\ +\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n\n"), + elf_ndxscn (scn), section_name (ebl, ehdr, shdr), + (uint64_t) shdr->sh_offset); + + size_t address_size + = elf_getident (ebl->elf, NULL)[EI_CLASS] == ELFCLASS32 ? 4 : 8; + + Dwarf_Off cuoffset; + Dwarf_Off ncuoffset = 0; + size_t hsize; + while (dwarf_nextcu (dbg, cuoffset = ncuoffset, &ncuoffset, &hsize, + NULL, NULL, NULL) == 0) + { + Dwarf_Die cudie; + if (dwarf_offdie (dbg, cuoffset + hsize, &cudie) == NULL) + continue; + + size_t nlines; + Dwarf_Lines *lines; + if (dwarf_getsrclines (&cudie, &lines, &nlines) != 0) + continue; + + printf (" CU [%" PRIx64 "] %s\n", + dwarf_dieoffset (&cudie), dwarf_diename (&cudie)); + printf (" line:col SBPE* disc isa op address" + " (Statement Block Prologue Epilogue *End)\n"); + const char *last_file = ""; + for (size_t n = 0; n < nlines; n++) + { + Dwarf_Line *line = dwarf_onesrcline (lines, n); + Dwarf_Word mtime, length; + const char *file = dwarf_linesrc (line, &mtime, &length); + if (strcmp (last_file, file) != 0) + { + printf (" %s (mtime: %" PRIu64 ", length: %" PRIu64 ")\n", + file, mtime, length); + last_file = file; + } + + int lineno, colno; + bool statement, endseq, block, prologue_end, epilogue_begin; + unsigned int lineop, isa, disc; + Dwarf_Addr address; + dwarf_lineaddr (line, &address); + dwarf_lineno (line, &lineno); + dwarf_linecol (line, &colno); + dwarf_lineop_index (line, &lineop); + dwarf_linebeginstatement (line, &statement); + dwarf_lineendsequence (line, &endseq); + dwarf_lineblock (line, &block); + dwarf_lineprologueend (line, &prologue_end); + dwarf_lineepiloguebegin (line, &epilogue_begin); + dwarf_lineisa (line, &isa); + dwarf_linediscriminator (line, &disc); + + /* End sequence is special, it is one byte past. */ + char *a = format_dwarf_addr (dwflmod, address_size, + address - (endseq ? 1 : 0), address); + printf (" %4d:%-3d %c%c%c%c%c %4d %3d %2d %s\n", + lineno, colno, + (statement ? 'S' : ' '), + (block ? 'B' : ' '), + (prologue_end ? 'P' : ' '), + (epilogue_begin ? 'E' : ' '), + (endseq ? '*' : ' '), + disc, isa, lineop, a); + free (a); + + if (endseq) + printf("\n"); + } + } +} + + +static void print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) { + if (decodedline) + { + print_decoded_line_section (dwflmod, ebl, ehdr, scn, shdr, dbg); + return; + } + printf (gettext ("\ \nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), elf_ndxscn (scn), section_name (ebl, ehdr, shdr), @@ -5512,7 +6152,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, /* There is no functionality in libdw to read the information in the way it is represented here. Hardcode the decoder. */ - Elf_Data *data = elf_getdata (scn, NULL); + Elf_Data *data = dbg->sectiondata[IDX_debug_line]; if (unlikely (data == NULL || data->d_buf == NULL)) { error (0, 0, gettext ("cannot get line data section data: %s"), @@ -5746,7 +6386,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, line += line_increment; advance_pc ((opcode - opcode_base) / line_range); - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, address); if (show_op_index) printf (gettext ("\ special opcode %u: address+%u = %s, op_index = %u, line%+d = %zu\n"), @@ -5794,7 +6434,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, else address = read_8ubyte_unaligned_inc (dbg, linep); { - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, address); printf (gettext (" set address to %s\n"), a); free (a); } @@ -5855,7 +6495,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, get_uleb128 (u128, linep); advance_pc (u128); { - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, address); if (show_op_index) printf (gettext ("\ advance address by %u to %s, op_index to %u\n"), @@ -5910,7 +6550,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, /* Takes no argument. */ advance_pc ((255 - opcode_base) / line_range); { - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, address); if (show_op_index) printf (gettext ("\ advance address by constant %u to %s, op_index to %u\n"), @@ -5933,7 +6573,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, address += u128; op_index = 0; { - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, address); printf (gettext ("\ advance address by fixed value %u to %s\n"), u128, a); @@ -5994,7 +6634,7 @@ print_debug_loc_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) { - Elf_Data *data = elf_rawdata (scn, NULL); + Elf_Data *data = dbg->sectiondata[IDX_debug_loc]; if (unlikely (data == NULL)) { @@ -6015,6 +6655,8 @@ print_debug_loc_section (Dwfl_Module *dwflmod, uint_fast8_t offset_size = 4; bool first = true; + struct Dwarf_CU *cu = NULL; + Dwarf_Addr base = 0; unsigned char *readp = data->d_buf; unsigned char *const endp = (unsigned char *) data->d_buf + data->d_size; while (readp < endp) @@ -6022,11 +6664,11 @@ print_debug_loc_section (Dwfl_Module *dwflmod, ptrdiff_t offset = readp - (unsigned char *) data->d_buf; if (first && skip_listptr_hole (&known_loclistptr, &listptr_idx, - &address_size, &offset_size, - offset, &readp, endp)) + &address_size, &offset_size, &base, + &cu, offset, &readp, endp)) continue; - if (unlikely (data->d_size - offset < address_size * 2)) + if (unlikely (data->d_size - offset < (size_t) address_size * 2)) { printf (gettext (" [%6tx] \n"), offset); break; @@ -6049,9 +6691,10 @@ print_debug_loc_section (Dwfl_Module *dwflmod, if (begin == (Dwarf_Addr) -1l) /* Base address entry. */ { - char *b = format_dwarf_addr (dwflmod, address_size, end); + char *b = format_dwarf_addr (dwflmod, address_size, end, end); printf (gettext (" [%6tx] base address %s\n"), offset, b); free (b); + base = end; } else if (begin == 0 && end == 0) /* End of list entry. */ { @@ -6064,8 +6707,10 @@ print_debug_loc_section (Dwfl_Module *dwflmod, /* We have a location expression entry. */ uint_fast16_t len = read_2ubyte_unaligned_inc (dbg, readp); - char *b = format_dwarf_addr (dwflmod, address_size, begin); - char *e = format_dwarf_addr (dwflmod, address_size, end); + char *b = format_dwarf_addr (dwflmod, address_size, base + begin, + begin); + char *e = format_dwarf_addr (dwflmod, address_size, base + end, + end); if (first) /* First entry in a list. */ printf (gettext (" [%6tx] %s..%s"), offset, b, e); @@ -6082,7 +6727,7 @@ print_debug_loc_section (Dwfl_Module *dwflmod, } print_ops (dwflmod, dbg, 1, 18 + (address_size * 4), - 3 /*XXX*/, address_size, offset_size, len, readp); + 3 /*XXX*/, address_size, offset_size, cu, len, readp); first = false; readp += len; @@ -6126,7 +6771,7 @@ print_debug_macinfo_section (Dwfl_Module *dwflmod __attribute__ ((unused)), /* There is no function in libdw to iterate over the raw content of the section but it is easy enough to do. */ - Elf_Data *data = elf_getdata (scn, NULL); + Elf_Data *data = dbg->sectiondata[IDX_debug_macinfo]; if (unlikely (data == NULL || data->d_buf == NULL)) { error (0, 0, gettext ("cannot get macro information section data: %s"), @@ -6280,7 +6925,7 @@ print_debug_macro_section (Dwfl_Module *dwflmod __attribute__ ((unused)), (uint64_t) shdr->sh_offset); putc_unlocked ('\n', stdout); - Elf_Data *data = elf_getdata (scn, NULL); + Elf_Data *data = dbg->sectiondata[IDX_debug_macro]; if (unlikely (data == NULL || data->d_buf == NULL)) { error (0, 0, gettext ("cannot get macro information section data: %s"), @@ -6365,6 +7010,7 @@ print_debug_macro_section (Dwfl_Module *dwflmod __attribute__ ((unused)), } const unsigned char *vendor[DW_MACRO_GNU_hi_user - DW_MACRO_GNU_lo_user]; + memset (vendor, 0, sizeof vendor); if (flag & 0x04) { // 1 byte length, for each item, 1 byte opcode, uleb128 number @@ -7049,8 +7695,10 @@ print_gdb_index_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, // The only difference between version 4 and version 5 is the // hash used for generating the table. Version 6 contains symbols - // for inlined functions, older versions didn't. - if (vers < 4 || vers > 7) + // for inlined functions, older versions didn't. Version 7 adds + // symbol kinds. Version 8 just indicates that it correctly includes + // TUs for symbols. + if (vers < 4 || vers > 8) { printf (gettext (" unknown version, cannot parse section\n")); return; @@ -7160,10 +7808,12 @@ print_gdb_index_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, uint32_t idx = read_4ubyte_unaligned (dbg, readp); readp += 4; - char *l = format_dwarf_addr (dwflmod, 8, low); - char *h = format_dwarf_addr (dwflmod, 8, high - 1); + char *l = format_dwarf_addr (dwflmod, 8, low, low); + char *h = format_dwarf_addr (dwflmod, 8, high - 1, high); printf (" [%4zu] %s..%s, CU index: %5" PRId32 "\n", n, l, h, idx); + free (l); + free (h); n++; } @@ -7205,7 +7855,7 @@ print_gdb_index_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, cu_kind = read_4ubyte_unaligned (dbg, readcus); cu = cu_kind & ((1 << 24) - 1); kind = (cu_kind >> 28) & 7; - is_static = cu_kind & (1 << 31); + is_static = cu_kind & (1U << 31); if (cu > cu_nr - 1) printf ("%" PRId32 "T", cu - (uint32_t) cu_nr); else @@ -7312,8 +7962,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 @@ -7337,24 +7989,35 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) #define ITEM_INDENT 4 -#define ITEM_WRAP_COLUMN 150 -#define REGISTER_WRAP_COLUMN 75 +#define WRAP_COLUMN 75 + +/* Print "NAME: FORMAT", wrapping when output text would make the line + exceed WRAP_COLUMN. Unpadded numbers look better for the core items + but this function is also used for registers which should be printed + aligned. Fortunately registers output uses fixed fields width (such + as %11d) for the alignment. + + Line breaks should not depend on the particular values although that + may happen in some cases of the core items. */ -/* Print "NAME: FORMAT", wrapping when FORMAT_MAX chars of FORMAT would - make the line exceed ITEM_WRAP_COLUMN. Unpadded numbers look better - for the core items. But we do not want the line breaks to depend on - the particular values. */ static unsigned int -__attribute__ ((format (printf, 7, 8))) +__attribute__ ((format (printf, 6, 7))) print_core_item (unsigned int colno, char sep, unsigned int wrap, - size_t name_width, const char *name, - size_t format_max, const char *format, ...) + size_t name_width, const char *name, const char *format, ...) { size_t len = strlen (name); if (name_width < len) name_width = len; - size_t n = name_width + sizeof ": " - 1 + format_max; + char *out; + va_list ap; + va_start (ap, format); + int out_len = vasprintf (&out, format, ap); + va_end (ap); + if (out_len == -1) + error (EXIT_FAILURE, 0, _("memory exhausted")); + + size_t n = name_width + sizeof ": " - 1 + out_len; if (colno == 0) { @@ -7372,12 +8035,9 @@ print_core_item (unsigned int colno, char sep, unsigned int wrap, colno = ITEM_INDENT + n; } - printf ("%s: %*s", name, (int) (name_width - len), ""); + printf ("%s: %*s%s", name, (int) (name_width - len), "", out); - va_list ap; - va_start (ap, format); - vprintf (format, ap); - va_end (ap); + free (out); return colno; } @@ -7420,14 +8080,14 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, uint_fast16_t count = item->count ?: 1; #define TYPES \ - DO_TYPE (BYTE, Byte, "0x%.2" PRIx8, "%" PRId8, 4); \ - DO_TYPE (HALF, Half, "0x%.4" PRIx16, "%" PRId16, 6); \ - DO_TYPE (WORD, Word, "0x%.8" PRIx32, "%" PRId32, 11); \ - DO_TYPE (SWORD, Sword, "%" PRId32, "%" PRId32, 11); \ - DO_TYPE (XWORD, Xword, "0x%.16" PRIx64, "%" PRId64, 20); \ - DO_TYPE (SXWORD, Sxword, "%" PRId64, "%" PRId64, 20) - -#define DO_TYPE(NAME, Name, hex, dec, max) GElf_##Name Name[count] + DO_TYPE (BYTE, Byte, "0x%.2" PRIx8, "%" PRId8); \ + DO_TYPE (HALF, Half, "0x%.4" PRIx16, "%" PRId16); \ + DO_TYPE (WORD, Word, "0x%.8" PRIx32, "%" PRId32); \ + DO_TYPE (SWORD, Sword, "%" PRId32, "%" PRId32); \ + DO_TYPE (XWORD, Xword, "0x%.16" PRIx64, "%" PRId64); \ + DO_TYPE (SXWORD, Sxword, "%" PRId64, "%" PRId64) + +#define DO_TYPE(NAME, Name, hex, dec) GElf_##Name Name[count] union { TYPES; } value; #undef DO_TYPE @@ -7459,10 +8119,10 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, assert (count == 1); switch (type) { -#define DO_TYPE(NAME, Name, hex, dec, max) \ +#define DO_TYPE(NAME, Name, hex, dec) \ case ELF_T_##NAME: \ - colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, \ - 0, item->name, max, dec, value.Name[0]); \ + colno = print_core_item (colno, ',', WRAP_COLUMN, \ + 0, item->name, dec, value.Name[0]); \ break TYPES; #undef DO_TYPE @@ -7475,10 +8135,10 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, assert (count == 1); switch (type) { -#define DO_TYPE(NAME, Name, hex, dec, max) \ +#define DO_TYPE(NAME, Name, hex, dec) \ case ELF_T_##NAME: \ - colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, \ - 0, item->name, max, hex, value.Name[0]); \ + colno = print_core_item (colno, ',', WRAP_COLUMN, \ + 0, item->name, hex, value.Name[0]); \ break TYPES; #undef DO_TYPE @@ -7498,7 +8158,7 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, const unsigned int bias = item->format == 'b'; { - char printed[(negate ? nbits - pop : pop) * 16]; + char printed[(negate ? nbits - pop : pop) * 16 + 1]; char *p = printed; *p = '\0'; @@ -7515,19 +8175,19 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, } unsigned int lastbit = 0; + unsigned int run = 0; for (const unsigned int *i = data; (void *) i < data + count * size; ++i) { unsigned int bit = ((void *) i - data) * 8; unsigned int w = negate ? ~*i : *i; - unsigned int run = 0; while (w != 0) { int n = ffs (w); w >>= n; bit += n; - if (lastbit + 1 == bit) + if (lastbit != 0 && lastbit + 1 == bit) ++run; else { @@ -7543,11 +8203,10 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, lastbit = bit; } } - if (lastbit > 0 && lastbit + 1 != nbits) - p += sprintf (p, "-%u", nbits - bias); + if (lastbit > 0 && run > 0 && lastbit + 1 != nbits) + p += sprintf (p, "-%u", lastbit - bias); - colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, 0, item->name, - 4 + nbits * 4, + colno = print_core_item (colno, ',', WRAP_COLUMN, 0, item->name, negate ? "~<%s>" : "<%s>", printed); } break; @@ -7557,14 +8216,12 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, assert (count == 2); Dwarf_Word sec; Dwarf_Word usec; - size_t maxfmt = 7; switch (type) { -#define DO_TYPE(NAME, Name, hex, dec, max) \ +#define DO_TYPE(NAME, Name, hex, dec) \ case ELF_T_##NAME: \ sec = value.Name[0]; \ usec = value.Name[1]; \ - maxfmt += max; \ break TYPES; #undef DO_TYPE @@ -7587,19 +8244,19 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, else usec &= UINT32_MAX; } - colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, 0, item->name, - maxfmt, "%" PRIu64 ".%.6" PRIu64, sec, usec); + colno = print_core_item (colno, ',', WRAP_COLUMN, 0, item->name, + "%" PRIu64 ".%.6" PRIu64, sec, usec); break; case 'c': assert (count == 1); - colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, 0, item->name, - 1, "%c", value.Byte[0]); + colno = print_core_item (colno, ',', WRAP_COLUMN, 0, item->name, + "%c", value.Byte[0]); break; case 's': - colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, 0, item->name, - count, "%.*s", (int) count, value.Byte); + colno = print_core_item (colno, ',', WRAP_COLUMN, 0, item->name, + "%.*s", (int) count, value.Byte); break; case '\n': @@ -7626,7 +8283,10 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, s = eol + 1; } - colno = ITEM_WRAP_COLUMN; + colno = WRAP_COLUMN; + break; + + case 'h': break; default: @@ -7675,6 +8335,24 @@ handle_core_items (Elf *core, const void *desc, size_t descsz, { if (nitems == 0) return 0; + unsigned int colno = 0; + + /* FORMAT '\n' makes sense to be present only as a single item as it + processes all the data of a note. FORMATs 'b' and 'B' have a special case + if present as a single item but they can be also processed with other + items below. */ + if (nitems == 1 && (items[0].format == '\n' || items[0].format == 'b' + || items[0].format == 'B')) + { + assert (items[0].offset == 0); + size_t size = descsz; + colno = handle_core_item (core, items, desc, colno, &size); + /* If SIZE is not zero here there is some remaining data. But we do not + know how to process it anyway. */ + return colno; + } + for (size_t i = 0; i < nitems; ++i) + assert (items[i].format != '\n'); /* Sort to collect the groups together. */ const Ebl_Core_Item *sorted_items[nitems]; @@ -7693,19 +8371,7 @@ handle_core_items (Elf *core, const void *desc, size_t descsz, qsort (groups, ngroups, sizeof groups[0], &compare_core_item_groups); /* Write out all the groups. */ - unsigned int colno = 0; - const void *last = desc; - if (nitems == 1) - { - size_t size = descsz; - colno = handle_core_item (core, sorted_items[0], desc, colno, &size); - if (size == 0) - return colno; - desc += descsz - size; - descsz = size; - } - do { for (size_t i = 0; i < ngroups; ++i) @@ -7718,7 +8384,7 @@ handle_core_items (Elf *core, const void *desc, size_t descsz, colno = handle_core_item (core, *item, desc, colno, NULL); /* Force a line break at the end of the group. */ - colno = ITEM_WRAP_COLUMN; + colno = WRAP_COLUMN; } if (descsz == 0) @@ -7786,12 +8452,12 @@ handle_core_register (Ebl *ebl, Elf *core, int maxregname, register_info (ebl, reg, regloc, name, &bits, &type); #define TYPES \ - BITS (8, BYTE, "%4" PRId8, "0x%.2" PRIx8, 4); \ - BITS (16, HALF, "%6" PRId16, "0x%.4" PRIx16, 6); \ - BITS (32, WORD, "%11" PRId32, " 0x%.8" PRIx32, 11); \ - BITS (64, XWORD, "%20" PRId64, " 0x%.16" PRIx64, 20) + BITS (8, BYTE, "%4" PRId8, "0x%.2" PRIx8); \ + BITS (16, HALF, "%6" PRId16, "0x%.4" PRIx16); \ + BITS (32, WORD, "%11" PRId32, " 0x%.8" PRIx32); \ + BITS (64, XWORD, "%20" PRId64, " 0x%.16" PRIx64) -#define BITS(bits, xtype, sfmt, ufmt, max) \ +#define BITS(bits, xtype, sfmt, ufmt) \ uint##bits##_t b##bits; int##bits##_t b##bits##s union { TYPES; uint64_t b128[2]; } value; #undef BITS @@ -7803,17 +8469,17 @@ handle_core_register (Ebl *ebl, Elf *core, int maxregname, case DW_ATE_address: switch (bits) { -#define BITS(bits, xtype, sfmt, ufmt, max) \ +#define BITS(bits, xtype, sfmt, ufmt) \ case bits: \ desc = convert (core, ELF_T_##xtype, 1, &value, desc, 0); \ if (type == DW_ATE_signed) \ - colno = print_core_item (colno, ' ', REGISTER_WRAP_COLUMN, \ + colno = print_core_item (colno, ' ', WRAP_COLUMN, \ maxregname, name, \ - max, sfmt, value.b##bits##s); \ + sfmt, value.b##bits##s); \ else \ - colno = print_core_item (colno, ' ', REGISTER_WRAP_COLUMN, \ + colno = print_core_item (colno, ' ', WRAP_COLUMN, \ maxregname, name, \ - max, ufmt, value.b##bits); \ + ufmt, value.b##bits); \ break TYPES; @@ -7822,9 +8488,9 @@ handle_core_register (Ebl *ebl, Elf *core, int maxregname, assert (type == DW_ATE_unsigned); desc = convert (core, ELF_T_XWORD, 2, &value, desc, 0); int be = elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB; - colno = print_core_item (colno, ' ', REGISTER_WRAP_COLUMN, + colno = print_core_item (colno, ' ', WRAP_COLUMN, maxregname, name, - 34, "0x%.16" PRIx64 "%.16" PRIx64, + "0x%.16" PRIx64 "%.16" PRIx64, value.b128[!be], value.b128[be]); break; @@ -7853,9 +8519,8 @@ handle_core_register (Ebl *ebl, Elf *core, int maxregname, *h++ = "0123456789abcdef"[bytes[idx] >> 4]; *h++ = "0123456789abcdef"[bytes[idx] & 0xf]; } - colno = print_core_item (colno, ' ', REGISTER_WRAP_COLUMN, - maxregname, name, - 2 + sizeof hex - 1, "0x%s", hex); + colno = print_core_item (colno, ' ', WRAP_COLUMN, + maxregname, name, "0x%s", hex); break; } desc += regloc->pad; @@ -7994,7 +8659,7 @@ handle_core_registers (Ebl *ebl, Elf *core, const void *desc, reg->regloc, desc, colno); /* Force a line break at the end of the group. */ - colno = REGISTER_WRAP_COLUMN; + colno = WRAP_COLUMN; } return colno; @@ -8072,6 +8737,151 @@ handle_auxv_note (Ebl *ebl, Elf *core, GElf_Word descsz, GElf_Off desc_pos) } } +static bool +buf_has_data (unsigned char const *ptr, unsigned char const *end, size_t sz) +{ + return ptr < end && (size_t) (end - ptr) >= sz; +} + +static bool +buf_read_int (Elf *core, unsigned char const **ptrp, unsigned char const *end, + int *retp) +{ + if (! buf_has_data (*ptrp, end, 4)) + return false; + + *ptrp = convert (core, ELF_T_WORD, 1, retp, *ptrp, 4); + return true; +} + +static bool +buf_read_ulong (Elf *core, unsigned char const **ptrp, unsigned char const *end, + uint64_t *retp) +{ + size_t sz = gelf_fsize (core, ELF_T_ADDR, 1, EV_CURRENT); + if (! buf_has_data (*ptrp, end, sz)) + return false; + + union + { + uint64_t u64; + uint32_t u32; + } u; + + *ptrp = convert (core, ELF_T_ADDR, 1, &u, *ptrp, sz); + + if (sz == 4) + *retp = u.u32; + else + *retp = u.u64; + return true; +} + +static void +handle_siginfo_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos) +{ + Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_BYTE); + if (data == NULL) + error (EXIT_FAILURE, 0, + gettext ("cannot convert core note data: %s"), elf_errmsg (-1)); + + unsigned char const *ptr = data->d_buf; + unsigned char const *const end = data->d_buf + data->d_size; + + /* Siginfo head is three ints: signal number, error number, origin + code. */ + int si_signo, si_errno, si_code; + if (! buf_read_int (core, &ptr, end, &si_signo) + || ! buf_read_int (core, &ptr, end, &si_errno) + || ! buf_read_int (core, &ptr, end, &si_code)) + { + fail: + printf (" Not enough data in NT_SIGINFO note.\n"); + return; + } + + /* Next is a pointer-aligned union of structures. On 64-bit + machines, that implies a word of padding. */ + if (gelf_getclass (core) == ELFCLASS64) + ptr += 4; + + printf (" si_signo: %d, si_errno: %d, si_code: %d\n", + si_signo, si_errno, si_code); + + if (si_code > 0) + switch (si_signo) + { + case SIGILL: + case SIGFPE: + case SIGSEGV: + case SIGBUS: + { + uint64_t addr; + if (! buf_read_ulong (core, &ptr, end, &addr)) + goto fail; + printf (" fault address: %#" PRIx64 "\n", addr); + break; + } + default: + ; + } + else if (si_code == SI_USER) + { + int pid, uid; + if (! buf_read_int (core, &ptr, end, &pid) + || ! buf_read_int (core, &ptr, end, &uid)) + goto fail; + printf (" sender PID: %d, sender UID: %d\n", pid, uid); + } +} + +static void +handle_file_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos) +{ + Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_BYTE); + if (data == NULL) + error (EXIT_FAILURE, 0, + gettext ("cannot convert core note data: %s"), elf_errmsg (-1)); + + unsigned char const *ptr = data->d_buf; + unsigned char const *const end = data->d_buf + data->d_size; + + uint64_t count, page_size; + if (! buf_read_ulong (core, &ptr, end, &count) + || ! buf_read_ulong (core, &ptr, end, &page_size)) + { + fail: + printf (" Not enough data in NT_FILE note.\n"); + return; + } + + /* Where file names are stored. */ + unsigned char const *const fstart + = ptr + 3 * count * gelf_fsize (core, ELF_T_ADDR, 1, EV_CURRENT); + char const *fptr = (char *) fstart; + + printf (" %" PRId64 " files:\n", count); + for (uint64_t i = 0; i < count; ++i) + { + uint64_t mstart, mend, moffset; + if (! buf_read_ulong (core, &ptr, fstart, &mstart) + || ! buf_read_ulong (core, &ptr, fstart, &mend) + || ! buf_read_ulong (core, &ptr, fstart, &moffset)) + goto fail; + + const char *fnext = memchr (fptr, '\0', (char *) end - fptr); + if (fnext == NULL) + goto fail; + + int ct = printf (" %08" PRIx64 "-%08" PRIx64 + " %08" PRIx64 " %" PRId64, + mstart, mend, moffset * page_size, mend - mstart); + printf ("%*s%s\n", ct > 50 ? 3 : 53 - ct, "", fptr); + + fptr = fnext + 1; + } +} + static void handle_core_note (Ebl *ebl, const GElf_Nhdr *nhdr, const char *name, const void *desc) @@ -8145,6 +8955,22 @@ handle_notes_data (Ebl *ebl, const GElf_Ehdr *ehdr, && !memcmp (name, "CORE", 4)) handle_auxv_note (ebl, ebl->elf, nhdr.n_descsz, start + desc_offset); + else if (nhdr.n_namesz == 5 && strcmp (name, "CORE") == 0) + switch (nhdr.n_type) + { + case NT_SIGINFO: + handle_siginfo_note (ebl->elf, nhdr.n_descsz, + start + desc_offset); + break; + + case NT_FILE: + handle_file_note (ebl->elf, nhdr.n_descsz, + start + desc_offset); + break; + + default: + handle_core_note (ebl, &nhdr, name, desc); + } else handle_core_note (ebl, &nhdr, name, desc); } diff --git a/src/size.c b/src/size.c index dfa46b1..9db55c8 100644 --- a/src/size.c +++ b/src/size.c @@ -1,5 +1,5 @@ /* Print size information from ELF file. - Copyright (C) 2000-2007,2009,2012 Red Hat, Inc. + Copyright (C) 2000-2007,2009,2012,2014 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2000. @@ -441,14 +441,6 @@ show_sysv (Elf *elf, const char *prefix, const char *fname, digits - 2, sgettext ("sysv|size"), digits, sgettext ("sysv|addr")); - const char *fmtstr; - if (radix == radix_hex) - fmtstr = "%-*s %*" PRIx64 " %*" PRIx64 "\n"; - else if (radix == radix_decimal) - fmtstr = "%-*s %*" PRId64 " %*" PRId64 "\n"; - else - fmtstr = "%-*s %*" PRIo64 " %*" PRIo64 "\n"; - /* Iterate over all sections. */ GElf_Off total = 0; while ((scn = elf_nextscn (elf, scn)) != NULL) @@ -459,7 +451,11 @@ show_sysv (Elf *elf, const char *prefix, const char *fname, /* Ignore all sections which are not used at runtime. */ if ((shdr->sh_flags & SHF_ALLOC) != 0) { - printf (fmtstr, + printf ((radix == radix_hex + ? "%-*s %*" PRIx64 " %*" PRIx64 "\n" + : (radix == radix_decimal + ? "%-*s %*" PRId64 " %*" PRId64 "\n" + : "%-*s %*" PRIo64 " %*" PRIo64 "\n")), maxlen, elf_strptr (elf, shstrndx, shdr->sh_name), digits - 2, shdr->sh_size, digits, shdr->sh_addr); @@ -490,14 +486,6 @@ show_sysv_one_line (Elf *elf) error (EXIT_FAILURE, 0, gettext ("cannot get section header string table index")); - const char *fmtstr; - if (radix == radix_hex) - fmtstr = "%" PRIx64 "(%s)"; - else if (radix == radix_decimal) - fmtstr = "%" PRId64 "(%s)"; - else - fmtstr = "%" PRIo64 "(%s)"; - /* Iterate over all sections. */ GElf_Off total = 0; bool first = true; @@ -515,8 +503,10 @@ show_sysv_one_line (Elf *elf) fputs_unlocked (" + ", stdout); first = false; - printf (fmtstr, shdr->sh_size, - elf_strptr (elf, shstrndx, shdr->sh_name)); + printf ((radix == radix_hex ? "%" PRIx64 "(%s)" + : (radix == radix_decimal ? "%" PRId64 "(%s)" + : "%" PRIo64 "(%s)")), + shdr->sh_size, elf_strptr (elf, shstrndx, shdr->sh_name)); total += shdr->sh_size; } diff --git a/src/stack.c b/src/stack.c new file mode 100644 index 0000000..c277dfd --- /dev/null +++ b/src/stack.c @@ -0,0 +1,760 @@ +/* Unwinding of frames like gstack/pstack. + 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 + 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 . */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include ELFUTILS_HEADER(dwfl) + +#include +#include + +/* Name and version of program. */ +static void print_version (FILE *stream, struct argp_state *state); +ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + +/* Bug report address. */ +ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + +/* non-printable argp options. */ +#define OPT_DEBUGINFO 0x100 +#define OPT_COREFILE 0x101 + +static bool show_activation = false; +static bool show_module = false; +static bool show_build_id = false; +static bool show_source = false; +static bool show_one_tid = false; +static bool show_quiet = false; +static bool show_raw = false; +static bool show_modules = false; +static bool show_debugname = false; +static bool show_inlines = false; + +static int maxframes = 256; + +struct frame +{ + Dwarf_Addr pc; + bool isactivation; +}; + +struct frames +{ + int frames; + int allocated; + struct frame *frame; +}; + +static Dwfl *dwfl = NULL; +static pid_t pid = 0; +static int core_fd = -1; +static Elf *core = NULL; +static const char *exec = NULL; +static char *debuginfo_path = NULL; + +static const Dwfl_Callbacks proc_callbacks = + { + .find_elf = dwfl_linux_proc_find_elf, + .find_debuginfo = dwfl_standard_find_debuginfo, + .debuginfo_path = &debuginfo_path, + }; + +static const Dwfl_Callbacks core_callbacks = + { + .find_elf = dwfl_build_id_find_elf, + .find_debuginfo = dwfl_standard_find_debuginfo, + .debuginfo_path = &debuginfo_path, + }; + +#ifdef USE_DEMANGLE +static size_t demangle_buffer_len = 0; +static char *demangle_buffer = NULL; +#endif + +/* Whether any frames have been shown at all. Determines exit status. */ +static bool frames_shown = false; + +/* Program exit codes. All frames shown without any errors is GOOD. + Some frames shown with some non-fatal errors is an ERROR. A fatal + error or no frames shown at all is BAD. A command line USAGE exit + is generated by argp_error. */ +#define EXIT_OK 0 +#define EXIT_ERROR 1 +#define EXIT_BAD 2 +#define EXIT_USAGE 64 + +static int +get_addr_width (Dwfl_Module *mod) +{ + // Try to find the address wide if possible. + static int width = 0; + if (width == 0 && mod) + { + Dwarf_Addr bias; + Elf *elf = dwfl_module_getelf (mod, &bias); + if (elf) + { + GElf_Ehdr ehdr_mem; + GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); + if (ehdr) + width = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 8 : 16; + } + } + if (width == 0) + width = 16; + + return width; +} + +static int +module_callback (Dwfl_Module *mod, void **userdata __attribute__((unused)), + const char *name, Dwarf_Addr start, + void *arg __attribute__((unused))) +{ + /* Forces resolving of main elf and debug files. */ + Dwarf_Addr bias; + Elf *elf = dwfl_module_getelf (mod, &bias); + Dwarf *dwarf = dwfl_module_getdwarf (mod, &bias); + + Dwarf_Addr end; + const char *mainfile; + const char *debugfile; + const char *modname = dwfl_module_info (mod, NULL, NULL, &end, NULL, + NULL, &mainfile, &debugfile); + assert (strcmp (modname, name) == 0); + + int width = get_addr_width (mod); + printf ("0x%0*" PRIx64 "-0x%0*" PRIx64 " %s\n", + width, start, width, end, basename (name)); + + const unsigned char *id; + GElf_Addr id_vaddr; + int id_len = dwfl_module_build_id (mod, &id, &id_vaddr); + if (id_len > 0) + { + printf (" ["); + do + printf ("%02" PRIx8, *id++); + while (--id_len > 0); + printf ("]\n"); + } + + if (elf != NULL) + printf (" %s\n", mainfile != NULL ? mainfile : "-"); + if (dwarf != NULL) + printf (" %s\n", debugfile != NULL ? debugfile : "-"); + + return DWARF_CB_OK; +} + +static int +frame_callback (Dwfl_Frame *state, void *arg) +{ + struct frames *frames = (struct frames *) arg; + int nr = frames->frames; + if (! dwfl_frame_pc (state, &frames->frame[nr].pc, + &frames->frame[nr].isactivation)) + return -1; + + frames->frames++; + if (frames->frames == maxframes) + return DWARF_CB_ABORT; + + if (frames->frames == frames->allocated) + { + frames->allocated *= 2; + frames->frame = realloc (frames->frame, + sizeof (struct frame) * frames->allocated); + if (frames->frame == NULL) + error (EXIT_BAD, errno, "realloc frames.frame"); + } + + return DWARF_CB_OK; +} + +static const char* +die_name (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 void +print_frame (int nr, Dwarf_Addr pc, bool isactivation, + Dwarf_Addr pc_adjusted, Dwfl_Module *mod, + const char *symname, Dwarf_Die *cudie, + Dwarf_Die *die) +{ + int width = get_addr_width (mod); + printf ("#%-2u 0x%0*" PRIx64, nr, width, (uint64_t) pc); + + if (show_activation) + printf ("%4s", ! isactivation ? "- 1" : ""); + + if (symname != NULL) + { +#ifdef USE_DEMANGLE + // Require GNU v3 ABI by the "_Z" prefix. + if (! show_raw && symname[0] == '_' && symname[1] == 'Z') + { + int status = -1; + char *dsymname = __cxa_demangle (symname, demangle_buffer, + &demangle_buffer_len, &status); + if (status == 0) + symname = demangle_buffer = dsymname; + } +#endif + printf (" %s", symname); + } + + const char* fname; + Dwarf_Addr start; + fname = dwfl_module_info(mod, NULL, &start, + NULL, NULL, NULL, NULL, NULL); + if (show_module) + { + if (fname != NULL) + printf (" - %s", fname); + } + + if (show_build_id) + { + const unsigned char *id; + GElf_Addr id_vaddr; + int id_len = dwfl_module_build_id (mod, &id, &id_vaddr); + if (id_len > 0) + { + printf ("\n ["); + do + printf ("%02" PRIx8, *id++); + while (--id_len > 0); + printf ("]@0x%0" PRIx64 "+0x%" PRIx64, + start, pc_adjusted - start); + } + } + + if (show_source) + { + int line, col; + const char* sname; + line = col = -1; + sname = NULL; + if (die != NULL) + { + Dwarf_Files *files; + if (dwarf_getsrcfiles (cudie, &files, NULL) == 0) + { + Dwarf_Attribute attr; + Dwarf_Word val; + if (dwarf_formudata (dwarf_attr (die, DW_AT_call_file, &attr), + &val) == 0) + { + sname = dwarf_filesrc (files, val, NULL, NULL); + if (dwarf_formudata (dwarf_attr (die, DW_AT_call_line, + &attr), &val) == 0) + { + line = val; + if (dwarf_formudata (dwarf_attr (die, DW_AT_call_column, + &attr), &val) == 0) + col = val; + } + } + } + } + else + { + Dwfl_Line *lineobj = dwfl_module_getsrc(mod, pc_adjusted); + if (lineobj) + sname = dwfl_lineinfo (lineobj, NULL, &line, &col, NULL, NULL); + } + + if (sname != NULL) + { + printf ("\n %s", sname); + if (line > 0) + { + printf (":%d", line); + if (col > 0) + printf (":%d", col); + } + } + } + printf ("\n"); +} + +static void +print_inline_frames (int *nr, Dwarf_Addr pc, bool isactivation, + Dwarf_Addr pc_adjusted, Dwfl_Module *mod, + const char *symname, Dwarf_Die *cudie, Dwarf_Die *die) +{ + Dwarf_Die *scopes = NULL; + int nscopes = dwarf_getscopes_die (die, &scopes); + if (nscopes > 0) + { + /* scopes[0] == die, the lowest level, for which we already have + the name. This is the actual source location where it + happened. */ + print_frame ((*nr)++, pc, isactivation, pc_adjusted, mod, symname, + NULL, NULL); + + /* last_scope is the source location where the next frame/function + call was done. */ + Dwarf_Die *last_scope = &scopes[0]; + for (int i = 1; i < nscopes && (maxframes == 0 || *nr < maxframes); i++) + { + Dwarf_Die *scope = &scopes[i]; + int tag = dwarf_tag (scope); + if (tag != DW_TAG_inlined_subroutine + && tag != DW_TAG_entry_point + && tag != DW_TAG_subprogram) + continue; + + symname = die_name (scope); + print_frame ((*nr)++, pc, isactivation, pc_adjusted, mod, symname, + cudie, last_scope); + + /* Found the "top-level" in which everything was inlined? */ + if (tag == DW_TAG_subprogram) + break; + + last_scope = scope; + } + } + free (scopes); +} + +static void +print_frames (struct frames *frames, pid_t tid, int dwflerr, const char *what) +{ + if (frames->frames > 0) + frames_shown = true; + + printf ("TID %d:\n", tid); + int frame_nr = 0; + for (int nr = 0; nr < frames->frames && (maxframes == 0 + || frame_nr < maxframes); nr++) + { + Dwarf_Addr pc = frames->frame[nr].pc; + bool isactivation = frames->frame[nr].isactivation; + Dwarf_Addr pc_adjusted = pc - (isactivation ? 0 : 1); + + /* Get PC->SYMNAME. */ + Dwfl_Module *mod = dwfl_addrmodule (dwfl, pc_adjusted); + const char *symname = NULL; + Dwarf_Die die_mem; + Dwarf_Die *die = NULL; + Dwarf_Die *cudie = NULL; + if (mod && ! show_quiet) + { + if (show_debugname) + { + Dwarf_Addr bias = 0; + Dwarf_Die *scopes = NULL; + cudie = dwfl_module_addrdie (mod, pc_adjusted, &bias); + int nscopes = dwarf_getscopes (cudie, pc_adjusted - bias, + &scopes); + + /* Find the first function-like DIE with a name in scope. */ + for (int i = 0; symname == NULL && i < nscopes; i++) + { + Dwarf_Die *scope = &scopes[i]; + int tag = dwarf_tag (scope); + if (tag == DW_TAG_subprogram + || tag == DW_TAG_inlined_subroutine + || tag == DW_TAG_entry_point) + symname = die_name (scope); + + if (symname != NULL) + { + die_mem = *scope; + die = &die_mem; + } + } + free (scopes); + } + + if (symname == NULL) + symname = dwfl_module_addrname (mod, pc_adjusted); + } + + if (show_inlines && die != NULL) + print_inline_frames (&frame_nr, pc, isactivation, pc_adjusted, mod, + symname, cudie, die); + else + print_frame (frame_nr++, pc, isactivation, pc_adjusted, mod, symname, + NULL, NULL); + } + + if (frames->frames > 0 && frame_nr == maxframes) + error (0, 0, "tid %d: shown max number of frames " + "(%d, use -n 0 for unlimited)", tid, maxframes); + else if (dwflerr != 0) + { + if (frames->frames > 0) + { + unsigned nr = frames->frames - 1; + Dwarf_Addr pc = frames->frame[nr].pc; + bool isactivation = frames->frame[nr].isactivation; + Dwarf_Addr pc_adjusted = pc - (isactivation ? 0 : 1); + Dwfl_Module *mod = dwfl_addrmodule (dwfl, pc_adjusted); + const char *mainfile = NULL; + const char *modname = dwfl_module_info (mod, NULL, NULL, NULL, NULL, + NULL, &mainfile, NULL); + if (modname == NULL || modname[0] == '\0') + { + if (mainfile != NULL) + modname = mainfile; + else + modname = ""; + } + error (0, 0, "%s tid %d at 0x%" PRIx64 " in %s: %s", what, tid, + pc_adjusted, modname, dwfl_errmsg (dwflerr)); + } + else + error (0, 0, "%s tid %d: %s", what, tid, dwfl_errmsg (dwflerr)); + } +} + +static int +thread_callback (Dwfl_Thread *thread, void *thread_arg) +{ + struct frames *frames = (struct frames *) thread_arg; + pid_t tid = dwfl_thread_tid (thread); + int err = 0; + frames->frames = 0; + switch (dwfl_thread_getframes (thread, frame_callback, thread_arg)) + { + case DWARF_CB_OK: + case DWARF_CB_ABORT: + break; + case -1: + err = dwfl_errno (); + break; + default: + abort (); + } + print_frames (frames, tid, err, "dwfl_thread_getframes"); + return DWARF_CB_OK; +} + +static void +print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) +{ + fprintf (stream, "stack (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION); +} + +static error_t +parse_opt (int key, char *arg __attribute__ ((unused)), + struct argp_state *state) +{ + switch (key) + { + case 'p': + pid = atoi (arg); + if (pid == 0) + argp_error (state, N_("-p PID should be a positive process id.")); + break; + + case OPT_COREFILE: + core_fd = open (arg, O_RDONLY); + if (core_fd < 0) + error (EXIT_BAD, errno, N_("Cannot open core file '%s'"), arg); + elf_version (EV_CURRENT); + core = elf_begin (core_fd, ELF_C_READ_MMAP, NULL); + if (core == NULL) + error (EXIT_BAD, 0, "core '%s' elf_begin: %s", arg, elf_errmsg(-1)); + break; + + case 'e': + exec = arg; + break; + + case OPT_DEBUGINFO: + debuginfo_path = arg; + break; + + case 'm': + show_module = true; + break; + + case 's': + show_source = true; + break; + + case 'a': + show_activation = true; + break; + + case 'd': + show_debugname = true; + break; + + case 'i': + show_inlines = show_debugname = true; + break; + + case 'v': + show_activation = show_source = show_module = show_debugname = true; + show_inlines = true; + break; + + case 'b': + show_build_id = true; + break; + + case 'q': + show_quiet = true; + break; + + case 'r': + show_raw = true; + break; + + case '1': + show_one_tid = true; + break; + + case 'n': + maxframes = atoi (arg); + if (maxframes < 0) + { + argp_error (state, N_("-n MAXFRAMES should be 0 or higher.")); + return EINVAL; + } + break; + + case 'l': + show_modules = true; + break; + + case ARGP_KEY_END: + if (core == NULL && exec != NULL) + argp_error (state, + N_("-e EXEC needs a core given by --core.")); + + if (pid == 0 && show_one_tid == true) + argp_error (state, + N_("-1 needs a thread id given by -p.")); + + if ((pid == 0 && core == NULL) || (pid != 0 && core != NULL)) + argp_error (state, + N_("One of -p PID or --core COREFILE should be given.")); + + if (pid != 0) + { + dwfl = dwfl_begin (&proc_callbacks); + if (dwfl == NULL) + error (EXIT_BAD, 0, "dwfl_begin: %s", dwfl_errmsg (-1)); + + int err = dwfl_linux_proc_report (dwfl, pid); + if (err < 0) + error (EXIT_BAD, 0, "dwfl_linux_proc_report pid %d: %s", pid, + dwfl_errmsg (-1)); + else if (err > 0) + error (EXIT_BAD, err, "dwfl_linux_proc_report pid %d", pid); + } + + if (core != NULL) + { + dwfl = dwfl_begin (&core_callbacks); + if (dwfl == NULL) + error (EXIT_BAD, 0, "dwfl_begin: %s", dwfl_errmsg (-1)); + if (dwfl_core_file_report (dwfl, core, exec) < 0) + error (EXIT_BAD, 0, "dwfl_core_file_report: %s", dwfl_errmsg (-1)); + } + + if (dwfl_report_end (dwfl, NULL, NULL) != 0) + error (EXIT_BAD, 0, "dwfl_report_end: %s", dwfl_errmsg (-1)); + + if (pid != 0) + { + int err = dwfl_linux_proc_attach (dwfl, pid, false); + if (err < 0) + error (EXIT_BAD, 0, "dwfl_linux_proc_attach pid %d: %s", pid, + dwfl_errmsg (-1)); + else if (err > 0) + error (EXIT_BAD, err, "dwfl_linux_proc_attach pid %d", pid); + } + + if (core != NULL) + { + if (dwfl_core_file_attach (dwfl, core) < 0) + error (EXIT_BAD, 0, "dwfl_core_file_report: %s", dwfl_errmsg (-1)); + } + + /* Makes sure we are properly attached. */ + if (dwfl_pid (dwfl) < 0) + error (EXIT_BAD, 0, "dwfl_pid: %s\n", dwfl_errmsg (-1)); + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +int +main (int argc, char **argv) +{ + /* We use no threads here which can interfere with handling a stream. */ + __fsetlocking (stdin, FSETLOCKING_BYCALLER); + __fsetlocking (stdout, FSETLOCKING_BYCALLER); + __fsetlocking (stderr, FSETLOCKING_BYCALLER); + + /* Set locale. */ + (void) setlocale (LC_ALL, ""); + + const struct argp_option options[] = + { + { NULL, 0, NULL, 0, N_("Input selection options:"), 0 }, + { "pid", 'p', "PID", 0, + N_("Show stack of process PID"), 0 }, + { "core", OPT_COREFILE, "COREFILE", 0, + N_("Show stack found in COREFILE"), 0 }, + { "executable", 'e', "EXEC", 0, N_("(optional) EXECUTABLE that produced COREFILE"), 0 }, + { "debuginfo-path", OPT_DEBUGINFO, "PATH", 0, + N_("Search path for separate debuginfo files"), 0 }, + + { NULL, 0, NULL, 0, N_("Output selection options:"), 0 }, + { "activation", 'a', NULL, 0, + N_("Additionally show frame activation"), 0 }, + { "debugname", 'd', NULL, 0, + N_("Additionally try to lookup DWARF debuginfo name for frame address"), + 0 }, + { "inlines", 'i', NULL, 0, + N_("Additionally show inlined function frames using DWARF debuginfo if available (implies -d)"), 0 }, + { "module", 'm', NULL, 0, + N_("Additionally show module file information"), 0 }, + { "source", 's', NULL, 0, + N_("Additionally show source file information"), 0 }, + { "verbose", 'v', NULL, 0, + N_("Show all additional information (activation, debugname, inlines, module and source)"), 0 }, + { "quiet", 'q', NULL, 0, + N_("Do not resolve address to function symbol name"), 0 }, + { "raw", 'r', NULL, 0, + N_("Show raw function symbol names, do not try to demangle names"), 0 }, + { "build-id", 'b', NULL, 0, + N_("Show module build-id, load address and pc offset"), 0 }, + { NULL, '1', NULL, 0, + N_("Show the backtrace of only one thread"), 0 }, + { NULL, 'n', "MAXFRAMES", 0, + N_("Show at most MAXFRAMES per thread (default 256, use 0 for unlimited)"), 0 }, + { "list-modules", 'l', NULL, 0, + N_("Show module memory map with build-id, elf and debug files detected"), 0 }, + { NULL, 0, NULL, 0, NULL, 0 } + }; + + const struct argp argp = + { + .options = options, + .parser = parse_opt, + .doc = N_("Print a stack for each thread in a process or core file.\v\ +Program exits with return code 0 if all frames were shown without \ +any errors. If some frames were shown, but there were some non-fatal \ +errors, possibly causing an incomplete backtrace, the program exits \ +with return code 1. If no frames could be shown, or a fatal error \ +occured the program exits with return code 2. If the program was \ +invoked with bad or missing arguments it will exit with return code 64.") + }; + + argp_parse (&argp, argc, argv, 0, NULL, NULL); + + if (show_modules) + { + printf ("PID %d - %s module memory map\n", dwfl_pid (dwfl), + pid != 0 ? "process" : "core"); + if (dwfl_getmodules (dwfl, module_callback, NULL, 0) != 0) + error (EXIT_BAD, 0, "dwfl_getmodules: %s", dwfl_errmsg (-1)); + } + + struct frames frames; + /* When maxframes is zero, then 2048 is just the initial allocation + that will be increased using realloc in framecallback (). */ + frames.allocated = maxframes == 0 ? 2048 : maxframes; + frames.frames = 0; + frames.frame = malloc (sizeof (struct frame) * frames.allocated); + if (frames.frame == NULL) + error (EXIT_BAD, errno, "malloc frames.frame"); + + if (show_one_tid) + { + int err = 0; + switch (dwfl_getthread_frames (dwfl, pid, frame_callback, &frames)) + { + case DWARF_CB_OK: + case DWARF_CB_ABORT: + break; + case -1: + err = dwfl_errno (); + break; + default: + abort (); + } + print_frames (&frames, pid, err, "dwfl_getthread_frames"); + } + else + { + printf ("PID %d - %s\n", dwfl_pid (dwfl), pid != 0 ? "process" : "core"); + switch (dwfl_getthreads (dwfl, thread_callback, &frames)) + { + case DWARF_CB_OK: + case DWARF_CB_ABORT: + break; + case -1: + error (0, 0, "dwfl_getthreads: %s", dwfl_errmsg (-1)); + break; + default: + abort (); + } + } + free (frames.frame); + dwfl_end (dwfl); + + if (core != NULL) + elf_end (core); + + if (core_fd != -1) + close (core_fd); + +#ifdef USE_DEMANGLE + free (demangle_buffer); +#endif + + if (! frames_shown) + error (EXIT_BAD, 0, N_("Couldn't show any frames.")); + + return error_message_count != 0 ? EXIT_ERROR : EXIT_OK; +} diff --git a/src/strings.c b/src/strings.c index 084eb99..f60e4b4 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1,5 +1,5 @@ /* Print the strings of printable characters in files. - 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 , 2005. @@ -116,8 +116,15 @@ static bool char_7bit; /* True if file names should be printed before strings. */ static bool print_file_name; -/* Location print format string. */ -static const char *locfmt; +/* Radix for printed numbers. */ +static enum +{ + radix_none = 0, + radix_decimal, + radix_hex, + radix_octal +} radix = radix_none; + /* Page size in use. */ static size_t ps; @@ -279,16 +286,16 @@ parse_opt (int key, char *arg, switch (arg[0]) { case 'd': - locfmt = "%7" PRId64 " "; + radix = radix_decimal; break; case 'o': octfmt: - locfmt = "%7" PRIo64 " "; + radix = radix_octal; break; case 'x': - locfmt = "%7" PRIx64 " "; + radix = radix_hex; break; default: @@ -355,8 +362,11 @@ process_chunk_mb (const char *fname, const unsigned char *buf, off64_t to, fputs_unlocked (": ", stdout); } - if (unlikely (locfmt != NULL)) - printf (locfmt, (int64_t) to - len - (buf - start)); + if (unlikely (radix != radix_none)) + printf ((radix == radix_octal ? "%7" PRIo64 " " + : (radix == radix_decimal ? "%7" PRId64 " " + : "%7" PRIx64 " ")), + (int64_t) to - len - (buf - start)); if (unlikely (*unprinted != NULL)) { @@ -420,8 +430,11 @@ process_chunk (const char *fname, const unsigned char *buf, off64_t to, fputs_unlocked (": ", stdout); } - if (likely (locfmt != NULL)) - printf (locfmt, (int64_t) to - len - (buf - start)); + if (likely (radix != radix_none)) + printf ((radix == radix_octal ? "%7" PRIo64 " " + : (radix == radix_decimal ? "%7" PRId64 " " + : "%7" PRIx64 " ")), + (int64_t) to - len - (buf - start)); if (unlikely (*unprinted != NULL)) { @@ -452,13 +465,6 @@ process_chunk (const char *fname, const unsigned char *buf, off64_t to, static void * map_file (int fd, off64_t start_off, off64_t fdlen, size_t *map_sizep) { -#if _MUDFLAP - (void) fd; - (void) start_off; - (void) fdlen; - (void) map_sizep; - return MAP_FAILED; -#else /* Maximum size we mmap. We use an #ifdef to avoid overflows on 32-bit machines. 64-bit machines these days do not have usable address spaces larger than about 43 bits. Not that any file @@ -500,7 +506,6 @@ map_file (int fd, off64_t start_off, off64_t fdlen, size_t *map_sizep) *map_sizep = map_size; return mem; -#endif } diff --git a/src/strip.c b/src/strip.c index 5e9c883..c9a1d8d 100644 --- a/src/strip.c +++ b/src/strip.c @@ -1,5 +1,5 @@ /* Discard section not used at runtime from object files. - 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 , 2000. @@ -432,6 +432,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, Elf_Data debuglink_crc_data; bool any_symtab_changes = false; Elf_Data *shstrtab_data = NULL; + void *debuglink_buf = NULL; /* Create the full name of the file. */ if (prefix != NULL) @@ -564,6 +565,11 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, goto fail_close; } + if (shstrndx >= shnum) + goto illformed; + +#define elf_assert(test) do { if (!(test)) goto illformed; } while (0) + /* Storage for section information. We leave room for two more entries since we unconditionally create a section header string table. Maybe some weird tool created an ELF file without one. @@ -585,7 +591,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, { /* This should always be true (i.e., there should not be any holes in the numbering). */ - assert (elf_ndxscn (scn) == cnt); + elf_assert (elf_ndxscn (scn) == cnt); shdr_info[cnt].scn = scn; @@ -598,6 +604,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, shdr_info[cnt].shdr.sh_name); if (shdr_info[cnt].name == NULL) { + illformed: error (0, 0, gettext ("illformed file '%s'"), fname); goto fail_close; } @@ -607,6 +614,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* Remember the shdr.sh_link value. */ shdr_info[cnt].old_sh_link = shdr_info[cnt].shdr.sh_link; + if (shdr_info[cnt].old_sh_link >= shnum) + goto illformed; /* Sections in files other than relocatable object files which are not loaded can be freely moved by us. In relocatable @@ -619,7 +628,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, appropriate reference. */ if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB_SHNDX)) { - assert (shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx == 0); + elf_assert (shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx == 0); shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx = cnt; } else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GROUP)) @@ -636,7 +645,12 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, for (inner = 1; inner < shdr_info[cnt].data->d_size / sizeof (Elf32_Word); ++inner) - shdr_info[grpref[inner]].group_idx = cnt; + { + if (grpref[inner] < shnum) + shdr_info[grpref[inner]].group_idx = cnt; + else + goto illformed; + } if (inner == 1 || (inner == 2 && (grpref[0] & GRP_COMDAT) == 0)) /* If the section group contains only one element and this @@ -647,7 +661,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, } else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym)) { - assert (shdr_info[shdr_info[cnt].shdr.sh_link].version_idx == 0); + elf_assert (shdr_info[shdr_info[cnt].shdr.sh_link].version_idx == 0); shdr_info[shdr_info[cnt].shdr.sh_link].version_idx = cnt; } @@ -655,7 +669,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, discarded right away. */ if ((shdr_info[cnt].shdr.sh_flags & SHF_GROUP) != 0) { - assert (shdr_info[cnt].group_idx != 0); + elf_assert (shdr_info[cnt].group_idx != 0); if (shdr_info[shdr_info[cnt].group_idx].idx == 0) { @@ -731,10 +745,14 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, { /* If a relocation section is marked as being removed make sure the section it is relocating is removed, too. */ - if ((shdr_info[cnt].shdr.sh_type == SHT_REL + if (shdr_info[cnt].shdr.sh_type == SHT_REL || shdr_info[cnt].shdr.sh_type == SHT_RELA) - && shdr_info[shdr_info[cnt].shdr.sh_info].idx != 0) - shdr_info[cnt].idx = 1; + { + if (shdr_info[cnt].shdr.sh_info >= shnum) + goto illformed; + else if (shdr_info[shdr_info[cnt].shdr.sh_info].idx != 0) + shdr_info[cnt].idx = 1; + } /* If a group section is marked as being removed make sure all the sections it contains are being removed, too. */ @@ -778,7 +796,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shdr_info[cnt].symtab_idx != 0 && shdr_info[shdr_info[cnt].symtab_idx].data == NULL) { - assert (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB); + elf_assert (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB); shdr_info[shdr_info[cnt].symtab_idx].data = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn, @@ -818,6 +836,9 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, else if (scnidx == SHN_XINDEX) scnidx = xndx; + if (scnidx >= shnum) + goto illformed; + if (shdr_info[scnidx].idx == 0) /* This symbol table has a real symbol in a discarded section. So preserve the @@ -848,11 +869,15 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, } /* Handle references through sh_info. */ - if (SH_INFO_LINK_P (&shdr_info[cnt].shdr) - && shdr_info[shdr_info[cnt].shdr.sh_info].idx == 0) + if (SH_INFO_LINK_P (&shdr_info[cnt].shdr)) { - shdr_info[shdr_info[cnt].shdr.sh_info].idx = 1; - changes |= shdr_info[cnt].shdr.sh_info < cnt; + if (shdr_info[cnt].shdr.sh_info >= shnum) + goto illformed; + else if ( shdr_info[shdr_info[cnt].shdr.sh_info].idx == 0) + { + shdr_info[shdr_info[cnt].shdr.sh_info].idx = 1; + changes |= shdr_info[cnt].shdr.sh_info < cnt; + } } /* Mark the section as investigated. */ @@ -994,7 +1019,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, error (EXIT_FAILURE, 0, gettext ("while generating output file: %s"), elf_errmsg (-1)); - assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); + elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); /* Add this name to the section header string table. */ shdr_info[cnt].se = ebl_strtabadd (shst, shdr_info[cnt].name, 0); @@ -1031,7 +1056,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, error (EXIT_FAILURE, 0, gettext ("while create section header section: %s"), elf_errmsg (-1)); - assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); + elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); shdr_info[cnt].data = elf_newdata (shdr_info[cnt].newscn); if (shdr_info[cnt].data == NULL) @@ -1046,7 +1071,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, shdr_info[cnt].data->d_align = 4; shdr_info[cnt].shdr.sh_size = shdr_info[cnt].data->d_size = crc_offset + 4; - shdr_info[cnt].data->d_buf = xcalloc (1, shdr_info[cnt].data->d_size); + debuglink_buf = xcalloc (1, shdr_info[cnt].data->d_size); + shdr_info[cnt].data->d_buf = debuglink_buf; strcpy (shdr_info[cnt].data->d_buf, debug_basename); @@ -1087,7 +1113,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, error (EXIT_FAILURE, 0, gettext ("while create section header section: %s"), elf_errmsg (-1)); - assert (elf_ndxscn (shdr_info[cnt].newscn) == idx); + elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == idx); /* Finalize the string table and fill in the correct indices in the section headers. */ @@ -1177,20 +1203,20 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, shndxdata = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn, NULL); - assert ((versiondata->d_size / sizeof (Elf32_Word)) + elf_assert ((versiondata->d_size / sizeof (Elf32_Word)) >= shdr_info[cnt].data->d_size / elsize); } if (shdr_info[cnt].version_idx != 0) { - assert (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM); + elf_assert (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM); /* This section has associated version information. We have to modify that information, too. */ versiondata = elf_getdata (shdr_info[shdr_info[cnt].version_idx].scn, NULL); - assert ((versiondata->d_size / sizeof (GElf_Versym)) + elf_assert ((versiondata->d_size / sizeof (GElf_Versym)) >= shdr_info[cnt].data->d_size / elsize); } @@ -1245,7 +1271,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, sec = shdr_info[sym->st_shndx].idx; else { - assert (shndxdata != NULL); + elf_assert (shndxdata != NULL); sec = shdr_info[xshndx].idx; } @@ -1266,7 +1292,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, nxshndx = sec; } - assert (sec < SHN_LORESERVE || shndxdata != NULL); + elf_assert (sec < SHN_LORESERVE || shndxdata != NULL); if ((inner != destidx || nshndx != sym->st_shndx || (shndxdata != NULL && nxshndx != xshndx)) @@ -1293,9 +1319,11 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, { size_t sidx = (sym->st_shndx != SHN_XINDEX ? sym->st_shndx : xshndx); - assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION - || (shdr_info[sidx].shdr.sh_type == SHT_GROUP - && shdr_info[sidx].shdr.sh_info == inner)); + elf_assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION + || ((shdr_info[sidx].shdr.sh_type + == SHT_GROUP) + && (shdr_info[sidx].shdr.sh_info + == inner))); } } @@ -1483,11 +1511,11 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, { GElf_Sym sym_mem; GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); - assert (sym != NULL); + elf_assert (sym != NULL); const char *name = elf_strptr (elf, strshndx, sym->st_name); - assert (name != NULL); + elf_assert (name != NULL); size_t hidx = elf_hash (name) % nbucket; if (bucket[hidx] == 0) @@ -1506,8 +1534,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, else { /* Alpha and S390 64-bit use 64-bit SHT_HASH entries. */ - assert (shdr_info[cnt].shdr.sh_entsize - == sizeof (Elf64_Xword)); + elf_assert (shdr_info[cnt].shdr.sh_entsize + == sizeof (Elf64_Xword)); Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf; @@ -1537,11 +1565,11 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, { GElf_Sym sym_mem; GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); - assert (sym != NULL); + elf_assert (sym != NULL); const char *name = elf_strptr (elf, strshndx, sym->st_name); - assert (name != NULL); + elf_assert (name != NULL); size_t hidx = elf_hash (name) % nbucket; if (bucket[hidx] == 0) @@ -2013,6 +2041,9 @@ while computing checksum for debug information")); free (shdr_info[cnt].debug_data->d_buf); } + /* Free data we allocated for the .gnu_debuglink section. */ + free (debuglink_buf); + /* Free the memory. */ if ((shnum + 2) * sizeof (struct shdr_info) > MAX_STACK_ALLOC) free (shdr_info); diff --git a/src/unstrip.c b/src/unstrip.c index f6660a3..f6af450 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 , 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: @@ -1118,10 +1125,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; @@ -1935,9 +1943,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 +1975,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 +2001,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 +2073,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 +2093,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 +2114,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 +2226,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 +2321,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 276462c..dce6ebe 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,732 @@ +2014-06-15 Mark Wielaard + + * backtrace.c (frame_callback): Error on seeing more than 16 frames. + +2014-06-13 Mark Wielaard + + * backtrace.c (callback_verify): Accept "__libc_do_syscall" as first + frame symname. + +2014-06-13 Mark Wielaard + + * 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 + + * 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 + + * testfile-backtrace-demangle.cc (cxxfunc): Make non-static. + (f): Likewise. + * testfile-backtrace-demangle.bz2: Regenerate. + * testfile-backtrace-demangle.core.bz2: Likewise. + +2014-05-02 Mark Wielaard + + * Makefile.am (TESTS): run-readelf-dwz-multi.sh and + run-allfcts-multi.sh are now added unconditionally. + +2014-05-01 Mark Wielaard + + * run-readelf-dwz-multi.sh: Add tests with alt debug files in .dwz + subdir. + +2014-04-30 Mark Wielaard + + * buildid.c, buildid.sh, testfile42_noshdrs.bz2: New files. + * Makefile.am (check_PROGRAMS): Add buildid. + (TESTS): Add run-buildid.sh. + (EXTRA_DISTS): Add run-buildid.sh and testfile42_noshdrs.bz2. + (buildid_LDADD): New variable. + +2014-04-24 Florian Weimer + + * allfcts.c (setup_alt): New function. + (main): Call it. Implementation additional error checking and + reporting. + +2014-04-24 Florian Weimer + + * debugaltlink.c, run-debugaltlink.sh: New files. + * Makefile.am (check_PROGRAMS): Add debugaltlink. + (TESTS): Add run-debugaltlink.sh. + (debugaltlink_LDADD): New variable. + +2014-04-11 Mark Wielaard + + * Makefile.am (AM_CPPFLAGS): Add -I libdwelf. + (check_PROGRAMS): Add debuglink. + (TESTS): Add run-debuglink.sh + (EXTRA_DIST): Likewise. + (debuglink_LDADD): New. + * debuglink.c: New file. + * run-debuglink.sh: Likewise. + +2014-03-23 Mark Wielaard + + * run-nm-self.sh: Use test = not == for string comparisons. + +2014-04-22 Kurt Roeckx + + * backtrace.c: Make Linux only. + * backtrace-child.c: Make Linux only. + * backtrace-data.c: Make Linux only. + * backtrace-dwarf.c: Make Linux only. + * backtrace-subr.sh: Skip core file unwinding tests when not supported. + +2014-03-14 Mark Wielaard + + * Makefile.am: Remove MUDFLAP conditions. Remove libmudflap from all + LDADD lines. + * configure.ac: Remove MUDFLAP conditional. + +2014-04-09 Mark Wielaard + + * run-readelf-zdebug.sh: New test. + * testfile-debug.bz2: New testfile. + * testfile-zdebug.bz2: New testfile. + * Makefile.am (TESTS): Add run-readelf-zdebug.sh if ZLIB. + (EXTRA_DIST): Add run-readelf-zdebug.sh, testfile-debug.bz2 and + testfile-zdebug.bz2. + +2014-04-10 Mark Wielaard + + * testfile_i686_core.bz2: New test file. + * run-readelf-mixed-corenote.sh: Add testfile_i686_core test. + * Makefile.am (EXTRA_DIST): Add testfile_i686_core.bz2 + +2014-04-09 Mark Wielaard + + * Makefile.am (TESTS): Add run-backtrace-core-aarch64.sh. + (EXTRA_DIST): Add run-backtrace-core-aarch64.sh, + backtrace.aarch64.core.bz2 and backtrace.aarch64.exec.bz2. + * run-backtrace-core-aarch64.sh: New test. + +2014-03-11 Josh Stone + + * testfilebaxmin.bz2: New testfile. + * Makefile.am (EXTRA_DIST): Add testfilebaxmin.bz2. + * run-readelf-s.sh: Test testfilebaxmin. + * run-dwflsyms.sh: Likewise. + +2014-01-26 Mark Wielaard + + * backtrace-subr.sh (check_unsupported): Special case arm*. + +2014-01-25 Mark Wielaard + + * run-addrcfi.sh (EM_ARM): Change reg13 (sp) from undefined to + location expression: call_frame_cfa stack_value. + +2014-01-22 Mark Wielaard + + * Makefile.am (line2addr_no_Wformat): Removed. + +2014-01-21 Mark Wielaard + + * Makefile.am (TESTS): Add run-stack-i-test.sh. + (EXTRA_DIST): Likewise. + * run-stack-i-test.sh: New test. + +2014-01-20 Mark Wielaard + + * Makefile.am (TESTS): Add run-stack-d-test.sh. + (EXTRA_DIST): Add run-stack-d-test.sh, testfiledwarfinlines.bz2 + testfiledwarfinlines.core.bz2. + * run-stack-d-test.sh: New test. + * testfiledwarfinlines.bz2: New test file. + * testfiledwarfinlines.core.bz2: Likewise. + +2014-01-16 Mark Wielaard + + * run-nm-self.sh: Don't use testrun_on_self_quiet but just testrun + on one ET_REL, one ET_EXEC and one ET_DYN file. + * test-subr.sh (self_test_files): Add two ET_REL files, only add + two libebl ET_DYN backend files. + +2014-01-16 Mark Wielaard + + * run-backtrace-demangle.sh: Check exitcode and max number of frames. + +2014-01-18 Jan Kratochvil + + Fix false FAILs on testsuite with ulimit -c unlimited. + * backtrace-child.c (sigusr2): Call pthread_exit. + (main): Return, do not call abort. + +2014-01-15 Jan Kratochvil + + Fix corruption of non-C++ symbols by the demangler. + * Makefile.am (TESTS): Add run-backtrace-demangle.sh. + : Add ELFUTILS_DISABLE_DEMANGLE export. + (EXTRA_DIST): Add run-backtrace-demangle.sh, + testfile-backtrace-demangle.bz2, testfile-backtrace-demangle.cc, + testfile-backtrace-demangle.core.bz2. + * backtrace-demangle.cc: New file. + * run-backtrace-demangle.sh: New file. + * testfile-backtrace-demangle.bz2: New file. + * testfile-backtrace-demangle.cc: New file. + * testfile-backtrace-demangle.core.bz2: New file. + +2014-01-07 Matthias Klose + + * backtrace-subr.sh (check_native_core): Check to see if core file + was created without ".PID" extension, if so mv core to core.PID. + Skip test if no core file was created or could be found. + +2014-01-04 Mark Wielaard + + * backtrace-data.c (main): Don't assert if raise returns. + * backtrace-dwarf.c (report_pid): Call dwfl_linux_proc_attach with + assume_ptrace_attached true. + (ptrace_detach_stopped): Removed function. + (main): Don't call ptrace_detach_stopped. + * backtrace.c (ptrace_detach_stopped): Removed function. + (report_pid): Call dwfl_linux_proc_attach with assume_ptrace_attached + true. + (exec_dump): Don't call ptrace_detach_stopped. + +2014-01-04 Mark Wielaard + + * backtrace-subr.sh (check_native_core): Skip, exit 77, the test + if we cannot adjust core ulimit. + +2014-01-04 Mark Wielaard + + * cleanup-13.c (force_unwind_stop): Removed. + (force_unwind): Just call abort. Don't setup _Unwind_Exception and + don't call _Unwind_ForcedUnwind. + +2014-01-03 Mark Wielaard + + * run-addrcfi.sh: Add case for EM_AARCH64. + * testfileaarch64.bz2: New testfile. + * Makefile.am (EXTRA_DIST): Add testfilesaarch64.bz2. + +2013-12-30 Mark Wielaard + + * backtrace-dwarf.c (report_pid): Explicitly call + dwfl_linux_proc_attach and check for errors. + * backtrace.c (report_pid): Likewise. + +2013-12-21 Mark Wielaard + + * backtrace.c (callback_verify): Only assert that case 5 is the last + instruction of backtracegen on x86_64 native. + +2013-12-18 Jan Kratochvil + Mark Wielaard + + * Makefile.am (EXTRA_DIST): Add testfile66.bz2, testfile66.core.bz2 + and testfilebaz*ppc64*.bz2 files. + * dwflsyms.c (list_syms): Remove unused from parameter mod_name. Print + error on dwfl_module_getsymtab error. + (list_syms): Use dwfl_module_getsym and dwfl_module_getsym_info. + Compare values for non-ET_REL. Use dwfl_module_addrinfo. + Also print section of actual value if different from sym. + * run-addrname-test.sh (testfile66, testfile66.core): New tests. + Test addr2line -x by showing different sections for address and + found name in testfile66. + * run-dwflsyms.sh (testfile66, testfile66.core, hello_ppc64.ko, + testfilebaz*ppc64): New tests. + * testfile66.bz2, testfile66.core.bz2, testfilebazdbgppc64.bz2, + testfilebazdbgppc64.debug.bz2, testfilebazdbgppc64_pl.bz2, + testfilebazdbgppc64_plr.bz2, testfilebazdynppc64.bz2, + testfilebazmdbppc64.bz2, testfilebazminppc64.bz2, + testfilebazminppc64_pl.bz2, testfilebazminppc64_plr.bz2, + testfilebaztabppc64.bz2: New test files. + +2013-12-18 Jan Kratochvil + + unwinder: s390 and s390x + * Makefile.am (TESTS): Add run-backtrace-core-s390x.sh and + run-backtrace-core-s390.sh. + (EXTRA_DIST): Add backtrace.s390x.core.bz2, backtrace.s390x.exec.bz2, + backtrace.s390.core.bz2, backtrace.s390.exec.bz2, + run-backtrace-core-s390x.sh and run-backtrace-core-s390.sh. + * backtrace.s390.core.bz2: New file. + * backtrace.s390.exec.bz2: New file. + * backtrace.s390x.core.bz2: New file. + * backtrace.s390x.exec.bz2: New file. + * run-backtrace-core-s390.sh: New file. + * run-backtrace-core-s390x.sh: New file. + +2013-12-17 Jan Kratochvil + + * backtrace-dwarf.c (executable, find_elf, dwfl_offline): Remove unused + code. + +2013-12-15 Jan Kratochvil + + unwinder: ppc + * Makefile.am (TESTS): Add run-backtrace-core-ppc.sh. + (EXTRA_DIST): Add backtrace.ppc.core.bz2, + backtrace.ppc.exec.bz2 and run-backtrace-core-ppc.sh. + * backtrace.ppc.core.bz2: New file. + * backtrace.ppc.exec.bz2: New file. + * run-backtrace-core-ppc.sh: New file. + +2013-12-10 Mark Wielaard + + * Makefile.am (backtrace_child_biarch_SOURCES): New backtrace-child.c. + +2013-12-10 Mark Wielaard + + * Makefile.am (valgrind_cmd): Remove --trace-children=yes. + * backtrace-subr.sh (check_native_core): Disable valgrind while + dumping core. + * run-backtrace-data.sh: Disable valgrind. + * run-backtrace-dwarf.sh: Likewise. + +2013-12-09 Mark Wielaard + + * varlocs.c (print_expr): Update comment to explain empty location + associated with DW_OP_GNU_implicit_pointer. + +2013-12-05 Jan Kratochvil + + Fix test FAIL with -O2. + * backtrace-child.c (sigusr2): Add NOINLINE_NOCLONE and final asm stub. + +2013-12-05 Mark Wielaard + + * backtrace-data.c (main): If unsupported also print to stderr. + * run-backtrace-dwarf.sh: Add check_unsupported and check_main. + +2013-12-04 Mark Wielaard + + * Makefile.am (backtrace-child-biarch): Add $(EXEEXT). + +2013-12-02 Jan Kratochvil + + * Makefile.am (check_PROGRAMS): Add backtrace, backtrace-child, + backtrace-data and backtrace-dwarf. + (BUILT_SOURCES, clean-local, backtrace-child-biarch): New. + (TESTS): Add 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 and run-backtrace-core-i386.sh. + Add export of ELFUTILS_DISABLE_BIARCH. + (EXTRA_DIST): Add run-backtrace-data.sh, run-backtrace-dwarf.sh, + cleanup-13.c, run-backtrace-native.sh, run-backtrace-native-biarch.sh, + run-backtrace-native-core.sh, run-backtrace-native-core-biarch.sh, + run-backtrace-core-x86_64.sh, run-backtrace-core-i386.sh, + backtrace-subr.sh, backtrace.i386.core.bz2, backtrace.i386.exec.bz2, + backtrace.x86_64.core.bz2, backtrace.x86_64.exec.bz2. + (backtrace_LDADD, backtrace_child_CFLAGS, backtrace_child_LDFLAGS) + (backtrace_data_LDADD, backtrace_dwarf_CFLAGS, backtrace_dwarf_LDADD): + New. + * backtrace-child.c: New file. + * backtrace-data.c: New file. + * backtrace-dwarf.c: New file. + * backtrace-subr.sh: New file. + * backtrace.c: New file. + * cleanup-13.c: New file. + * backtrace.i386.core.bz2: New file. + * backtrace.i386.exec.bz2: New file. + * backtrace.x86_64.core.bz2: New file. + * backtrace.x86_64.exec.bz2: New file. + * run-backtrace-core-i386.sh: New file. + * run-backtrace-core-x86_64.sh: New file. + * run-backtrace-native-biarch.sh: New file. + * run-backtrace-native-core-biarch.sh: New file. + * run-backtrace-native-core.sh: New file. + * run-backtrace-native.sh: New file. + * run-backtrace-data.sh: New file. + * run-backtrace-dwarf.sh: New file. + +2013-11-27 Mark Wielaard + + * dwflsyms.c (gelf_bind_order): New function. + (elf_section_name): Likewise. + (addr_in_section): Likewise. + (list_syms): Use dwfl_module_getsym_elf and dwfl_module_addrsym_elf. + Refine assert using gelf_bind_order. Print elf_section_name. Check + bias with addr_in_section. + * run-dwflsyms.sh: Add section names to expected output. + +2013-11-26 Mark Wielaard + + * Makefile.am (EXTRA_DIST): Add run-funcretval.sh. + +2013-11-25 Petr Machata + + * testfile_aarch64_core.bz2, hello_aarch64.ko.bz2: New files. + * funcretval_test.c, funcretval_test_aarch64.bz2: Likewise. + * Makefile.am (EXTRA_DIST): Add these. + (TESTS): Add run-funcretval.sh. + * run-allregs.sh: Use testfile_aarch64_core.bz2 for a regs_test. + * run-readelf-mixed-corenote.sh: ... and for a readelf -n test. + * run-strip-reloc.sh: Add a test on hello_aarch64.ko.bz2. + * run-funcretval.sh: New file. + +2013-11-18 Josh Stone + + * testfilebazdbg_plr.bz2: New testfile. + * testfilebazmin_plr.bz2: Likewise. + * Makefile.am (EXTRA_DIST): Add the above files. + * run-dwflsyms.sh: Add prelink -r tests. + +2013-11-15 Mark Wielaard + + * testfilebazmdb.bz2: Regenerated. + * testfilebazmin.bz2: Likewise. + * testfilebazdbg_pl.bz2: New testfile. + * testfilebazmin_pl.bz2: Likewise. + * Makefile.am (EXTRA_DIST): Add testfilebazdbg_pl.bz2 and + testfilebazmin_pl.bz2. + * dwflsyms.c (list_syms): Call dwfl_module_relocate_address and + print relative address of function symbols. + * run-dwflsyms.sh: Add prelink tests and adjust expected output. + +2013-11-01 Michael Forney + + * Makefile.am (TESTS_ENVIRONMENT): Use and export NM. + * run-arsymtest.sh: Use NM. + +2013-11-05 Mark Wielaard + + * allfcts.c (main): Correct dwarf_getfuncs return value check. + +2013-10-10 Mark Wielaard + Josh Stone + + * run-allfcts-multi.sh: New test. + * test-offset-loop.bz2: New testfile. + * test-offset-loop.alt.bz2: New testfile. + * Makefile.am (TESTS): Add run-allcft-multi.sh if ENABLE_DWZ. + (EXTRA_DIST): Add run-allfcts-multi.sh, test-offset-loop.bz2 and + test-offset-loop.alt.bz2. + +2013-10-15 Mark Wielaard + + * run-unstrip-M.sh: New test. + * Makefile.am (TESTS): Add run-unstrip-M.sh. + (EXTRA_DIST): Likewise. + +2013-10-06 Mark Wielaard + + * run-addrcfi.sh: Remove nop from expected ppc and ppc64 + location expression. + +2013-10-03 Josh Stone + + * typeiter2.c: New file, reversing typeiter.c. + * run-typeiter.sh: Also run typeiter2. + * Makefile.am (check_PROGRAMS): Add typeiter2. + (typeiter2_LDADD): New variable. + +2013-09-26 Petr Machata + + * run-readelf-mixed-corenote.sh: Update output of testfile71 + dump--readelf can newly decode the NT_FILE note. + +2013-09-26 Petr Machata + + * Makefile.am (EXTRA_DIST): Add testfile71.bz2. + * run-readelf-mixed-corenote.sh: New test for this file. + * testfile71.bz2: New file. + +2013-09-20 Mark Wielaard + + * allfcts.c (cb): Return DWARF_CB_ABORT. + (main): Iterate over all offsets returned by dwarf_getfuncs. + * run-allfcts.sh: Add nested_funcs and class_func testcases. + * testfile_nested_funcs.bz2: New test file. + * testfile_class_func.bz2: Likewise. + * Makefile.am (EXTRA_DIST): Add testfile_class_func.bz2 and + testfile_nested_funcs.bz2. + +2013-08-30 Mark Wielaard + + * Makefile.am (check_PROGRAMS): Add varlocs. + (TESTS): Add run-varlocs.sh. + (EXTRA_DIST): Add run-varlocs.sh, testfile_const_type.c, + testfile_const_type.bz2, testfile_implicit_pointer.c, + testfile_implicit_pointer.bz2, testfile_parameter_ref.c, + testfile_entry_value.c, testfile_entry_value.bz2, + testfile_implicit_value.c and testfile_implicit_value.bz2. + (varlocs_LDADD): New. + * run-varlocs: New test. + * testfile_const_type.c: New test source file. + * testfile_entry_value.c: Likewise. + * testfile_implicit_pointer.c: Likewise. + * testfile_implicit_value.c: Likewise. + * testfile_parameter_ref.c: Likewise. + * testfile_const_type.bz2: New test file. + * testfile_entry_value.bz2: Likewise. + * testfile_implicit_pointer.bz2: Likewise. + * testfile_implicit_value.bz2: Likewise. + * testfile_parameter_ref.bz2: Likewise. + * varlocs.c: New test source. + +2013-08-29 Mark Wielaard + + * run-addrcfi.sh: Add case for EM_ARM. + * testfilearm.bz2: New testfile. + * Makefile.am (EXTRA_DIST): Add testfilesarm.bz2. + +2013-08-28 Mark Wielaard + + * addrcfi.c (handle_cfi): Handle .debug_frame or .eh_frame + completely missing. + * run-addrcfi.sh: Add case for EM_S390 ELFCLASS32 and ELFCLASS64. + * testfiles390.bz2: New testfile. + * testfiles390x.bz2: Likewise. + * Makefile.am (EXTRA_DIST): Add testfiles390.bz2 and + testfiles390x.bz2. + +2013-08-28 Mark Wielaard + + * addrcfi.c (handle_cfi): Use printf not error. + * run-addrcfi.sh: Add case for EM_PPC and EM_PPC64. + * testfileppc32.bz2: New testfile. + * testfileppc64.bz2: Likewise. + * Makefile.am (EXTRA_DIST): Add testfileppc32.bz2 and + testfileppc64.bz2. + +2013-08-27 Mark Wielaard + + * run-addrcfi.sh: New test. + * Makefile.am (TESTS): Add run-addrcfi.sh. + (EXTRA_DIST): Likewise. + * addrcfi.c (op_name): New function. + (print_detail): Call and print op_name. Check ops, not result + to check if this is "same value" or "undefined". + (handle_cfi): Make sure cfa_ops doesn't point to NULL. + +2013-08-13 Mark Wielaard + + * run-addr2line-i-test.sh: New test. + * testfile-inlines.bz2: New testfile. + * Makefile.am (EXTRA_DIST): Add run-addr2line-i-test.sh and + testfile-inlines.bz2. + (TESTS): Add run-addr2line-i-test.sh. + +2013-08-12 Mark Wielaard + + * run-addr2line-test.sh: New test. + * Makefile.am (EXTRA_DIST): Add run-addr2line-test.sh. + (TESTS): Likewise. + +2013-07-23 Jan Kratochvil + + * run-unstrip-n.sh (test-core.*): Ignore libc.so.6 entry and order of + the entries. + +2013-07-02 Mark Wielaard + + * Makefile.am (EXTRA_DIST): Fix typo, forgot extension in + testfilenolines.bz2. + +2013-05-30 Jan Kratochvil + + * Makefile.am (EXTRA_DIST): Add test-core-lib.so.bz2, + test-core.core.bz2 and test-core.exec.bz2. + * run-addrname-test.sh: New test for these files. + * run-unstrip-n.sh: Update expected output. New test for these files. + * test-core-lib.so.bz2: New file. + * test-core.core.bz2: New file. + * test-core.exec.bz2: New file. + +2013-05-03 Mark Wielaard + + * testfilenolines.bz2: New test file. + * Makefile.am (EXTRA_DIST): Add testfilenolines.bz2. + * run-get-lines.sh: Run testrun_compare on testfilenolines. + +2013-04-30 Jan Kratochvil + + * dwfl-report-elf-align.c: Use false add_p_vaddr for dwfl_report_elf. + +2013-04-29 Mark Wielaard + + * test-subr.sh: Don't use pushd, just cd into test-dir. + (exit_cleanup): Don't use popd, just cd .. to get out. + +2013-04-27 Mark Wielaard + + * test-subr.sh (exit_cleanup): New function. + (trap): Use exit_cleanup as argument. + * run-native-test.sh (native_exit): New function. + (trap): For EXIT (0) use native_exit as argument. + +2013-04-27 Mark Wielaard + + * update1.c (main): Use unique tempfile name and unlink file. + * update2.c (main): Likewise. + * update3.c (main): Likewise. + * update4.c (main): Use unique tempfile name. + +2013-04-27 Mark Wielaard + + * run-alldts.sh: Add testfile-alldts to tempfiles. + * run-elf_cntl_gelf_getshdr.sh: Add test_shdr.out to tempfiles. + * run-macro-test.sh: Add readelf.macros.out to tempfiles. + * run-strip-reloc.sh: Add readelf.out, readelf.out1, readelf.out2 + and out.stripped1, out.debug1, out.stripped2, out.debug2 to tempfiles. + +2013-04-26 Mark Wielaard + + * Makefile.am (installed_TESTS_ENVIRONMENT): Export environment, + remove wrapper. + (TESTS_ENVIRONMENT): Likewise. + (installed_LOG_COMPILER): New variable defining wrapper. + (LOG_COMPILER): Likewise. + * run-*.sh: Fixup location of input and output files. + * test-subr.sh: Create test_dir, pushd to execute test in. + (trap): Remove test_dir. + (testfiles): Use abs_srcdir. + (installed_testrun): Match on abs_builddir or abs_top_builddir. + (self_test_files): Adjust path. + +2013-04-24 Mark Wielaard + + * Makefile.am: Use AM_CPPFLAGS instead of INCLUDES. + +2013-03-25 Mark Wielaard + + * run-readelf-aranges.sh: New test. + * testfilefoobarbaz.bz2: New test file. + * Makefile.am (TESTS): Add run-readelf-aranges.sh. + (EXTRA_DIST): Add run-readelf-aranges.sh and testfilefoobarbaz.bz2. + +2013-03-25 Mark Wielaard + + * run-readelf-dwz-multi.sh: Expect high_pc also as address. + +2013-03-20 Jan Kratochvil + + * Makefile.am (check_PROGRAMS): Add dwfl-report-elf-align. + (TESTS): Add run-dwfl-report-elf-align.sh. + (EXTRA_DIST): Add run-dwfl-report-elf-align.sh and + testfile-dwfl-report-elf-align-shlib.so.bz2 . + (dwfl_report_elf_align_LDADD): New. + * dwfl-report-elf-align.c: New file. + * run-dwfl-report-elf-align.sh: New file. + * testfile-dwfl-report-elf-align-shlib.so.bz2: New file. + +2013-03-12 Mark Wielaard + + * run-dwfllines.sh: New test. + * dwfllines.c: New test program. + * Makefile.am (TESTS): Add run-dwfllines.sh. + (EXTRA_DIST): Likewise. + (dwfllines_LDADD): New variable. + +2013-02-22 Mark Wielaard + + * Makefile.am (TESTS): Remove run-readelf-s.sh and run-dwflsyms.sh. + (LZMA): Add run-readelf-s.sh and run-dwflsyms.sh to TESTS. + +2013-02-15 Mark Wielaard + + * testfile-dwzstr.bz2: New testfile. + * testfile-dwzstr.multi.bz2: Likewise. + * run-readelf-dwz-multi.sh: Add readelf testfile-dwzstr test. + * Makefile.am (EXTRA_DIST): Add testfile-dwzstr.bz2 and + testfile-dwzstr.multi.bz2. + +2013-01-30 Mark Wielaard + + * testfileloc.bz2: New testfile. + * run-readelf-loc.sh: New test. + * Makefile.am (TESTS): Add run-readelf-loc.sh. + (EXTRA_DIST): Add run-readelf-loc.sh and testfileloc.bz2. + +2013-01-29 Jan Kratochvil + + * run-readelf-mixed-corenote.sh: New testcase for readelf -n of s390 + and s390x core notes. + * testfile67.bz2: New file. + * testfile68.bz2: New file. + * Makefile.am (EXTRA_DIST): Add testfile67.bz2 and testfile68.bz2 . + +2013-01-23 Mark Wielaard + + * testfilebasmin.bz2: New testfile. + * Makefile.am (EXTRA_DIST): Add testfilebasmin.bz2. + * run-readelf-s.sh: Test testfilebasmin. + * run-dwflsyms.sh: Likewise. + +2013-01-16 Mark Wielaard + + * Makefile.am (check_PROGRAMS): Add dwflsyms. + (TESTS): Add run-readelf-s.sh and run-dwflsyms.sh. + (EXTRA_DIST): Add run-readelf-s.sh, testfilebazdbg.bz2, + testfilebazdyn.bz2, testfilebazmin.bz2, testfilebazdbg.debug.bz2, + testfilebazmdb.bz2, testfilebaztab.bz2 and run-dwflsyms.sh. + (dwflsyms_LDADD): New variable. + +2013-01-07 Roland McGrath + + * run-prelink-addr-test.sh: Use ln -snf. + +2012-12-03 Mark Wielaard + + * Makefile.am (valgrind_cmd): Add --run-libc-freeres=no. + +2012-11-29 Jan Kratochvil + + * run-addrname-test.sh: New test for PIE relocation. + * testfile70.core.bz2: New file. + * testfile70.exec.bz2: New file. + * Makefile.am (EXTRA_DIST): Add testfile70.core.bz2 and + testfile70.exec.bz2 . + +2012-10-27 Jan Kratochvil + + * Makefile.am (EXTRA_DIST): Add testfile64.bz2, testfile65.bz2, + testfile69.core.bz2 and testfile69.so.bz2 . + +2012-10-17 Jan Kratochvil + + * run-addrname-test.sh: New test for DSO with build-id bias. + * testfile69.core.bz2: New file. + * testfile69.so.bz2: New file. + +2012-10-10 Jan Kratochvil + + * run-addrname-test.sh: New test for core vDSO bias. + * testfile65.bz2: New file. + +2012-10-10 Jan Kratochvil + + * run-addrname-test.sh: New test for symbol preferences. + * testfile64.bz2: New file. + +2012-10-01 Mark Wielaard + + * Makefile.am (TESTS_ENVIRONMENT): Define valgrind_cmd if USE_VALGRIND. + * test-wrapper.sh: Export VALGRIND_CMD if available. + * test-subr.sh (built_testrun): Use VALGRIND_CMD to invoke test prog. + (installed_testrun): Likewise. + +2012-09-24 Petr Machata + + * testfile63.bz2: New testfile. + * run-readelf-mixed-corenote.sh: New test. + * Makefile.am (TEST): Add run-readelf-mixed-corenote.sh. + (EXTRA_DIST): Add testfile63.bz2 and run-readelf-mixed-corenote.sh. + +2012-09-24 Petr Machata + + * testfile62.bz2: New testfile. + * run-readelf-vmcoreinfo.sh: New test. + * Makefile.am (TEST): Add run-readelf-vmcoreinfo.sh. + (EXTRA_DIST): Add testfile62.bz2 and run-readelf-vmcoreinfo.sh. + +2012-09-18 Petr Machata + + * testfile61.bz2: New testfile. + * run-allregs.sh: Run reg_test testfile61. + * Makefile.am (EXTRA_DIST): Add testfile61.bz2. + 2012-08-24 Mark Wielaard * Makefile.am (EXTRA_DIST): Add testfile60.bz2. diff --git a/tests/Makefile.am b/tests/Makefile.am index d8783e5..4cc81c9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to create Makefile.in ## -## Copyright (C) 1996-2012 Red Hat, Inc. +## Copyright (C) 1996-2014 Red Hat, Inc. ## This file is part of elfutils. ## ## This file is free software; you can redistribute it and/or modify @@ -17,17 +17,13 @@ ## along with this program. If not, see . ## include $(top_srcdir)/config/eu.am -if MUDFLAP -BUILD_RPATH = \$$ORIGIN/../backends -else BUILD_RPATH = \$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../backends:\$$ORIGIN/../libelf -endif AM_LDFLAGS = if !STANDALONE -INCLUDES += -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ - -I$(top_srcdir)/libdwfl \ +AM_CPPFLAGS += -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ + -I$(top_srcdir)/libdwfl -I$(top_srcdir)/libdwelf \ -I$(top_srcdir)/libebl -I$(top_srcdir)/libelf \ -I$(top_srcdir)/lib -I.. AM_LDFLAGS += -Wl,-rpath-link,../libasm:../libdw:../libelf @@ -50,11 +46,27 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ dwfl-addr-sect dwfl-bug-report early-offscn \ dwfl-bug-getmodules dwarf-getmacros addrcfi \ test-flag-nobits dwarf-getstring rerequest_tag \ - alldts md5-sha1-test typeiter low_high_pc \ - test-elf_cntl_gelf_getshdr + alldts md5-sha1-test typeiter typeiter2 low_high_pc \ + test-elf_cntl_gelf_getshdr dwflsyms dwfllines \ + dwfl-report-elf-align varlocs backtrace backtrace-child \ + backtrace-data backtrace-dwarf debuglink debugaltlink \ + buildid + asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ asm-tst6 asm-tst7 asm-tst8 asm-tst9 +if BIARCH +check_PROGRAMS += backtrace-child-biarch +endif + +# Substitute $(COMPILE). +backtrace-child-biarch$(EXEEXT): backtrace-child.c + $(CC_BIARCH) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) $(backtrace_child_CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) $(backtrace_child_LDFLAGS) \ + -o $@ $< + TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ update1 update2 update3 update4 \ run-show-die-info.sh run-get-files.sh run-get-lines.sh \ @@ -64,17 +76,19 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ run-strip-test3.sh run-strip-test4.sh run-strip-test5.sh \ run-strip-test6.sh run-strip-test7.sh run-strip-test8.sh \ run-strip-groups.sh run-strip-reloc.sh \ - run-unstrip-test.sh run-unstrip-test2.sh \ + run-unstrip-test.sh run-unstrip-test2.sh run-unstrip-M.sh \ run-ecp-test.sh run-ecp-test2.sh run-alldts.sh \ run-elflint-test.sh run-elflint-self.sh run-ranlib-test.sh \ run-ranlib-test2.sh run-ranlib-test3.sh run-ranlib-test4.sh \ run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \ - run-find-prologues.sh run-allregs.sh \ + run-find-prologues.sh run-allregs.sh run-addrcfi.sh \ run-nm-self.sh run-readelf-self.sh \ run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \ run-readelf-test4.sh run-readelf-twofiles.sh \ - run-readelf-macro.sh \ + run-readelf-macro.sh run-readelf-loc.sh \ + run-readelf-aranges.sh run-readelf-line.sh \ run-native-test.sh run-bug1-test.sh \ + run-debuglink.sh run-debugaltlink.sh run-buildid.sh \ dwfl-bug-addr-overflow run-addrname-test.sh \ dwfl-bug-fd-leak dwfl-bug-report \ run-dwfl-bug-offline-rel.sh run-dwfl-addr-sect.sh \ @@ -84,22 +98,44 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ run-dwarf-getstring.sh run-rerequest_tag.sh run-typeiter.sh \ run-readelf-d.sh run-readelf-gdb_index.sh run-unstrip-n.sh \ run-low_high_pc.sh run-macro-test.sh run-elf_cntl_gelf_getshdr.sh \ - run-test-archive64.sh + 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-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 \ + run-backtrace-core-i386.sh run-backtrace-core-ppc.sh \ + 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 + +if !BIARCH +export ELFUTILS_DISABLE_BIARCH = 1 +endif + +if !DEMANGLE +export ELFUTILS_DISABLE_DEMANGLE = 1 +endif if !STANDALONE check_PROGRAMS += msg_tst md5-sha1-test TESTS += msg_tst md5-sha1-test endif -if HAVE_LIBASM -check_PROGRAMS += $(asm_TESTS) -TESTS += $(asm_TESTS) +if LZMA +TESTS += run-readelf-s.sh run-dwflsyms.sh endif -if ENABLE_DWZ -TESTS += run-readelf-dwz-multi.sh +if ZLIB +TESTS += run-readelf-zdebug.sh endif +if HAVE_LIBASM +check_PROGRAMS += $(asm_TESTS) +TESTS += $(asm_TESTS) +endif EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-show-die-info.sh run-get-files.sh run-get-lines.sh \ @@ -110,16 +146,17 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ testfile5.bz2 testfile6.bz2 testfile7.bz2 testfile8.bz2 \ testfile9.bz2 testfile10.bz2 testfile11.bz2 testfile12.bz2 \ testfile13.bz2 run-strip-test3.sh run-allfcts.sh \ + testfile_class_func.bz2 testfile_nested_funcs.bz2 \ run-line2addr.sh run-elflint-test.sh testfile14.bz2 \ run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \ run-strip-test7.sh run-strip-test8.sh run-strip-groups.sh \ run-strip-reloc.sh hello_i386.ko.bz2 hello_x86_64.ko.bz2 \ - hello_ppc64.ko.bz2 hello_s390.ko.bz2 \ - run-unstrip-test.sh run-unstrip-test2.sh \ + hello_ppc64.ko.bz2 hello_s390.ko.bz2 hello_aarch64.ko.bz2 \ + run-unstrip-test.sh run-unstrip-test2.sh run-unstrip-M.sh\ run-elflint-self.sh run-ranlib-test.sh run-ranlib-test2.sh \ run-ranlib-test3.sh run-ranlib-test4.sh \ run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \ - run-nm-self.sh run-readelf-self.sh \ + run-nm-self.sh run-readelf-self.sh run-addrcfi.sh \ run-find-prologues.sh run-allregs.sh run-native-test.sh \ run-addrname-test.sh run-dwfl-bug-offline-rel.sh \ run-dwfl-addr-sect.sh run-early-offscn.sh \ @@ -137,20 +174,27 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \ run-readelf-test4.sh run-readelf-twofiles.sh \ run-bug1-test.sh testfile28.bz2 testfile28.rdwr.bz2 \ + run-debuglink.sh run-debugaltlink.sh run-buildid.sh \ testfile29.bz2 testfile29.rdwr.bz2 \ testfile30.bz2 testfile31.bz2 testfile32.bz2 testfile33.bz2 \ testfile34.bz2 testfile35.bz2 testfile35.debug.bz2 \ testfile36.bz2 testfile36.debug.bz2 \ testfile37.bz2 testfile37.debug.bz2 \ testfile38.bz2 testfile39.bz2 testfile40.bz2 testfile40.debug.bz2 \ - testfile41.bz2 testfile42.bz2 testfile43.bz2 \ + testfile41.bz2 testfile42.bz2 testfile42_noshdrs.bz2 \ + testfile43.bz2 \ testfile44.S.bz2 testfile44.expect.bz2 run-disasm-x86.sh \ testfile45.S.bz2 testfile45.expect.bz2 run-disasm-x86-64.sh \ testfile46.bz2 testfile47.bz2 testfile48.bz2 testfile48.debug.bz2 \ testfile49.bz2 testfile50.bz2 testfile51.bz2 \ run-readelf-macro.sh testfilemacro.bz2 \ + run-readelf-loc.sh testfileloc.bz2 \ + run-readelf-aranges.sh run-readelf-line.sh testfilefoobarbaz.bz2 \ run-readelf-dwz-multi.sh libtestfile_multi_shared.so.bz2 \ testfile_multi.dwz.bz2 testfile_multi_main.bz2 \ + testfile-dwzstr.bz2 testfile-dwzstr.multi.bz2 \ + run-allfcts-multi.sh \ + test-offset-loop.bz2 test-offset-loop.alt.bz2 \ run-prelink-addr-test.sh \ testfile52-32.so.bz2 testfile52-32.so.debug.bz2 \ testfile52-32.prelink.so.bz2 testfile52-32.noshdrs.so.bz2 \ @@ -171,34 +215,104 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-readelf-d.sh testlib_dynseg.so.bz2 \ run-readelf-gdb_index.sh testfilegdbindex5.bz2 \ testfilegdbindex7.bz2 \ + run-readelf-s.sh testfilebazdbg.bz2 testfilebazdyn.bz2 \ + testfilebazmin.bz2 testfilebazdbg.debug.bz2 testfilebazmdb.bz2 \ + testfilebaztab.bz2 testfilebasmin.bz2 testfilebaxmin.bz2 \ + testfilebazdbg_pl.bz2 testfilebazmin_pl.bz2 \ + testfilebazdbg_plr.bz2 testfilebazmin_plr.bz2 \ + testfilebazdbgppc64.bz2 testfilebazdbgppc64.debug.bz2 \ + testfilebazdbgppc64_pl.bz2 testfilebazdbgppc64_plr.bz2 \ + testfilebazdynppc64.bz2 testfilebazmdbppc64.bz2 \ + testfilebazminppc64.bz2 testfilebazminppc64_pl.bz2 \ + testfilebazminppc64_plr.bz2 testfilebaztabppc64.bz2 \ + run-dwflsyms.sh \ run-unstrip-n.sh testcore-rtlib.bz2 testcore-rtlib-ppc.bz2 \ run-low_high_pc.sh testfile_low_high_pc.bz2 \ run-macro-test.sh testfile-macinfo.bz2 testfile-macros.bz2 \ run-elf_cntl_gelf_getshdr.sh \ run-test-archive64.sh testarchive64.a.bz2 \ - testfile60.bz2 + testfile60.bz2 testfile61.bz2 \ + run-readelf-vmcoreinfo.sh testfile62.bz2 \ + run-readelf-mixed-corenote.sh testfile63.bz2 testfile64.bz2 \ + testfile65.bz2 testfile67.bz2 testfile68.bz2 \ + testfile69.core.bz2 testfile69.so.bz2 \ + testfile70.core.bz2 testfile70.exec.bz2 testfile71.bz2 \ + run-dwfllines.sh run-dwfl-report-elf-align.sh \ + testfile-dwfl-report-elf-align-shlib.so.bz2 \ + 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 \ + testfileppc32.bz2 testfileppc64.bz2 \ + testfiles390.bz2 testfiles390x.bz2 \ + testfilearm.bz2 testfileaarch64.bz2 \ + run-varlocs.sh \ + testfile_const_type.c testfile_const_type.bz2 \ + testfile_implicit_pointer.c testfile_implicit_pointer.bz2 \ + testfile_parameter_ref.c testfile_parameter_ref.bz2 \ + testfile_entry_value.c testfile_entry_value.bz2 \ + testfile_implicit_value.c testfile_implicit_value.bz2 \ + testfile_aarch64_core.bz2 testfile_i686_core.bz2 \ + run-funcretval.sh funcretval_test.c funcretval_test_aarch64.bz2 \ + run-backtrace-data.sh run-backtrace-dwarf.sh cleanup-13.c \ + run-backtrace-native.sh run-backtrace-native-biarch.sh \ + run-backtrace-native-core.sh run-backtrace-native-core-biarch.sh \ + run-backtrace-core-x86_64.sh run-backtrace-core-i386.sh \ + backtrace-subr.sh backtrace.i386.core.bz2 backtrace.i386.exec.bz2 \ + backtrace.x86_64.core.bz2 backtrace.x86_64.exec.bz2 \ + backtrace.ppc.core.bz2 backtrace.ppc.exec.bz2 \ + run-backtrace-core-ppc.sh testfile66.bz2 testfile66.core.bz2 \ + backtrace.s390x.core.bz2 backtrace.s390x.exec.bz2 \ + backtrace.s390.core.bz2 backtrace.s390.exec.bz2 \ + run-backtrace-core-s390x.sh run-backtrace-core-s390.sh \ + run-backtrace-core-aarch64.sh \ + backtrace.aarch64.core.bz2 backtrace.aarch64.exec.bz2 \ + run-backtrace-demangle.sh testfile-backtrace-demangle.bz2 \ + testfile-backtrace-demangle.cc \ + 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 -installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \ - bindir=$(DESTDIR)$(bindir) \ - LC_ALL=C LANG=C \ - $(srcdir)/test-wrapper.sh \ - installed $(tests_rpath) \ - $(program_transform_name) +if USE_VALGRIND +valgrind_cmd='valgrind -q --error-exitcode=1 --run-libc-freeres=no' +endif + + +installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir); \ + bindir=$(DESTDIR)$(bindir); \ + LC_ALL=C; LANG=C; \ + VALGRIND_CMD=$(valgrind_cmd); \ + abs_srcdir=$(abs_srcdir); \ + abs_builddir=$(abs_builddir); \ + abs_top_builddir=$(abs_top_builddir); \ + export abs_srcdir; export abs_builddir; \ + export abs_top_builddir; \ + export libdir; export bindir; \ + export LC_ALL; export LANG; export VALGRIND_CMD; \ + NM=$(NM); export NM; +installed_LOG_COMPILER = $(abs_srcdir)/test-wrapper.sh \ + installed $(tests_rpath) \ + '$(program_transform_name)' if STANDALONE TESTS_ENVIRONMENT = $(installed_TESTS_ENVIRONMENT) +LOG_COMPILER = $(installed_LOG_COMPILER) else !STANDALONE -TESTS_ENVIRONMENT = LC_ALL=C LANG=C $(srcdir)/test-wrapper.sh \ - ../libdw:../backends:../libelf:../libasm +TESTS_ENVIRONMENT = LC_ALL=C; LANG=C; VALGRIND_CMD=$(valgrind_cmd); \ + abs_srcdir=$(abs_srcdir); abs_builddir=$(abs_builddir); \ + abs_top_builddir=$(abs_top_builddir); \ + export abs_srcdir; export abs_builddir; \ + export abs_top_builddir; \ + export LC_ALL; export LANG; export VALGRIND_CMD; \ + NM=$(NM); export NM; +LOG_COMPILER = $(abs_srcdir)/test-wrapper.sh \ + $(abs_top_builddir)/libdw:$(abs_top_builddir)/backends:$(abs_top_builddir)/libelf:$(abs_top_builddir)/libasm installcheck-local: $(MAKE) $(AM_MAKEFLAGS) \ - TESTS_ENVIRONMENT='$(installed_TESTS_ENVIRONMENT)' check-TESTS + TESTS_ENVIRONMENT="$(installed_TESTS_ENVIRONMENT)" \ + LOG_COMPILER="$(installed_LOG_COMPILER)" check-TESTS endif !STANDALONE -if MUDFLAP -static_build = yes -endif - if STANDALONE libdw = -ldw libelf = -lelf @@ -218,65 +332,80 @@ libebl = ../libebl/libebl.a libeu = ../lib/libeu.a endif !STANDALONE -arextract_LDADD = $(libelf) $(libmudflap) -arsymtest_LDADD = $(libelf) $(libmudflap) -newfile_LDADD = $(libelf) $(libmudflap) -saridx_LDADD = $(libelf) $(libmudflap) -scnnames_LDADD = $(libelf) $(libmudflap) -sectiondump_LDADD = $(libelf) $(libmudflap) -showptable_LDADD = $(libelf) $(libmudflap) -hash_LDADD = $(libelf) $(libmudflap) -test_nlist_LDADD = $(libelf) $(libmudflap) -msg_tst_LDADD = $(libelf) $(libmudflap) -newscn_LDADD = $(libelf) $(libmudflap) -early_offscn_LDADD = $(libelf) $(libmudflap) -ecp_LDADD = $(libelf) $(libmudflap) -update1_LDADD = $(libelf) $(libmudflap) -update2_LDADD = $(libelf) $(libmudflap) -update3_LDADD = $(libebl) $(libelf) $(libmudflap) -update4_LDADD = $(libebl) $(libelf) $(libmudflap) -show_die_info_LDADD = $(libdw) $(libelf) $(libmudflap) -get_pubnames_LDADD = $(libdw) $(libelf) $(libmudflap) -show_abbrev_LDADD = $(libdw) $(libelf) $(libmudflap) -get_lines_LDADD = $(libdw) $(libelf) $(libmudflap) -get_files_LDADD = $(libdw) $(libelf) $(libmudflap) -get_aranges_LDADD = $(libdw) $(libelf) $(libmudflap) -allfcts_LDADD = $(libdw) $(libelf) $(libmudflap) -line2addr_no_Wformat = yes -line2addr_LDADD = $(libdw) $(libmudflap) -addrscopes_LDADD = $(libdw) $(libmudflap) -funcscopes_LDADD = $(libdw) $(libmudflap) -funcretval_LDADD = $(libdw) $(libmudflap) -allregs_LDADD = $(libdw) $(libmudflap) -find_prologues_LDADD = $(libdw) $(libmudflap) -#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) $(libmudflap) -asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst3_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst4_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst5_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -rdwrmmap_LDADD = $(libelf) $(libmudflap) -dwfl_bug_addr_overflow_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -arls_LDADD = $(libelf) $(libmudflap) -dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -dwarf_getmacros_LDADD = $(libdw) $(libmudflap) -dwarf_getstring_LDADD = $(libdw) $(libmudflap) -addrcfi_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -test_flag_nobits_LDADD = $(libelf) $(libmudflap) -rerequest_tag_LDADD = $(libdw) $(libmudflap) -alldts_LDADD = $(libebl) $(libelf) $(libmudflap) +arextract_LDADD = $(libelf) +arsymtest_LDADD = $(libelf) +newfile_LDADD = $(libelf) +saridx_LDADD = $(libelf) +scnnames_LDADD = $(libelf) +sectiondump_LDADD = $(libelf) +showptable_LDADD = $(libelf) +hash_LDADD = $(libelf) +test_nlist_LDADD = $(libelf) +msg_tst_LDADD = $(libelf) +newscn_LDADD = $(libelf) +early_offscn_LDADD = $(libelf) +ecp_LDADD = $(libelf) +update1_LDADD = $(libelf) +update2_LDADD = $(libelf) +update3_LDADD = $(libebl) $(libelf) +update4_LDADD = $(libebl) $(libelf) +show_die_info_LDADD = $(libdw) $(libelf) +get_pubnames_LDADD = $(libdw) $(libelf) +show_abbrev_LDADD = $(libdw) $(libelf) +get_lines_LDADD = $(libdw) $(libelf) +get_files_LDADD = $(libdw) $(libelf) +get_aranges_LDADD = $(libdw) $(libelf) +allfcts_LDADD = $(libdw) $(libelf) +line2addr_LDADD = $(libdw) +addrscopes_LDADD = $(libdw) +funcscopes_LDADD = $(libdw) +funcretval_LDADD = $(libdw) +allregs_LDADD = $(libdw) +find_prologues_LDADD = $(libdw) +#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) +asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst3_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst4_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst5_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) -ldl +dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) -ldl +rdwrmmap_LDADD = $(libelf) +dwfl_bug_addr_overflow_LDADD = $(libdw) $(libebl) $(libelf) -ldl +arls_LDADD = $(libelf) +dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) -ldl +dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) -ldl +dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) -ldl +dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) -ldl +dwarf_getmacros_LDADD = $(libdw) +dwarf_getstring_LDADD = $(libdw) +addrcfi_LDADD = $(libdw) $(libebl) $(libelf) -ldl +test_flag_nobits_LDADD = $(libelf) +rerequest_tag_LDADD = $(libdw) +alldts_LDADD = $(libebl) $(libelf) md5_sha1_test_LDADD = $(libeu) -typeiter_LDADD = $(libdw) $(libelf) $(libmudflap) -low_high_pc_LDADD = $(libdw) $(libelf) $(libmudflap) -test_elf_cntl_gelf_getshdr_LDADD = $(libelf) $(libmudflap) +typeiter_LDADD = $(libdw) $(libelf) +typeiter2_LDADD = $(libdw) $(libelf) +low_high_pc_LDADD = $(libdw) $(libelf) +test_elf_cntl_gelf_getshdr_LDADD = $(libelf) +dwflsyms_LDADD = $(libdw) $(libelf) +dwfllines_LDADD = $(libdw) $(libelf) +dwfl_report_elf_align_LDADD = $(libdw) +varlocs_LDADD = $(libdw) $(libelf) +backtrace_LDADD = $(libdw) $(libelf) +# backtrace-child-biarch also uses those *_CFLAGS and *_LDLAGS variables: +backtrace_child_CFLAGS = -fPIE +backtrace_child_LDFLAGS = -pie -pthread +backtrace_child_biarch_SOURCES = backtrace-child.c +backtrace_data_LDADD = $(libdw) $(libelf) +backtrace_dwarf_CFLAGS = -Wno-unused-parameter +backtrace_dwarf_LDADD = $(libdw) $(libelf) +debuglink_LDADD = $(libdw) $(libelf) +debugaltlink_LDADD = $(libdw) $(libelf) +buildid_LDADD = $(libdw) $(libelf) if GCOV check: check-am coverage diff --git a/tests/Makefile.in b/tests/Makefile.in index 30a10ad..5ecc710 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -1,9 +1,8 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,6 +14,51 @@ @SET_MAKE@ VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -33,16 +77,16 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/config/eu.am ChangeLog -@MUDFLAP_TRUE@am__append_1 = -fmudflap -@STANDALONE_FALSE@am__append_2 = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ -@STANDALONE_FALSE@ -I$(top_srcdir)/libdwfl \ +DIST_COMMON = $(top_srcdir)/config/eu.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/config/depcomp \ + $(top_srcdir)/config/test-driver ChangeLog +@STANDALONE_FALSE@am__append_1 = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ +@STANDALONE_FALSE@ -I$(top_srcdir)/libdwfl -I$(top_srcdir)/libdwelf \ @STANDALONE_FALSE@ -I$(top_srcdir)/libebl -I$(top_srcdir)/libelf \ @STANDALONE_FALSE@ -I$(top_srcdir)/lib -I.. -@STANDALONE_FALSE@am__append_3 = -Wl,-rpath-link,../libasm:../libdw:../libelf -@TESTS_RPATH_TRUE@am__append_4 = -Wl,-rpath,$(BUILD_RPATH) +@STANDALONE_FALSE@am__append_2 = -Wl,-rpath-link,../libasm:../libdw:../libelf +@TESTS_RPATH_TRUE@am__append_3 = -Wl,-rpath,$(BUILD_RPATH) check_PROGRAMS = arextract$(EXEEXT) arsymtest$(EXEEXT) \ newfile$(EXEEXT) saridx$(EXEEXT) scnnames$(EXEEXT) \ sectiondump$(EXEEXT) showptable$(EXEEXT) update1$(EXEEXT) \ @@ -60,9 +104,14 @@ check_PROGRAMS = arextract$(EXEEXT) arsymtest$(EXEEXT) \ dwarf-getmacros$(EXEEXT) addrcfi$(EXEEXT) \ test-flag-nobits$(EXEEXT) dwarf-getstring$(EXEEXT) \ rerequest_tag$(EXEEXT) alldts$(EXEEXT) md5-sha1-test$(EXEEXT) \ - typeiter$(EXEEXT) low_high_pc$(EXEEXT) \ - test-elf_cntl_gelf_getshdr$(EXEEXT) $(am__EXEEXT_1) \ - $(am__EXEEXT_3) + typeiter$(EXEEXT) typeiter2$(EXEEXT) low_high_pc$(EXEEXT) \ + test-elf_cntl_gelf_getshdr$(EXEEXT) dwflsyms$(EXEEXT) \ + dwfllines$(EXEEXT) dwfl-report-elf-align$(EXEEXT) \ + varlocs$(EXEEXT) backtrace$(EXEEXT) backtrace-child$(EXEEXT) \ + backtrace-data$(EXEEXT) backtrace-dwarf$(EXEEXT) \ + debuglink$(EXEEXT) debugaltlink$(EXEEXT) buildid$(EXEEXT) \ + $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_4) +@BIARCH_TRUE@am__append_4 = backtrace-child-biarch TESTS = run-arextract.sh run-arsymtest.sh newfile$(EXEEXT) \ test-nlist$(EXEEXT) update1$(EXEEXT) update2$(EXEEXT) \ update3$(EXEEXT) update4$(EXEEXT) run-show-die-info.sh \ @@ -73,15 +122,17 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile$(EXEEXT) \ run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \ run-strip-test7.sh run-strip-test8.sh run-strip-groups.sh \ run-strip-reloc.sh run-unstrip-test.sh run-unstrip-test2.sh \ - run-ecp-test.sh run-ecp-test2.sh run-alldts.sh \ - run-elflint-test.sh run-elflint-self.sh run-ranlib-test.sh \ - run-ranlib-test2.sh run-ranlib-test3.sh run-ranlib-test4.sh \ - run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \ - run-find-prologues.sh run-allregs.sh run-nm-self.sh \ - run-readelf-self.sh run-readelf-test1.sh run-readelf-test2.sh \ - run-readelf-test3.sh run-readelf-test4.sh \ - run-readelf-twofiles.sh run-readelf-macro.sh \ - run-native-test.sh run-bug1-test.sh \ + run-unstrip-M.sh run-ecp-test.sh run-ecp-test2.sh \ + run-alldts.sh run-elflint-test.sh run-elflint-self.sh \ + run-ranlib-test.sh run-ranlib-test2.sh run-ranlib-test3.sh \ + run-ranlib-test4.sh run-addrscopes.sh run-strings-test.sh \ + run-funcscopes.sh run-find-prologues.sh run-allregs.sh \ + run-addrcfi.sh run-nm-self.sh run-readelf-self.sh \ + run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \ + run-readelf-test4.sh run-readelf-twofiles.sh \ + run-readelf-macro.sh run-readelf-loc.sh run-readelf-aranges.sh \ + run-readelf-line.sh run-native-test.sh run-bug1-test.sh \ + run-debuglink.sh run-debugaltlink.sh run-buildid.sh \ dwfl-bug-addr-overflow$(EXEEXT) run-addrname-test.sh \ dwfl-bug-fd-leak$(EXEEXT) dwfl-bug-report$(EXEEXT) \ run-dwfl-bug-offline-rel.sh run-dwfl-addr-sect.sh \ @@ -91,16 +142,31 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile$(EXEEXT) \ run-rerequest_tag.sh run-typeiter.sh run-readelf-d.sh \ run-readelf-gdb_index.sh run-unstrip-n.sh run-low_high_pc.sh \ run-macro-test.sh run-elf_cntl_gelf_getshdr.sh \ - run-test-archive64.sh $(am__EXEEXT_1) $(am__EXEEXT_3) \ - $(am__append_9) + 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-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 run-backtrace-core-i386.sh \ + run-backtrace-core-ppc.sh 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 $(am__EXEEXT_2) $(am__append_7) \ + $(am__append_8) $(am__EXEEXT_4) @STANDALONE_FALSE@am__append_5 = msg_tst md5-sha1-test @STANDALONE_FALSE@am__append_6 = msg_tst md5-sha1-test -@HAVE_LIBASM_TRUE@am__append_7 = $(asm_TESTS) -@HAVE_LIBASM_TRUE@am__append_8 = $(asm_TESTS) -@ENABLE_DWZ_TRUE@am__append_9 = run-readelf-dwz-multi.sh +@LZMA_TRUE@am__append_7 = run-readelf-s.sh run-dwflsyms.sh +@ZLIB_TRUE@am__append_8 = run-readelf-zdebug.sh +@HAVE_LIBASM_TRUE@am__append_9 = $(asm_TESTS) +@HAVE_LIBASM_TRUE@am__append_10 = $(asm_TESTS) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/biarch.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/zip.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -109,12 +175,13 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = -@STANDALONE_FALSE@am__EXEEXT_1 = msg_tst$(EXEEXT) \ +@BIARCH_TRUE@am__EXEEXT_1 = backtrace-child-biarch$(EXEEXT) +@STANDALONE_FALSE@am__EXEEXT_2 = msg_tst$(EXEEXT) \ @STANDALONE_FALSE@ md5-sha1-test$(EXEEXT) -am__EXEEXT_2 = asm-tst1$(EXEEXT) asm-tst2$(EXEEXT) asm-tst3$(EXEEXT) \ +am__EXEEXT_3 = asm-tst1$(EXEEXT) asm-tst2$(EXEEXT) asm-tst3$(EXEEXT) \ asm-tst4$(EXEEXT) asm-tst5$(EXEEXT) asm-tst6$(EXEEXT) \ asm-tst7$(EXEEXT) asm-tst8$(EXEEXT) asm-tst9$(EXEEXT) -@HAVE_LIBASM_TRUE@am__EXEEXT_3 = $(am__EXEEXT_2) +@HAVE_LIBASM_TRUE@am__EXEEXT_4 = $(am__EXEEXT_3) addrcfi_SOURCES = addrcfi.c addrcfi_OBJECTS = addrcfi.$(OBJEXT) am__DEPENDENCIES_1 = @@ -131,30 +198,28 @@ am__DEPENDENCIES_1 = @BUILD_STATIC_TRUE@@STANDALONE_FALSE@ $(am__DEPENDENCIES_2) \ @BUILD_STATIC_TRUE@@STANDALONE_FALSE@ $(am__DEPENDENCIES_3) addrcfi_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) addrscopes_SOURCES = addrscopes.c addrscopes_OBJECTS = addrscopes.$(OBJEXT) -addrscopes_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +addrscopes_DEPENDENCIES = $(am__DEPENDENCIES_4) alldts_SOURCES = alldts.c alldts_OBJECTS = alldts.$(OBJEXT) -alldts_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +alldts_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) allfcts_SOURCES = allfcts.c allfcts_OBJECTS = allfcts.$(OBJEXT) -allfcts_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +allfcts_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) allregs_SOURCES = allregs.c allregs_OBJECTS = allregs.$(OBJEXT) -allregs_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +allregs_DEPENDENCIES = $(am__DEPENDENCIES_4) arextract_SOURCES = arextract.c arextract_OBJECTS = arextract.$(OBJEXT) -arextract_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +arextract_DEPENDENCIES = $(am__DEPENDENCIES_2) arls_SOURCES = arls.c arls_OBJECTS = arls.$(OBJEXT) -arls_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +arls_DEPENDENCIES = $(am__DEPENDENCIES_2) arsymtest_SOURCES = arsymtest.c arsymtest_OBJECTS = arsymtest.$(OBJEXT) -arsymtest_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +arsymtest_DEPENDENCIES = $(am__DEPENDENCIES_2) asm_tst1_SOURCES = asm-tst1.c asm_tst1_OBJECTS = asm-tst1.$(OBJEXT) @BUILD_STATIC_FALSE@@STANDALONE_FALSE@am__DEPENDENCIES_5 = \ @@ -162,202 +227,256 @@ asm_tst1_OBJECTS = asm-tst1.$(OBJEXT) @BUILD_STATIC_TRUE@@STANDALONE_FALSE@am__DEPENDENCIES_5 = \ @BUILD_STATIC_TRUE@@STANDALONE_FALSE@ ../libasm/libasm.a asm_tst1_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) asm_tst2_SOURCES = asm-tst2.c asm_tst2_OBJECTS = asm-tst2.$(OBJEXT) asm_tst2_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) asm_tst3_SOURCES = asm-tst3.c asm_tst3_OBJECTS = asm-tst3.$(OBJEXT) asm_tst3_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) asm_tst4_SOURCES = asm-tst4.c asm_tst4_OBJECTS = asm-tst4.$(OBJEXT) asm_tst4_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) asm_tst5_SOURCES = asm-tst5.c asm_tst5_OBJECTS = asm-tst5.$(OBJEXT) asm_tst5_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) asm_tst6_SOURCES = asm-tst6.c asm_tst6_OBJECTS = asm-tst6.$(OBJEXT) asm_tst6_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) asm_tst7_SOURCES = asm-tst7.c asm_tst7_OBJECTS = asm-tst7.$(OBJEXT) asm_tst7_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) asm_tst8_SOURCES = asm-tst8.c asm_tst8_OBJECTS = asm-tst8.$(OBJEXT) asm_tst8_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) asm_tst9_SOURCES = asm-tst9.c asm_tst9_OBJECTS = asm-tst9.$(OBJEXT) asm_tst9_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) +backtrace_SOURCES = backtrace.c +backtrace_OBJECTS = backtrace.$(OBJEXT) +backtrace_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) +backtrace_child_SOURCES = backtrace-child.c +backtrace_child_OBJECTS = backtrace_child-backtrace-child.$(OBJEXT) +backtrace_child_LDADD = $(LDADD) +backtrace_child_LINK = $(CCLD) $(backtrace_child_CFLAGS) $(CFLAGS) \ + $(backtrace_child_LDFLAGS) $(LDFLAGS) -o $@ +am_backtrace_child_biarch_OBJECTS = backtrace-child.$(OBJEXT) +backtrace_child_biarch_OBJECTS = $(am_backtrace_child_biarch_OBJECTS) +backtrace_child_biarch_LDADD = $(LDADD) +backtrace_data_SOURCES = backtrace-data.c +backtrace_data_OBJECTS = backtrace-data.$(OBJEXT) +backtrace_data_DEPENDENCIES = $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_2) +backtrace_dwarf_SOURCES = backtrace-dwarf.c +backtrace_dwarf_OBJECTS = backtrace_dwarf-backtrace-dwarf.$(OBJEXT) +backtrace_dwarf_DEPENDENCIES = $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_2) +backtrace_dwarf_LINK = $(CCLD) $(backtrace_dwarf_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +buildid_SOURCES = buildid.c +buildid_OBJECTS = buildid.$(OBJEXT) +buildid_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) +debugaltlink_SOURCES = debugaltlink.c +debugaltlink_OBJECTS = debugaltlink.$(OBJEXT) +debugaltlink_DEPENDENCIES = $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_2) +debuglink_SOURCES = debuglink.c +debuglink_OBJECTS = debuglink.$(OBJEXT) +debuglink_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) dwarf_getmacros_SOURCES = dwarf-getmacros.c dwarf_getmacros_OBJECTS = dwarf-getmacros.$(OBJEXT) -dwarf_getmacros_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_1) +dwarf_getmacros_DEPENDENCIES = $(am__DEPENDENCIES_4) dwarf_getstring_SOURCES = dwarf-getstring.c dwarf_getstring_OBJECTS = dwarf-getstring.$(OBJEXT) -dwarf_getstring_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_1) +dwarf_getstring_DEPENDENCIES = $(am__DEPENDENCIES_4) dwfl_addr_sect_SOURCES = dwfl-addr-sect.c dwfl_addr_sect_OBJECTS = dwfl-addr-sect.$(OBJEXT) dwfl_addr_sect_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) dwfl_bug_addr_overflow_SOURCES = dwfl-bug-addr-overflow.c dwfl_bug_addr_overflow_OBJECTS = dwfl-bug-addr-overflow.$(OBJEXT) dwfl_bug_addr_overflow_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) dwfl_bug_fd_leak_SOURCES = dwfl-bug-fd-leak.c dwfl_bug_fd_leak_OBJECTS = dwfl-bug-fd-leak.$(OBJEXT) dwfl_bug_fd_leak_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) dwfl_bug_getmodules_SOURCES = dwfl-bug-getmodules.c dwfl_bug_getmodules_OBJECTS = dwfl-bug-getmodules.$(OBJEXT) dwfl_bug_getmodules_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) dwfl_bug_report_SOURCES = dwfl-bug-report.c dwfl_bug_report_OBJECTS = dwfl-bug-report.$(OBJEXT) dwfl_bug_report_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) +dwfl_report_elf_align_SOURCES = dwfl-report-elf-align.c +dwfl_report_elf_align_OBJECTS = dwfl-report-elf-align.$(OBJEXT) +dwfl_report_elf_align_DEPENDENCIES = $(am__DEPENDENCIES_4) +dwfllines_SOURCES = dwfllines.c +dwfllines_OBJECTS = dwfllines.$(OBJEXT) +dwfllines_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) dwflmodtest_SOURCES = dwflmodtest.c dwflmodtest_OBJECTS = dwflmodtest.$(OBJEXT) dwflmodtest_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_3) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) +dwflsyms_SOURCES = dwflsyms.c +dwflsyms_OBJECTS = dwflsyms.$(OBJEXT) +dwflsyms_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) early_offscn_SOURCES = early-offscn.c early_offscn_OBJECTS = early-offscn.$(OBJEXT) -early_offscn_DEPENDENCIES = $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +early_offscn_DEPENDENCIES = $(am__DEPENDENCIES_2) ecp_SOURCES = ecp.c ecp_OBJECTS = ecp.$(OBJEXT) -ecp_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +ecp_DEPENDENCIES = $(am__DEPENDENCIES_2) find_prologues_SOURCES = find-prologues.c find_prologues_OBJECTS = find-prologues.$(OBJEXT) -find_prologues_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_1) +find_prologues_DEPENDENCIES = $(am__DEPENDENCIES_4) funcretval_SOURCES = funcretval.c funcretval_OBJECTS = funcretval.$(OBJEXT) -funcretval_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +funcretval_DEPENDENCIES = $(am__DEPENDENCIES_4) funcscopes_SOURCES = funcscopes.c funcscopes_OBJECTS = funcscopes.$(OBJEXT) -funcscopes_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +funcscopes_DEPENDENCIES = $(am__DEPENDENCIES_4) get_aranges_SOURCES = get-aranges.c get_aranges_OBJECTS = get-aranges.$(OBJEXT) -get_aranges_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +get_aranges_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) get_files_SOURCES = get-files.c get_files_OBJECTS = get-files.$(OBJEXT) -get_files_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +get_files_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) get_lines_SOURCES = get-lines.c get_lines_OBJECTS = get-lines.$(OBJEXT) -get_lines_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +get_lines_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) get_pubnames_SOURCES = get-pubnames.c get_pubnames_OBJECTS = get-pubnames.$(OBJEXT) get_pubnames_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) hash_SOURCES = hash.c hash_OBJECTS = hash.$(OBJEXT) -hash_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +hash_DEPENDENCIES = $(am__DEPENDENCIES_2) line2addr_SOURCES = line2addr.c line2addr_OBJECTS = line2addr.$(OBJEXT) -line2addr_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +line2addr_DEPENDENCIES = $(am__DEPENDENCIES_4) low_high_pc_SOURCES = low_high_pc.c low_high_pc_OBJECTS = low_high_pc.$(OBJEXT) -low_high_pc_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +low_high_pc_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) md5_sha1_test_SOURCES = md5-sha1-test.c md5_sha1_test_OBJECTS = md5-sha1-test.$(OBJEXT) md5_sha1_test_DEPENDENCIES = $(libeu) msg_tst_SOURCES = msg_tst.c msg_tst_OBJECTS = msg_tst.$(OBJEXT) -msg_tst_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +msg_tst_DEPENDENCIES = $(am__DEPENDENCIES_2) newfile_SOURCES = newfile.c newfile_OBJECTS = newfile.$(OBJEXT) -newfile_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +newfile_DEPENDENCIES = $(am__DEPENDENCIES_2) newscn_SOURCES = newscn.c newscn_OBJECTS = newscn.$(OBJEXT) -newscn_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +newscn_DEPENDENCIES = $(am__DEPENDENCIES_2) rdwrmmap_SOURCES = rdwrmmap.c rdwrmmap_OBJECTS = rdwrmmap.$(OBJEXT) -rdwrmmap_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +rdwrmmap_DEPENDENCIES = $(am__DEPENDENCIES_2) rerequest_tag_SOURCES = rerequest_tag.c rerequest_tag_OBJECTS = rerequest_tag.$(OBJEXT) -rerequest_tag_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_1) +rerequest_tag_DEPENDENCIES = $(am__DEPENDENCIES_4) saridx_SOURCES = saridx.c saridx_OBJECTS = saridx.$(OBJEXT) -saridx_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +saridx_DEPENDENCIES = $(am__DEPENDENCIES_2) scnnames_SOURCES = scnnames.c scnnames_OBJECTS = scnnames.$(OBJEXT) -scnnames_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +scnnames_DEPENDENCIES = $(am__DEPENDENCIES_2) sectiondump_SOURCES = sectiondump.c sectiondump_OBJECTS = sectiondump.$(OBJEXT) -sectiondump_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +sectiondump_DEPENDENCIES = $(am__DEPENDENCIES_2) show_abbrev_SOURCES = show-abbrev.c show_abbrev_OBJECTS = show-abbrev.$(OBJEXT) -show_abbrev_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +show_abbrev_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) show_die_info_SOURCES = show-die-info.c show_die_info_OBJECTS = show-die-info.$(OBJEXT) show_die_info_DEPENDENCIES = $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_2) showptable_SOURCES = showptable.c showptable_OBJECTS = showptable.$(OBJEXT) -showptable_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +showptable_DEPENDENCIES = $(am__DEPENDENCIES_2) test_elf_cntl_gelf_getshdr_SOURCES = test-elf_cntl_gelf_getshdr.c test_elf_cntl_gelf_getshdr_OBJECTS = \ test-elf_cntl_gelf_getshdr.$(OBJEXT) -test_elf_cntl_gelf_getshdr_DEPENDENCIES = $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +test_elf_cntl_gelf_getshdr_DEPENDENCIES = $(am__DEPENDENCIES_2) test_flag_nobits_SOURCES = test-flag-nobits.c test_flag_nobits_OBJECTS = test-flag-nobits.$(OBJEXT) -test_flag_nobits_DEPENDENCIES = $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +test_flag_nobits_DEPENDENCIES = $(am__DEPENDENCIES_2) test_nlist_SOURCES = test-nlist.c test_nlist_OBJECTS = test-nlist.$(OBJEXT) -test_nlist_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +test_nlist_DEPENDENCIES = $(am__DEPENDENCIES_2) typeiter_SOURCES = typeiter.c typeiter_OBJECTS = typeiter.$(OBJEXT) -typeiter_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +typeiter_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) +typeiter2_SOURCES = typeiter2.c +typeiter2_OBJECTS = typeiter2.$(OBJEXT) +typeiter2_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) update1_SOURCES = update1.c update1_OBJECTS = update1.$(OBJEXT) -update1_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +update1_DEPENDENCIES = $(am__DEPENDENCIES_2) update2_SOURCES = update2.c update2_OBJECTS = update2.$(OBJEXT) -update2_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +update2_DEPENDENCIES = $(am__DEPENDENCIES_2) update3_SOURCES = update3.c update3_OBJECTS = update3.$(OBJEXT) -update3_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +update3_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) update4_SOURCES = update4.c update4_OBJECTS = update4.$(OBJEXT) -update4_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_1) +update4_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_2) +varlocs_SOURCES = varlocs.c +varlocs_OBJECTS = varlocs.$(OBJEXT) +varlocs_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_2) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = SOURCES = addrcfi.c addrscopes.c alldts.c allfcts.c allregs.c \ arextract.c arls.c arsymtest.c asm-tst1.c asm-tst2.c \ asm-tst3.c asm-tst4.c asm-tst5.c asm-tst6.c asm-tst7.c \ - asm-tst8.c asm-tst9.c dwarf-getmacros.c dwarf-getstring.c \ - dwfl-addr-sect.c dwfl-bug-addr-overflow.c dwfl-bug-fd-leak.c \ - dwfl-bug-getmodules.c dwfl-bug-report.c dwflmodtest.c \ + asm-tst8.c asm-tst9.c backtrace.c backtrace-child.c \ + $(backtrace_child_biarch_SOURCES) backtrace-data.c \ + backtrace-dwarf.c buildid.c debugaltlink.c debuglink.c \ + dwarf-getmacros.c dwarf-getstring.c dwfl-addr-sect.c \ + dwfl-bug-addr-overflow.c dwfl-bug-fd-leak.c \ + dwfl-bug-getmodules.c dwfl-bug-report.c \ + dwfl-report-elf-align.c dwfllines.c dwflmodtest.c dwflsyms.c \ early-offscn.c ecp.c find-prologues.c funcretval.c \ funcscopes.c get-aranges.c get-files.c get-lines.c \ get-pubnames.c hash.c line2addr.c low_high_pc.c \ @@ -365,13 +484,18 @@ SOURCES = addrcfi.c addrscopes.c alldts.c allfcts.c allregs.c \ rerequest_tag.c saridx.c scnnames.c sectiondump.c \ show-abbrev.c show-die-info.c showptable.c \ test-elf_cntl_gelf_getshdr.c test-flag-nobits.c test-nlist.c \ - typeiter.c update1.c update2.c update3.c update4.c + typeiter.c typeiter2.c update1.c update2.c update3.c update4.c \ + varlocs.c DIST_SOURCES = addrcfi.c addrscopes.c alldts.c allfcts.c allregs.c \ arextract.c arls.c arsymtest.c asm-tst1.c asm-tst2.c \ asm-tst3.c asm-tst4.c asm-tst5.c asm-tst6.c asm-tst7.c \ - asm-tst8.c asm-tst9.c dwarf-getmacros.c dwarf-getstring.c \ - dwfl-addr-sect.c dwfl-bug-addr-overflow.c dwfl-bug-fd-leak.c \ - dwfl-bug-getmodules.c dwfl-bug-report.c dwflmodtest.c \ + asm-tst8.c asm-tst9.c backtrace.c backtrace-child.c \ + $(backtrace_child_biarch_SOURCES) backtrace-data.c \ + backtrace-dwarf.c buildid.c debugaltlink.c debuglink.c \ + dwarf-getmacros.c dwarf-getstring.c dwfl-addr-sect.c \ + dwfl-bug-addr-overflow.c dwfl-bug-fd-leak.c \ + dwfl-bug-getmodules.c dwfl-bug-report.c \ + dwfl-report-elf-align.c dwfllines.c dwflmodtest.c dwflsyms.c \ early-offscn.c ecp.c find-prologues.c funcretval.c \ funcscopes.c get-aranges.c get-files.c get-lines.c \ get-pubnames.c hash.c line2addr.c low_high_pc.c \ @@ -379,21 +503,250 @@ DIST_SOURCES = addrcfi.c addrscopes.c alldts.c allfcts.c allregs.c \ rerequest_tag.c saridx.c scnnames.c sectiondump.c \ show-abbrev.c show-die-info.c showptable.c \ test-elf_cntl_gelf_getshdr.c test-flag-nobits.c test-nlist.c \ - typeiter.c update1.c update2.c update3.c update4.c + typeiter.c typeiter2.c update1.c update2.c update3.c update4.c \ + varlocs.c +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags -am__tty_colors = \ -red=; grn=; lgn=; blu=; std= +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ +CC_BIARCH = @CC_BIARCH@ CFLAGS = @CFLAGS@ +CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGPRED = @DEBUGPRED@ @@ -402,10 +755,13 @@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VALGRIND = @HAVE_VALGRIND@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -426,6 +782,7 @@ MODVERSION = @MODVERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ +NM = @NM@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -436,6 +793,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +READELF = @READELF@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -450,6 +808,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -499,22 +858,17 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zip_LIBS = @zip_LIBS@ -INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. $(am__append_2) -AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if \ - $($(*F)_no_Werror),,-Werror) $(if \ - $($(*F)_no_Wunused),,-Wunused -Wextra) $(if \ - $($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) \ - $(am__append_1) -@MUDFLAP_FALSE@libmudflap = -@MUDFLAP_TRUE@libmudflap = -lmudflap -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ - $(COMPILE)) +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. $(am__append_1) +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ + $(if $($(*F)_no_Werror),,-Werror) \ + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ + $($(*F)_CFLAGS) +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) CLEANFILES = *.gcno *.gcda -textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi -@MUDFLAP_FALSE@BUILD_RPATH = \$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../backends:\$$ORIGIN/../libelf -@MUDFLAP_TRUE@BUILD_RPATH = \$$ORIGIN/../backends -AM_LDFLAGS = $(am__append_3) $(am__append_4) +textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi +BUILD_RPATH = \$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../backends:\$$ORIGIN/../libelf +AM_LDFLAGS = $(am__append_2) $(am__append_3) @TESTS_RPATH_FALSE@tests_rpath = no @TESTS_RPATH_TRUE@tests_rpath = yes asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ @@ -529,16 +883,17 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ testfile5.bz2 testfile6.bz2 testfile7.bz2 testfile8.bz2 \ testfile9.bz2 testfile10.bz2 testfile11.bz2 testfile12.bz2 \ testfile13.bz2 run-strip-test3.sh run-allfcts.sh \ + testfile_class_func.bz2 testfile_nested_funcs.bz2 \ run-line2addr.sh run-elflint-test.sh testfile14.bz2 \ run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \ run-strip-test7.sh run-strip-test8.sh run-strip-groups.sh \ run-strip-reloc.sh hello_i386.ko.bz2 hello_x86_64.ko.bz2 \ - hello_ppc64.ko.bz2 hello_s390.ko.bz2 \ - run-unstrip-test.sh run-unstrip-test2.sh \ + hello_ppc64.ko.bz2 hello_s390.ko.bz2 hello_aarch64.ko.bz2 \ + run-unstrip-test.sh run-unstrip-test2.sh run-unstrip-M.sh\ run-elflint-self.sh run-ranlib-test.sh run-ranlib-test2.sh \ run-ranlib-test3.sh run-ranlib-test4.sh \ run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \ - run-nm-self.sh run-readelf-self.sh \ + run-nm-self.sh run-readelf-self.sh run-addrcfi.sh \ run-find-prologues.sh run-allregs.sh run-native-test.sh \ run-addrname-test.sh run-dwfl-bug-offline-rel.sh \ run-dwfl-addr-sect.sh run-early-offscn.sh \ @@ -556,20 +911,27 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \ run-readelf-test4.sh run-readelf-twofiles.sh \ run-bug1-test.sh testfile28.bz2 testfile28.rdwr.bz2 \ + run-debuglink.sh run-debugaltlink.sh run-buildid.sh \ testfile29.bz2 testfile29.rdwr.bz2 \ testfile30.bz2 testfile31.bz2 testfile32.bz2 testfile33.bz2 \ testfile34.bz2 testfile35.bz2 testfile35.debug.bz2 \ testfile36.bz2 testfile36.debug.bz2 \ testfile37.bz2 testfile37.debug.bz2 \ testfile38.bz2 testfile39.bz2 testfile40.bz2 testfile40.debug.bz2 \ - testfile41.bz2 testfile42.bz2 testfile43.bz2 \ + testfile41.bz2 testfile42.bz2 testfile42_noshdrs.bz2 \ + testfile43.bz2 \ testfile44.S.bz2 testfile44.expect.bz2 run-disasm-x86.sh \ testfile45.S.bz2 testfile45.expect.bz2 run-disasm-x86-64.sh \ testfile46.bz2 testfile47.bz2 testfile48.bz2 testfile48.debug.bz2 \ testfile49.bz2 testfile50.bz2 testfile51.bz2 \ run-readelf-macro.sh testfilemacro.bz2 \ + run-readelf-loc.sh testfileloc.bz2 \ + run-readelf-aranges.sh run-readelf-line.sh testfilefoobarbaz.bz2 \ run-readelf-dwz-multi.sh libtestfile_multi_shared.so.bz2 \ testfile_multi.dwz.bz2 testfile_multi_main.bz2 \ + testfile-dwzstr.bz2 testfile-dwzstr.multi.bz2 \ + run-allfcts-multi.sh \ + test-offset-loop.bz2 test-offset-loop.alt.bz2 \ run-prelink-addr-test.sh \ testfile52-32.so.bz2 testfile52-32.so.debug.bz2 \ testfile52-32.prelink.so.bz2 testfile52-32.noshdrs.so.bz2 \ @@ -590,25 +952,95 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-readelf-d.sh testlib_dynseg.so.bz2 \ run-readelf-gdb_index.sh testfilegdbindex5.bz2 \ testfilegdbindex7.bz2 \ + run-readelf-s.sh testfilebazdbg.bz2 testfilebazdyn.bz2 \ + testfilebazmin.bz2 testfilebazdbg.debug.bz2 testfilebazmdb.bz2 \ + testfilebaztab.bz2 testfilebasmin.bz2 testfilebaxmin.bz2 \ + testfilebazdbg_pl.bz2 testfilebazmin_pl.bz2 \ + testfilebazdbg_plr.bz2 testfilebazmin_plr.bz2 \ + testfilebazdbgppc64.bz2 testfilebazdbgppc64.debug.bz2 \ + testfilebazdbgppc64_pl.bz2 testfilebazdbgppc64_plr.bz2 \ + testfilebazdynppc64.bz2 testfilebazmdbppc64.bz2 \ + testfilebazminppc64.bz2 testfilebazminppc64_pl.bz2 \ + testfilebazminppc64_plr.bz2 testfilebaztabppc64.bz2 \ + run-dwflsyms.sh \ run-unstrip-n.sh testcore-rtlib.bz2 testcore-rtlib-ppc.bz2 \ run-low_high_pc.sh testfile_low_high_pc.bz2 \ run-macro-test.sh testfile-macinfo.bz2 testfile-macros.bz2 \ run-elf_cntl_gelf_getshdr.sh \ run-test-archive64.sh testarchive64.a.bz2 \ - testfile60.bz2 - -installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \ - bindir=$(DESTDIR)$(bindir) \ - LC_ALL=C LANG=C \ - $(srcdir)/test-wrapper.sh \ - installed $(tests_rpath) \ - $(program_transform_name) - -@STANDALONE_FALSE@TESTS_ENVIRONMENT = LC_ALL=C LANG=C $(srcdir)/test-wrapper.sh \ -@STANDALONE_FALSE@ ../libdw:../backends:../libelf:../libasm + testfile60.bz2 testfile61.bz2 \ + run-readelf-vmcoreinfo.sh testfile62.bz2 \ + run-readelf-mixed-corenote.sh testfile63.bz2 testfile64.bz2 \ + testfile65.bz2 testfile67.bz2 testfile68.bz2 \ + testfile69.core.bz2 testfile69.so.bz2 \ + testfile70.core.bz2 testfile70.exec.bz2 testfile71.bz2 \ + run-dwfllines.sh run-dwfl-report-elf-align.sh \ + testfile-dwfl-report-elf-align-shlib.so.bz2 \ + 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 \ + testfileppc32.bz2 testfileppc64.bz2 \ + testfiles390.bz2 testfiles390x.bz2 \ + testfilearm.bz2 testfileaarch64.bz2 \ + run-varlocs.sh \ + testfile_const_type.c testfile_const_type.bz2 \ + testfile_implicit_pointer.c testfile_implicit_pointer.bz2 \ + testfile_parameter_ref.c testfile_parameter_ref.bz2 \ + testfile_entry_value.c testfile_entry_value.bz2 \ + testfile_implicit_value.c testfile_implicit_value.bz2 \ + testfile_aarch64_core.bz2 testfile_i686_core.bz2 \ + run-funcretval.sh funcretval_test.c funcretval_test_aarch64.bz2 \ + run-backtrace-data.sh run-backtrace-dwarf.sh cleanup-13.c \ + run-backtrace-native.sh run-backtrace-native-biarch.sh \ + run-backtrace-native-core.sh run-backtrace-native-core-biarch.sh \ + run-backtrace-core-x86_64.sh run-backtrace-core-i386.sh \ + backtrace-subr.sh backtrace.i386.core.bz2 backtrace.i386.exec.bz2 \ + backtrace.x86_64.core.bz2 backtrace.x86_64.exec.bz2 \ + backtrace.ppc.core.bz2 backtrace.ppc.exec.bz2 \ + run-backtrace-core-ppc.sh testfile66.bz2 testfile66.core.bz2 \ + backtrace.s390x.core.bz2 backtrace.s390x.exec.bz2 \ + backtrace.s390.core.bz2 backtrace.s390.exec.bz2 \ + run-backtrace-core-s390x.sh run-backtrace-core-s390.sh \ + run-backtrace-core-aarch64.sh \ + backtrace.aarch64.core.bz2 backtrace.aarch64.exec.bz2 \ + run-backtrace-demangle.sh testfile-backtrace-demangle.bz2 \ + testfile-backtrace-demangle.cc \ + 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 + +@USE_VALGRIND_TRUE@valgrind_cmd = 'valgrind -q --error-exitcode=1 --run-libc-freeres=no' +installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir); \ + bindir=$(DESTDIR)$(bindir); \ + LC_ALL=C; LANG=C; \ + VALGRIND_CMD=$(valgrind_cmd); \ + abs_srcdir=$(abs_srcdir); \ + abs_builddir=$(abs_builddir); \ + abs_top_builddir=$(abs_top_builddir); \ + export abs_srcdir; export abs_builddir; \ + export abs_top_builddir; \ + export libdir; export bindir; \ + export LC_ALL; export LANG; export VALGRIND_CMD; \ + NM=$(NM); export NM; + +installed_LOG_COMPILER = $(abs_srcdir)/test-wrapper.sh \ + installed $(tests_rpath) \ + '$(program_transform_name)' + +@STANDALONE_FALSE@TESTS_ENVIRONMENT = LC_ALL=C; LANG=C; VALGRIND_CMD=$(valgrind_cmd); \ +@STANDALONE_FALSE@ abs_srcdir=$(abs_srcdir); abs_builddir=$(abs_builddir); \ +@STANDALONE_FALSE@ abs_top_builddir=$(abs_top_builddir); \ +@STANDALONE_FALSE@ export abs_srcdir; export abs_builddir; \ +@STANDALONE_FALSE@ export abs_top_builddir; \ +@STANDALONE_FALSE@ export LC_ALL; export LANG; export VALGRIND_CMD; \ +@STANDALONE_FALSE@ NM=$(NM); export NM; @STANDALONE_TRUE@TESTS_ENVIRONMENT = $(installed_TESTS_ENVIRONMENT) -@MUDFLAP_TRUE@static_build = yes +@STANDALONE_FALSE@LOG_COMPILER = $(abs_srcdir)/test-wrapper.sh \ +@STANDALONE_FALSE@ $(abs_top_builddir)/libdw:$(abs_top_builddir)/backends:$(abs_top_builddir)/libelf:$(abs_top_builddir)/libasm + +@STANDALONE_TRUE@LOG_COMPILER = $(installed_LOG_COMPILER) @BUILD_STATIC_FALSE@@STANDALONE_FALSE@libdw = ../libdw/libdw.so @BUILD_STATIC_TRUE@@STANDALONE_FALSE@libdw = ../libdw/libdw.a $(zip_LIBS) $(libelf) $(libebl) -ldl @STANDALONE_TRUE@libdw = -ldw @@ -621,69 +1053,84 @@ installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \ @STANDALONE_FALSE@libebl = ../libebl/libebl.a @STANDALONE_TRUE@libebl = -lebl @STANDALONE_FALSE@libeu = ../lib/libeu.a -arextract_LDADD = $(libelf) $(libmudflap) -arsymtest_LDADD = $(libelf) $(libmudflap) -newfile_LDADD = $(libelf) $(libmudflap) -saridx_LDADD = $(libelf) $(libmudflap) -scnnames_LDADD = $(libelf) $(libmudflap) -sectiondump_LDADD = $(libelf) $(libmudflap) -showptable_LDADD = $(libelf) $(libmudflap) -hash_LDADD = $(libelf) $(libmudflap) -test_nlist_LDADD = $(libelf) $(libmudflap) -msg_tst_LDADD = $(libelf) $(libmudflap) -newscn_LDADD = $(libelf) $(libmudflap) -early_offscn_LDADD = $(libelf) $(libmudflap) -ecp_LDADD = $(libelf) $(libmudflap) -update1_LDADD = $(libelf) $(libmudflap) -update2_LDADD = $(libelf) $(libmudflap) -update3_LDADD = $(libebl) $(libelf) $(libmudflap) -update4_LDADD = $(libebl) $(libelf) $(libmudflap) -show_die_info_LDADD = $(libdw) $(libelf) $(libmudflap) -get_pubnames_LDADD = $(libdw) $(libelf) $(libmudflap) -show_abbrev_LDADD = $(libdw) $(libelf) $(libmudflap) -get_lines_LDADD = $(libdw) $(libelf) $(libmudflap) -get_files_LDADD = $(libdw) $(libelf) $(libmudflap) -get_aranges_LDADD = $(libdw) $(libelf) $(libmudflap) -allfcts_LDADD = $(libdw) $(libelf) $(libmudflap) -line2addr_no_Wformat = yes -line2addr_LDADD = $(libdw) $(libmudflap) -addrscopes_LDADD = $(libdw) $(libmudflap) -funcscopes_LDADD = $(libdw) $(libmudflap) -funcretval_LDADD = $(libdw) $(libmudflap) -allregs_LDADD = $(libdw) $(libmudflap) -find_prologues_LDADD = $(libdw) $(libmudflap) -#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) $(libmudflap) -asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst3_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst4_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst5_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -rdwrmmap_LDADD = $(libelf) $(libmudflap) -dwfl_bug_addr_overflow_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -arls_LDADD = $(libelf) $(libmudflap) -dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -dwarf_getmacros_LDADD = $(libdw) $(libmudflap) -dwarf_getstring_LDADD = $(libdw) $(libmudflap) -addrcfi_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -test_flag_nobits_LDADD = $(libelf) $(libmudflap) -rerequest_tag_LDADD = $(libdw) $(libmudflap) -alldts_LDADD = $(libebl) $(libelf) $(libmudflap) +arextract_LDADD = $(libelf) +arsymtest_LDADD = $(libelf) +newfile_LDADD = $(libelf) +saridx_LDADD = $(libelf) +scnnames_LDADD = $(libelf) +sectiondump_LDADD = $(libelf) +showptable_LDADD = $(libelf) +hash_LDADD = $(libelf) +test_nlist_LDADD = $(libelf) +msg_tst_LDADD = $(libelf) +newscn_LDADD = $(libelf) +early_offscn_LDADD = $(libelf) +ecp_LDADD = $(libelf) +update1_LDADD = $(libelf) +update2_LDADD = $(libelf) +update3_LDADD = $(libebl) $(libelf) +update4_LDADD = $(libebl) $(libelf) +show_die_info_LDADD = $(libdw) $(libelf) +get_pubnames_LDADD = $(libdw) $(libelf) +show_abbrev_LDADD = $(libdw) $(libelf) +get_lines_LDADD = $(libdw) $(libelf) +get_files_LDADD = $(libdw) $(libelf) +get_aranges_LDADD = $(libdw) $(libelf) +allfcts_LDADD = $(libdw) $(libelf) +line2addr_LDADD = $(libdw) +addrscopes_LDADD = $(libdw) +funcscopes_LDADD = $(libdw) +funcretval_LDADD = $(libdw) +allregs_LDADD = $(libdw) +find_prologues_LDADD = $(libdw) +#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) +asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst3_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst4_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst5_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) -ldl +asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) -ldl +dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) -ldl +rdwrmmap_LDADD = $(libelf) +dwfl_bug_addr_overflow_LDADD = $(libdw) $(libebl) $(libelf) -ldl +arls_LDADD = $(libelf) +dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) -ldl +dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) -ldl +dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) -ldl +dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) -ldl +dwarf_getmacros_LDADD = $(libdw) +dwarf_getstring_LDADD = $(libdw) +addrcfi_LDADD = $(libdw) $(libebl) $(libelf) -ldl +test_flag_nobits_LDADD = $(libelf) +rerequest_tag_LDADD = $(libdw) +alldts_LDADD = $(libebl) $(libelf) md5_sha1_test_LDADD = $(libeu) -typeiter_LDADD = $(libdw) $(libelf) $(libmudflap) -low_high_pc_LDADD = $(libdw) $(libelf) $(libmudflap) -test_elf_cntl_gelf_getshdr_LDADD = $(libelf) $(libmudflap) +typeiter_LDADD = $(libdw) $(libelf) +typeiter2_LDADD = $(libdw) $(libelf) +low_high_pc_LDADD = $(libdw) $(libelf) +test_elf_cntl_gelf_getshdr_LDADD = $(libelf) +dwflsyms_LDADD = $(libdw) $(libelf) +dwfllines_LDADD = $(libdw) $(libelf) +dwfl_report_elf_align_LDADD = $(libdw) +varlocs_LDADD = $(libdw) $(libelf) +backtrace_LDADD = $(libdw) $(libelf) +# backtrace-child-biarch also uses those *_CFLAGS and *_LDLAGS variables: +backtrace_child_CFLAGS = -fPIE +backtrace_child_LDFLAGS = -pie -pthread +backtrace_child_biarch_SOURCES = backtrace-child.c +backtrace_data_LDADD = $(libdw) $(libelf) +backtrace_dwarf_CFLAGS = -Wno-unused-parameter +backtrace_dwarf_LDADD = $(libdw) $(libelf) +debuglink_LDADD = $(libdw) $(libelf) +debugaltlink_LDADD = $(libdw) $(libelf) +buildid_LDADD = $(libdw) $(libelf) all: all-am .SUFFIXES: -.SUFFIXES: .c .o .obj +.SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/eu.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -718,177 +1165,282 @@ $(am__aclocal_m4_deps): clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) + addrcfi$(EXEEXT): $(addrcfi_OBJECTS) $(addrcfi_DEPENDENCIES) $(EXTRA_addrcfi_DEPENDENCIES) @rm -f addrcfi$(EXEEXT) - $(LINK) $(addrcfi_OBJECTS) $(addrcfi_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(addrcfi_OBJECTS) $(addrcfi_LDADD) $(LIBS) + addrscopes$(EXEEXT): $(addrscopes_OBJECTS) $(addrscopes_DEPENDENCIES) $(EXTRA_addrscopes_DEPENDENCIES) @rm -f addrscopes$(EXEEXT) - $(LINK) $(addrscopes_OBJECTS) $(addrscopes_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(addrscopes_OBJECTS) $(addrscopes_LDADD) $(LIBS) + alldts$(EXEEXT): $(alldts_OBJECTS) $(alldts_DEPENDENCIES) $(EXTRA_alldts_DEPENDENCIES) @rm -f alldts$(EXEEXT) - $(LINK) $(alldts_OBJECTS) $(alldts_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(alldts_OBJECTS) $(alldts_LDADD) $(LIBS) + allfcts$(EXEEXT): $(allfcts_OBJECTS) $(allfcts_DEPENDENCIES) $(EXTRA_allfcts_DEPENDENCIES) @rm -f allfcts$(EXEEXT) - $(LINK) $(allfcts_OBJECTS) $(allfcts_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(allfcts_OBJECTS) $(allfcts_LDADD) $(LIBS) + allregs$(EXEEXT): $(allregs_OBJECTS) $(allregs_DEPENDENCIES) $(EXTRA_allregs_DEPENDENCIES) @rm -f allregs$(EXEEXT) - $(LINK) $(allregs_OBJECTS) $(allregs_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(allregs_OBJECTS) $(allregs_LDADD) $(LIBS) + arextract$(EXEEXT): $(arextract_OBJECTS) $(arextract_DEPENDENCIES) $(EXTRA_arextract_DEPENDENCIES) @rm -f arextract$(EXEEXT) - $(LINK) $(arextract_OBJECTS) $(arextract_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(arextract_OBJECTS) $(arextract_LDADD) $(LIBS) + arls$(EXEEXT): $(arls_OBJECTS) $(arls_DEPENDENCIES) $(EXTRA_arls_DEPENDENCIES) @rm -f arls$(EXEEXT) - $(LINK) $(arls_OBJECTS) $(arls_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(arls_OBJECTS) $(arls_LDADD) $(LIBS) + arsymtest$(EXEEXT): $(arsymtest_OBJECTS) $(arsymtest_DEPENDENCIES) $(EXTRA_arsymtest_DEPENDENCIES) @rm -f arsymtest$(EXEEXT) - $(LINK) $(arsymtest_OBJECTS) $(arsymtest_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(arsymtest_OBJECTS) $(arsymtest_LDADD) $(LIBS) + asm-tst1$(EXEEXT): $(asm_tst1_OBJECTS) $(asm_tst1_DEPENDENCIES) $(EXTRA_asm_tst1_DEPENDENCIES) @rm -f asm-tst1$(EXEEXT) - $(LINK) $(asm_tst1_OBJECTS) $(asm_tst1_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(asm_tst1_OBJECTS) $(asm_tst1_LDADD) $(LIBS) + asm-tst2$(EXEEXT): $(asm_tst2_OBJECTS) $(asm_tst2_DEPENDENCIES) $(EXTRA_asm_tst2_DEPENDENCIES) @rm -f asm-tst2$(EXEEXT) - $(LINK) $(asm_tst2_OBJECTS) $(asm_tst2_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(asm_tst2_OBJECTS) $(asm_tst2_LDADD) $(LIBS) + asm-tst3$(EXEEXT): $(asm_tst3_OBJECTS) $(asm_tst3_DEPENDENCIES) $(EXTRA_asm_tst3_DEPENDENCIES) @rm -f asm-tst3$(EXEEXT) - $(LINK) $(asm_tst3_OBJECTS) $(asm_tst3_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(asm_tst3_OBJECTS) $(asm_tst3_LDADD) $(LIBS) + asm-tst4$(EXEEXT): $(asm_tst4_OBJECTS) $(asm_tst4_DEPENDENCIES) $(EXTRA_asm_tst4_DEPENDENCIES) @rm -f asm-tst4$(EXEEXT) - $(LINK) $(asm_tst4_OBJECTS) $(asm_tst4_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(asm_tst4_OBJECTS) $(asm_tst4_LDADD) $(LIBS) + asm-tst5$(EXEEXT): $(asm_tst5_OBJECTS) $(asm_tst5_DEPENDENCIES) $(EXTRA_asm_tst5_DEPENDENCIES) @rm -f asm-tst5$(EXEEXT) - $(LINK) $(asm_tst5_OBJECTS) $(asm_tst5_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(asm_tst5_OBJECTS) $(asm_tst5_LDADD) $(LIBS) + asm-tst6$(EXEEXT): $(asm_tst6_OBJECTS) $(asm_tst6_DEPENDENCIES) $(EXTRA_asm_tst6_DEPENDENCIES) @rm -f asm-tst6$(EXEEXT) - $(LINK) $(asm_tst6_OBJECTS) $(asm_tst6_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(asm_tst6_OBJECTS) $(asm_tst6_LDADD) $(LIBS) + asm-tst7$(EXEEXT): $(asm_tst7_OBJECTS) $(asm_tst7_DEPENDENCIES) $(EXTRA_asm_tst7_DEPENDENCIES) @rm -f asm-tst7$(EXEEXT) - $(LINK) $(asm_tst7_OBJECTS) $(asm_tst7_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(asm_tst7_OBJECTS) $(asm_tst7_LDADD) $(LIBS) + asm-tst8$(EXEEXT): $(asm_tst8_OBJECTS) $(asm_tst8_DEPENDENCIES) $(EXTRA_asm_tst8_DEPENDENCIES) @rm -f asm-tst8$(EXEEXT) - $(LINK) $(asm_tst8_OBJECTS) $(asm_tst8_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(asm_tst8_OBJECTS) $(asm_tst8_LDADD) $(LIBS) + asm-tst9$(EXEEXT): $(asm_tst9_OBJECTS) $(asm_tst9_DEPENDENCIES) $(EXTRA_asm_tst9_DEPENDENCIES) @rm -f asm-tst9$(EXEEXT) - $(LINK) $(asm_tst9_OBJECTS) $(asm_tst9_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(asm_tst9_OBJECTS) $(asm_tst9_LDADD) $(LIBS) + +backtrace$(EXEEXT): $(backtrace_OBJECTS) $(backtrace_DEPENDENCIES) $(EXTRA_backtrace_DEPENDENCIES) + @rm -f backtrace$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(backtrace_OBJECTS) $(backtrace_LDADD) $(LIBS) + +backtrace-child$(EXEEXT): $(backtrace_child_OBJECTS) $(backtrace_child_DEPENDENCIES) $(EXTRA_backtrace_child_DEPENDENCIES) + @rm -f backtrace-child$(EXEEXT) + $(AM_V_CCLD)$(backtrace_child_LINK) $(backtrace_child_OBJECTS) $(backtrace_child_LDADD) $(LIBS) + +backtrace-data$(EXEEXT): $(backtrace_data_OBJECTS) $(backtrace_data_DEPENDENCIES) $(EXTRA_backtrace_data_DEPENDENCIES) + @rm -f backtrace-data$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(backtrace_data_OBJECTS) $(backtrace_data_LDADD) $(LIBS) + +backtrace-dwarf$(EXEEXT): $(backtrace_dwarf_OBJECTS) $(backtrace_dwarf_DEPENDENCIES) $(EXTRA_backtrace_dwarf_DEPENDENCIES) + @rm -f backtrace-dwarf$(EXEEXT) + $(AM_V_CCLD)$(backtrace_dwarf_LINK) $(backtrace_dwarf_OBJECTS) $(backtrace_dwarf_LDADD) $(LIBS) + +buildid$(EXEEXT): $(buildid_OBJECTS) $(buildid_DEPENDENCIES) $(EXTRA_buildid_DEPENDENCIES) + @rm -f buildid$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(buildid_OBJECTS) $(buildid_LDADD) $(LIBS) + +debugaltlink$(EXEEXT): $(debugaltlink_OBJECTS) $(debugaltlink_DEPENDENCIES) $(EXTRA_debugaltlink_DEPENDENCIES) + @rm -f debugaltlink$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(debugaltlink_OBJECTS) $(debugaltlink_LDADD) $(LIBS) + +debuglink$(EXEEXT): $(debuglink_OBJECTS) $(debuglink_DEPENDENCIES) $(EXTRA_debuglink_DEPENDENCIES) + @rm -f debuglink$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(debuglink_OBJECTS) $(debuglink_LDADD) $(LIBS) + dwarf-getmacros$(EXEEXT): $(dwarf_getmacros_OBJECTS) $(dwarf_getmacros_DEPENDENCIES) $(EXTRA_dwarf_getmacros_DEPENDENCIES) @rm -f dwarf-getmacros$(EXEEXT) - $(LINK) $(dwarf_getmacros_OBJECTS) $(dwarf_getmacros_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(dwarf_getmacros_OBJECTS) $(dwarf_getmacros_LDADD) $(LIBS) + dwarf-getstring$(EXEEXT): $(dwarf_getstring_OBJECTS) $(dwarf_getstring_DEPENDENCIES) $(EXTRA_dwarf_getstring_DEPENDENCIES) @rm -f dwarf-getstring$(EXEEXT) - $(LINK) $(dwarf_getstring_OBJECTS) $(dwarf_getstring_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(dwarf_getstring_OBJECTS) $(dwarf_getstring_LDADD) $(LIBS) + dwfl-addr-sect$(EXEEXT): $(dwfl_addr_sect_OBJECTS) $(dwfl_addr_sect_DEPENDENCIES) $(EXTRA_dwfl_addr_sect_DEPENDENCIES) @rm -f dwfl-addr-sect$(EXEEXT) - $(LINK) $(dwfl_addr_sect_OBJECTS) $(dwfl_addr_sect_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(dwfl_addr_sect_OBJECTS) $(dwfl_addr_sect_LDADD) $(LIBS) + dwfl-bug-addr-overflow$(EXEEXT): $(dwfl_bug_addr_overflow_OBJECTS) $(dwfl_bug_addr_overflow_DEPENDENCIES) $(EXTRA_dwfl_bug_addr_overflow_DEPENDENCIES) @rm -f dwfl-bug-addr-overflow$(EXEEXT) - $(LINK) $(dwfl_bug_addr_overflow_OBJECTS) $(dwfl_bug_addr_overflow_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(dwfl_bug_addr_overflow_OBJECTS) $(dwfl_bug_addr_overflow_LDADD) $(LIBS) + dwfl-bug-fd-leak$(EXEEXT): $(dwfl_bug_fd_leak_OBJECTS) $(dwfl_bug_fd_leak_DEPENDENCIES) $(EXTRA_dwfl_bug_fd_leak_DEPENDENCIES) @rm -f dwfl-bug-fd-leak$(EXEEXT) - $(LINK) $(dwfl_bug_fd_leak_OBJECTS) $(dwfl_bug_fd_leak_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(dwfl_bug_fd_leak_OBJECTS) $(dwfl_bug_fd_leak_LDADD) $(LIBS) + dwfl-bug-getmodules$(EXEEXT): $(dwfl_bug_getmodules_OBJECTS) $(dwfl_bug_getmodules_DEPENDENCIES) $(EXTRA_dwfl_bug_getmodules_DEPENDENCIES) @rm -f dwfl-bug-getmodules$(EXEEXT) - $(LINK) $(dwfl_bug_getmodules_OBJECTS) $(dwfl_bug_getmodules_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(dwfl_bug_getmodules_OBJECTS) $(dwfl_bug_getmodules_LDADD) $(LIBS) + dwfl-bug-report$(EXEEXT): $(dwfl_bug_report_OBJECTS) $(dwfl_bug_report_DEPENDENCIES) $(EXTRA_dwfl_bug_report_DEPENDENCIES) @rm -f dwfl-bug-report$(EXEEXT) - $(LINK) $(dwfl_bug_report_OBJECTS) $(dwfl_bug_report_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(dwfl_bug_report_OBJECTS) $(dwfl_bug_report_LDADD) $(LIBS) + +dwfl-report-elf-align$(EXEEXT): $(dwfl_report_elf_align_OBJECTS) $(dwfl_report_elf_align_DEPENDENCIES) $(EXTRA_dwfl_report_elf_align_DEPENDENCIES) + @rm -f dwfl-report-elf-align$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dwfl_report_elf_align_OBJECTS) $(dwfl_report_elf_align_LDADD) $(LIBS) + +dwfllines$(EXEEXT): $(dwfllines_OBJECTS) $(dwfllines_DEPENDENCIES) $(EXTRA_dwfllines_DEPENDENCIES) + @rm -f dwfllines$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dwfllines_OBJECTS) $(dwfllines_LDADD) $(LIBS) + dwflmodtest$(EXEEXT): $(dwflmodtest_OBJECTS) $(dwflmodtest_DEPENDENCIES) $(EXTRA_dwflmodtest_DEPENDENCIES) @rm -f dwflmodtest$(EXEEXT) - $(LINK) $(dwflmodtest_OBJECTS) $(dwflmodtest_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(dwflmodtest_OBJECTS) $(dwflmodtest_LDADD) $(LIBS) + +dwflsyms$(EXEEXT): $(dwflsyms_OBJECTS) $(dwflsyms_DEPENDENCIES) $(EXTRA_dwflsyms_DEPENDENCIES) + @rm -f dwflsyms$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dwflsyms_OBJECTS) $(dwflsyms_LDADD) $(LIBS) + early-offscn$(EXEEXT): $(early_offscn_OBJECTS) $(early_offscn_DEPENDENCIES) $(EXTRA_early_offscn_DEPENDENCIES) @rm -f early-offscn$(EXEEXT) - $(LINK) $(early_offscn_OBJECTS) $(early_offscn_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(early_offscn_OBJECTS) $(early_offscn_LDADD) $(LIBS) + ecp$(EXEEXT): $(ecp_OBJECTS) $(ecp_DEPENDENCIES) $(EXTRA_ecp_DEPENDENCIES) @rm -f ecp$(EXEEXT) - $(LINK) $(ecp_OBJECTS) $(ecp_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(ecp_OBJECTS) $(ecp_LDADD) $(LIBS) + find-prologues$(EXEEXT): $(find_prologues_OBJECTS) $(find_prologues_DEPENDENCIES) $(EXTRA_find_prologues_DEPENDENCIES) @rm -f find-prologues$(EXEEXT) - $(LINK) $(find_prologues_OBJECTS) $(find_prologues_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(find_prologues_OBJECTS) $(find_prologues_LDADD) $(LIBS) + funcretval$(EXEEXT): $(funcretval_OBJECTS) $(funcretval_DEPENDENCIES) $(EXTRA_funcretval_DEPENDENCIES) @rm -f funcretval$(EXEEXT) - $(LINK) $(funcretval_OBJECTS) $(funcretval_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(funcretval_OBJECTS) $(funcretval_LDADD) $(LIBS) + funcscopes$(EXEEXT): $(funcscopes_OBJECTS) $(funcscopes_DEPENDENCIES) $(EXTRA_funcscopes_DEPENDENCIES) @rm -f funcscopes$(EXEEXT) - $(LINK) $(funcscopes_OBJECTS) $(funcscopes_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(funcscopes_OBJECTS) $(funcscopes_LDADD) $(LIBS) + get-aranges$(EXEEXT): $(get_aranges_OBJECTS) $(get_aranges_DEPENDENCIES) $(EXTRA_get_aranges_DEPENDENCIES) @rm -f get-aranges$(EXEEXT) - $(LINK) $(get_aranges_OBJECTS) $(get_aranges_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(get_aranges_OBJECTS) $(get_aranges_LDADD) $(LIBS) + get-files$(EXEEXT): $(get_files_OBJECTS) $(get_files_DEPENDENCIES) $(EXTRA_get_files_DEPENDENCIES) @rm -f get-files$(EXEEXT) - $(LINK) $(get_files_OBJECTS) $(get_files_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(get_files_OBJECTS) $(get_files_LDADD) $(LIBS) + get-lines$(EXEEXT): $(get_lines_OBJECTS) $(get_lines_DEPENDENCIES) $(EXTRA_get_lines_DEPENDENCIES) @rm -f get-lines$(EXEEXT) - $(LINK) $(get_lines_OBJECTS) $(get_lines_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(get_lines_OBJECTS) $(get_lines_LDADD) $(LIBS) + get-pubnames$(EXEEXT): $(get_pubnames_OBJECTS) $(get_pubnames_DEPENDENCIES) $(EXTRA_get_pubnames_DEPENDENCIES) @rm -f get-pubnames$(EXEEXT) - $(LINK) $(get_pubnames_OBJECTS) $(get_pubnames_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(get_pubnames_OBJECTS) $(get_pubnames_LDADD) $(LIBS) + hash$(EXEEXT): $(hash_OBJECTS) $(hash_DEPENDENCIES) $(EXTRA_hash_DEPENDENCIES) @rm -f hash$(EXEEXT) - $(LINK) $(hash_OBJECTS) $(hash_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(hash_OBJECTS) $(hash_LDADD) $(LIBS) + line2addr$(EXEEXT): $(line2addr_OBJECTS) $(line2addr_DEPENDENCIES) $(EXTRA_line2addr_DEPENDENCIES) @rm -f line2addr$(EXEEXT) - $(LINK) $(line2addr_OBJECTS) $(line2addr_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(line2addr_OBJECTS) $(line2addr_LDADD) $(LIBS) + low_high_pc$(EXEEXT): $(low_high_pc_OBJECTS) $(low_high_pc_DEPENDENCIES) $(EXTRA_low_high_pc_DEPENDENCIES) @rm -f low_high_pc$(EXEEXT) - $(LINK) $(low_high_pc_OBJECTS) $(low_high_pc_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(low_high_pc_OBJECTS) $(low_high_pc_LDADD) $(LIBS) + md5-sha1-test$(EXEEXT): $(md5_sha1_test_OBJECTS) $(md5_sha1_test_DEPENDENCIES) $(EXTRA_md5_sha1_test_DEPENDENCIES) @rm -f md5-sha1-test$(EXEEXT) - $(LINK) $(md5_sha1_test_OBJECTS) $(md5_sha1_test_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(md5_sha1_test_OBJECTS) $(md5_sha1_test_LDADD) $(LIBS) + msg_tst$(EXEEXT): $(msg_tst_OBJECTS) $(msg_tst_DEPENDENCIES) $(EXTRA_msg_tst_DEPENDENCIES) @rm -f msg_tst$(EXEEXT) - $(LINK) $(msg_tst_OBJECTS) $(msg_tst_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(msg_tst_OBJECTS) $(msg_tst_LDADD) $(LIBS) + newfile$(EXEEXT): $(newfile_OBJECTS) $(newfile_DEPENDENCIES) $(EXTRA_newfile_DEPENDENCIES) @rm -f newfile$(EXEEXT) - $(LINK) $(newfile_OBJECTS) $(newfile_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(newfile_OBJECTS) $(newfile_LDADD) $(LIBS) + newscn$(EXEEXT): $(newscn_OBJECTS) $(newscn_DEPENDENCIES) $(EXTRA_newscn_DEPENDENCIES) @rm -f newscn$(EXEEXT) - $(LINK) $(newscn_OBJECTS) $(newscn_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(newscn_OBJECTS) $(newscn_LDADD) $(LIBS) + rdwrmmap$(EXEEXT): $(rdwrmmap_OBJECTS) $(rdwrmmap_DEPENDENCIES) $(EXTRA_rdwrmmap_DEPENDENCIES) @rm -f rdwrmmap$(EXEEXT) - $(LINK) $(rdwrmmap_OBJECTS) $(rdwrmmap_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(rdwrmmap_OBJECTS) $(rdwrmmap_LDADD) $(LIBS) + rerequest_tag$(EXEEXT): $(rerequest_tag_OBJECTS) $(rerequest_tag_DEPENDENCIES) $(EXTRA_rerequest_tag_DEPENDENCIES) @rm -f rerequest_tag$(EXEEXT) - $(LINK) $(rerequest_tag_OBJECTS) $(rerequest_tag_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(rerequest_tag_OBJECTS) $(rerequest_tag_LDADD) $(LIBS) + saridx$(EXEEXT): $(saridx_OBJECTS) $(saridx_DEPENDENCIES) $(EXTRA_saridx_DEPENDENCIES) @rm -f saridx$(EXEEXT) - $(LINK) $(saridx_OBJECTS) $(saridx_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(saridx_OBJECTS) $(saridx_LDADD) $(LIBS) + scnnames$(EXEEXT): $(scnnames_OBJECTS) $(scnnames_DEPENDENCIES) $(EXTRA_scnnames_DEPENDENCIES) @rm -f scnnames$(EXEEXT) - $(LINK) $(scnnames_OBJECTS) $(scnnames_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(scnnames_OBJECTS) $(scnnames_LDADD) $(LIBS) + sectiondump$(EXEEXT): $(sectiondump_OBJECTS) $(sectiondump_DEPENDENCIES) $(EXTRA_sectiondump_DEPENDENCIES) @rm -f sectiondump$(EXEEXT) - $(LINK) $(sectiondump_OBJECTS) $(sectiondump_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(sectiondump_OBJECTS) $(sectiondump_LDADD) $(LIBS) + show-abbrev$(EXEEXT): $(show_abbrev_OBJECTS) $(show_abbrev_DEPENDENCIES) $(EXTRA_show_abbrev_DEPENDENCIES) @rm -f show-abbrev$(EXEEXT) - $(LINK) $(show_abbrev_OBJECTS) $(show_abbrev_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(show_abbrev_OBJECTS) $(show_abbrev_LDADD) $(LIBS) + show-die-info$(EXEEXT): $(show_die_info_OBJECTS) $(show_die_info_DEPENDENCIES) $(EXTRA_show_die_info_DEPENDENCIES) @rm -f show-die-info$(EXEEXT) - $(LINK) $(show_die_info_OBJECTS) $(show_die_info_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(show_die_info_OBJECTS) $(show_die_info_LDADD) $(LIBS) + showptable$(EXEEXT): $(showptable_OBJECTS) $(showptable_DEPENDENCIES) $(EXTRA_showptable_DEPENDENCIES) @rm -f showptable$(EXEEXT) - $(LINK) $(showptable_OBJECTS) $(showptable_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(showptable_OBJECTS) $(showptable_LDADD) $(LIBS) + test-elf_cntl_gelf_getshdr$(EXEEXT): $(test_elf_cntl_gelf_getshdr_OBJECTS) $(test_elf_cntl_gelf_getshdr_DEPENDENCIES) $(EXTRA_test_elf_cntl_gelf_getshdr_DEPENDENCIES) @rm -f test-elf_cntl_gelf_getshdr$(EXEEXT) - $(LINK) $(test_elf_cntl_gelf_getshdr_OBJECTS) $(test_elf_cntl_gelf_getshdr_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(test_elf_cntl_gelf_getshdr_OBJECTS) $(test_elf_cntl_gelf_getshdr_LDADD) $(LIBS) + test-flag-nobits$(EXEEXT): $(test_flag_nobits_OBJECTS) $(test_flag_nobits_DEPENDENCIES) $(EXTRA_test_flag_nobits_DEPENDENCIES) @rm -f test-flag-nobits$(EXEEXT) - $(LINK) $(test_flag_nobits_OBJECTS) $(test_flag_nobits_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(test_flag_nobits_OBJECTS) $(test_flag_nobits_LDADD) $(LIBS) + test-nlist$(EXEEXT): $(test_nlist_OBJECTS) $(test_nlist_DEPENDENCIES) $(EXTRA_test_nlist_DEPENDENCIES) @rm -f test-nlist$(EXEEXT) - $(LINK) $(test_nlist_OBJECTS) $(test_nlist_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(test_nlist_OBJECTS) $(test_nlist_LDADD) $(LIBS) + typeiter$(EXEEXT): $(typeiter_OBJECTS) $(typeiter_DEPENDENCIES) $(EXTRA_typeiter_DEPENDENCIES) @rm -f typeiter$(EXEEXT) - $(LINK) $(typeiter_OBJECTS) $(typeiter_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(typeiter_OBJECTS) $(typeiter_LDADD) $(LIBS) + +typeiter2$(EXEEXT): $(typeiter2_OBJECTS) $(typeiter2_DEPENDENCIES) $(EXTRA_typeiter2_DEPENDENCIES) + @rm -f typeiter2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(typeiter2_OBJECTS) $(typeiter2_LDADD) $(LIBS) + update1$(EXEEXT): $(update1_OBJECTS) $(update1_DEPENDENCIES) $(EXTRA_update1_DEPENDENCIES) @rm -f update1$(EXEEXT) - $(LINK) $(update1_OBJECTS) $(update1_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(update1_OBJECTS) $(update1_LDADD) $(LIBS) + update2$(EXEEXT): $(update2_OBJECTS) $(update2_DEPENDENCIES) $(EXTRA_update2_DEPENDENCIES) @rm -f update2$(EXEEXT) - $(LINK) $(update2_OBJECTS) $(update2_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(update2_OBJECTS) $(update2_LDADD) $(LIBS) + update3$(EXEEXT): $(update3_OBJECTS) $(update3_DEPENDENCIES) $(EXTRA_update3_DEPENDENCIES) @rm -f update3$(EXEEXT) - $(LINK) $(update3_OBJECTS) $(update3_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(update3_OBJECTS) $(update3_LDADD) $(LIBS) + update4$(EXEEXT): $(update4_OBJECTS) $(update4_DEPENDENCIES) $(EXTRA_update4_DEPENDENCIES) @rm -f update4$(EXEEXT) - $(LINK) $(update4_OBJECTS) $(update4_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(update4_OBJECTS) $(update4_LDADD) $(LIBS) + +varlocs$(EXEEXT): $(varlocs_OBJECTS) $(varlocs_DEPENDENCIES) $(EXTRA_varlocs_DEPENDENCIES) + @rm -f varlocs$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(varlocs_OBJECTS) $(varlocs_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -913,6 +1465,14 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst7.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst9.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backtrace-child.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backtrace-data.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backtrace.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backtrace_child-backtrace-child.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backtrace_dwarf-backtrace-dwarf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugaltlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debuglink.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf-getmacros.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf-getstring.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-addr-sect.Po@am__quote@ @@ -920,7 +1480,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-bug-fd-leak.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-bug-getmodules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-bug-report.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfl-report-elf-align.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwfllines.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwflmodtest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwflsyms.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/early-offscn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find-prologues.Po@am__quote@ @@ -949,45 +1512,64 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-flag-nobits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nlist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/typeiter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/typeiter2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varlocs.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +backtrace_child-backtrace-child.o: backtrace-child.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(backtrace_child_CFLAGS) $(CFLAGS) -MT backtrace_child-backtrace-child.o -MD -MP -MF $(DEPDIR)/backtrace_child-backtrace-child.Tpo -c -o backtrace_child-backtrace-child.o `test -f 'backtrace-child.c' || echo '$(srcdir)/'`backtrace-child.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/backtrace_child-backtrace-child.Tpo $(DEPDIR)/backtrace_child-backtrace-child.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='backtrace-child.c' object='backtrace_child-backtrace-child.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(backtrace_child_CFLAGS) $(CFLAGS) -c -o backtrace_child-backtrace-child.o `test -f 'backtrace-child.c' || echo '$(srcdir)/'`backtrace-child.c + +backtrace_child-backtrace-child.obj: backtrace-child.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(backtrace_child_CFLAGS) $(CFLAGS) -MT backtrace_child-backtrace-child.obj -MD -MP -MF $(DEPDIR)/backtrace_child-backtrace-child.Tpo -c -o backtrace_child-backtrace-child.obj `if test -f 'backtrace-child.c'; then $(CYGPATH_W) 'backtrace-child.c'; else $(CYGPATH_W) '$(srcdir)/backtrace-child.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/backtrace_child-backtrace-child.Tpo $(DEPDIR)/backtrace_child-backtrace-child.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='backtrace-child.c' object='backtrace_child-backtrace-child.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(backtrace_child_CFLAGS) $(CFLAGS) -c -o backtrace_child-backtrace-child.obj `if test -f 'backtrace-child.c'; then $(CYGPATH_W) 'backtrace-child.c'; else $(CYGPATH_W) '$(srcdir)/backtrace-child.c'; fi` + +backtrace_dwarf-backtrace-dwarf.o: backtrace-dwarf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(backtrace_dwarf_CFLAGS) $(CFLAGS) -MT backtrace_dwarf-backtrace-dwarf.o -MD -MP -MF $(DEPDIR)/backtrace_dwarf-backtrace-dwarf.Tpo -c -o backtrace_dwarf-backtrace-dwarf.o `test -f 'backtrace-dwarf.c' || echo '$(srcdir)/'`backtrace-dwarf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/backtrace_dwarf-backtrace-dwarf.Tpo $(DEPDIR)/backtrace_dwarf-backtrace-dwarf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='backtrace-dwarf.c' object='backtrace_dwarf-backtrace-dwarf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(backtrace_dwarf_CFLAGS) $(CFLAGS) -c -o backtrace_dwarf-backtrace-dwarf.o `test -f 'backtrace-dwarf.c' || echo '$(srcdir)/'`backtrace-dwarf.c + +backtrace_dwarf-backtrace-dwarf.obj: backtrace-dwarf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(backtrace_dwarf_CFLAGS) $(CFLAGS) -MT backtrace_dwarf-backtrace-dwarf.obj -MD -MP -MF $(DEPDIR)/backtrace_dwarf-backtrace-dwarf.Tpo -c -o backtrace_dwarf-backtrace-dwarf.obj `if test -f 'backtrace-dwarf.c'; then $(CYGPATH_W) 'backtrace-dwarf.c'; else $(CYGPATH_W) '$(srcdir)/backtrace-dwarf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/backtrace_dwarf-backtrace-dwarf.Tpo $(DEPDIR)/backtrace_dwarf-backtrace-dwarf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='backtrace-dwarf.c' object='backtrace_dwarf-backtrace-dwarf.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(backtrace_dwarf_CFLAGS) $(CFLAGS) -c -o backtrace_dwarf-backtrace-dwarf.obj `if test -f 'backtrace-dwarf.c'; then $(CYGPATH_W) 'backtrace-dwarf.c'; else $(CYGPATH_W) '$(srcdir)/backtrace-dwarf.c'; fi` + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ @@ -999,15 +1581,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $$unique; \ fi; \ fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique @@ -1016,102 +1594,1041 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ - else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ else \ - skipped="($$skip tests were not run)"; \ + color_start= color_end=; \ fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - col="$$grn"; \ - else \ - col="$$red"; \ - fi; \ - echo "$${col}$$dashes$${std}"; \ - echo "$${col}$$banner$${std}"; \ - test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ - test -z "$$report" || echo "$${col}$$report$${std}"; \ - echo "$${col}$$dashes$${std}"; \ - test "$$failed" -eq 0; \ - else :; fi + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +run-arextract.sh.log: run-arextract.sh + @p='run-arextract.sh'; \ + b='run-arextract.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-arsymtest.sh.log: run-arsymtest.sh + @p='run-arsymtest.sh'; \ + b='run-arsymtest.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +newfile.log: newfile$(EXEEXT) + @p='newfile$(EXEEXT)'; \ + b='newfile'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-nlist.log: test-nlist$(EXEEXT) + @p='test-nlist$(EXEEXT)'; \ + b='test-nlist'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +update1.log: update1$(EXEEXT) + @p='update1$(EXEEXT)'; \ + b='update1'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +update2.log: update2$(EXEEXT) + @p='update2$(EXEEXT)'; \ + b='update2'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +update3.log: update3$(EXEEXT) + @p='update3$(EXEEXT)'; \ + b='update3'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +update4.log: update4$(EXEEXT) + @p='update4$(EXEEXT)'; \ + b='update4'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-show-die-info.sh.log: run-show-die-info.sh + @p='run-show-die-info.sh'; \ + b='run-show-die-info.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-get-files.sh.log: run-get-files.sh + @p='run-get-files.sh'; \ + b='run-get-files.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-get-lines.sh.log: run-get-lines.sh + @p='run-get-lines.sh'; \ + b='run-get-lines.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-get-pubnames.sh.log: run-get-pubnames.sh + @p='run-get-pubnames.sh'; \ + b='run-get-pubnames.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-get-aranges.sh.log: run-get-aranges.sh + @p='run-get-aranges.sh'; \ + b='run-get-aranges.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-allfcts.sh.log: run-allfcts.sh + @p='run-allfcts.sh'; \ + b='run-allfcts.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-show-abbrev.sh.log: run-show-abbrev.sh + @p='run-show-abbrev.sh'; \ + b='run-show-abbrev.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-line2addr.sh.log: run-line2addr.sh + @p='run-line2addr.sh'; \ + b='run-line2addr.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +hash.log: hash$(EXEEXT) + @p='hash$(EXEEXT)'; \ + b='hash'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +newscn.log: newscn$(EXEEXT) + @p='newscn$(EXEEXT)'; \ + b='newscn'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-test.sh.log: run-strip-test.sh + @p='run-strip-test.sh'; \ + b='run-strip-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-test2.sh.log: run-strip-test2.sh + @p='run-strip-test2.sh'; \ + b='run-strip-test2.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-test3.sh.log: run-strip-test3.sh + @p='run-strip-test3.sh'; \ + b='run-strip-test3.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-test4.sh.log: run-strip-test4.sh + @p='run-strip-test4.sh'; \ + b='run-strip-test4.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-test5.sh.log: run-strip-test5.sh + @p='run-strip-test5.sh'; \ + b='run-strip-test5.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-test6.sh.log: run-strip-test6.sh + @p='run-strip-test6.sh'; \ + b='run-strip-test6.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-test7.sh.log: run-strip-test7.sh + @p='run-strip-test7.sh'; \ + b='run-strip-test7.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-test8.sh.log: run-strip-test8.sh + @p='run-strip-test8.sh'; \ + b='run-strip-test8.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-groups.sh.log: run-strip-groups.sh + @p='run-strip-groups.sh'; \ + b='run-strip-groups.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strip-reloc.sh.log: run-strip-reloc.sh + @p='run-strip-reloc.sh'; \ + b='run-strip-reloc.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-unstrip-test.sh.log: run-unstrip-test.sh + @p='run-unstrip-test.sh'; \ + b='run-unstrip-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-unstrip-test2.sh.log: run-unstrip-test2.sh + @p='run-unstrip-test2.sh'; \ + b='run-unstrip-test2.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-unstrip-M.sh.log: run-unstrip-M.sh + @p='run-unstrip-M.sh'; \ + b='run-unstrip-M.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-ecp-test.sh.log: run-ecp-test.sh + @p='run-ecp-test.sh'; \ + b='run-ecp-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-ecp-test2.sh.log: run-ecp-test2.sh + @p='run-ecp-test2.sh'; \ + b='run-ecp-test2.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-alldts.sh.log: run-alldts.sh + @p='run-alldts.sh'; \ + b='run-alldts.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-elflint-test.sh.log: run-elflint-test.sh + @p='run-elflint-test.sh'; \ + b='run-elflint-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-elflint-self.sh.log: run-elflint-self.sh + @p='run-elflint-self.sh'; \ + b='run-elflint-self.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-ranlib-test.sh.log: run-ranlib-test.sh + @p='run-ranlib-test.sh'; \ + b='run-ranlib-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-ranlib-test2.sh.log: run-ranlib-test2.sh + @p='run-ranlib-test2.sh'; \ + b='run-ranlib-test2.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-ranlib-test3.sh.log: run-ranlib-test3.sh + @p='run-ranlib-test3.sh'; \ + b='run-ranlib-test3.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-ranlib-test4.sh.log: run-ranlib-test4.sh + @p='run-ranlib-test4.sh'; \ + b='run-ranlib-test4.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-addrscopes.sh.log: run-addrscopes.sh + @p='run-addrscopes.sh'; \ + b='run-addrscopes.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-strings-test.sh.log: run-strings-test.sh + @p='run-strings-test.sh'; \ + b='run-strings-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-funcscopes.sh.log: run-funcscopes.sh + @p='run-funcscopes.sh'; \ + b='run-funcscopes.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-find-prologues.sh.log: run-find-prologues.sh + @p='run-find-prologues.sh'; \ + b='run-find-prologues.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-allregs.sh.log: run-allregs.sh + @p='run-allregs.sh'; \ + b='run-allregs.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-addrcfi.sh.log: run-addrcfi.sh + @p='run-addrcfi.sh'; \ + b='run-addrcfi.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-nm-self.sh.log: run-nm-self.sh + @p='run-nm-self.sh'; \ + b='run-nm-self.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-self.sh.log: run-readelf-self.sh + @p='run-readelf-self.sh'; \ + b='run-readelf-self.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-test1.sh.log: run-readelf-test1.sh + @p='run-readelf-test1.sh'; \ + b='run-readelf-test1.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-test2.sh.log: run-readelf-test2.sh + @p='run-readelf-test2.sh'; \ + b='run-readelf-test2.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-test3.sh.log: run-readelf-test3.sh + @p='run-readelf-test3.sh'; \ + b='run-readelf-test3.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-test4.sh.log: run-readelf-test4.sh + @p='run-readelf-test4.sh'; \ + b='run-readelf-test4.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-twofiles.sh.log: run-readelf-twofiles.sh + @p='run-readelf-twofiles.sh'; \ + b='run-readelf-twofiles.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-macro.sh.log: run-readelf-macro.sh + @p='run-readelf-macro.sh'; \ + b='run-readelf-macro.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-loc.sh.log: run-readelf-loc.sh + @p='run-readelf-loc.sh'; \ + b='run-readelf-loc.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-aranges.sh.log: run-readelf-aranges.sh + @p='run-readelf-aranges.sh'; \ + b='run-readelf-aranges.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-line.sh.log: run-readelf-line.sh + @p='run-readelf-line.sh'; \ + b='run-readelf-line.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-native-test.sh.log: run-native-test.sh + @p='run-native-test.sh'; \ + b='run-native-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-bug1-test.sh.log: run-bug1-test.sh + @p='run-bug1-test.sh'; \ + b='run-bug1-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-debuglink.sh.log: run-debuglink.sh + @p='run-debuglink.sh'; \ + b='run-debuglink.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-debugaltlink.sh.log: run-debugaltlink.sh + @p='run-debugaltlink.sh'; \ + b='run-debugaltlink.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-buildid.sh.log: run-buildid.sh + @p='run-buildid.sh'; \ + b='run-buildid.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +dwfl-bug-addr-overflow.log: dwfl-bug-addr-overflow$(EXEEXT) + @p='dwfl-bug-addr-overflow$(EXEEXT)'; \ + b='dwfl-bug-addr-overflow'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-addrname-test.sh.log: run-addrname-test.sh + @p='run-addrname-test.sh'; \ + b='run-addrname-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +dwfl-bug-fd-leak.log: dwfl-bug-fd-leak$(EXEEXT) + @p='dwfl-bug-fd-leak$(EXEEXT)'; \ + b='dwfl-bug-fd-leak'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +dwfl-bug-report.log: dwfl-bug-report$(EXEEXT) + @p='dwfl-bug-report$(EXEEXT)'; \ + b='dwfl-bug-report'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-dwfl-bug-offline-rel.sh.log: run-dwfl-bug-offline-rel.sh + @p='run-dwfl-bug-offline-rel.sh'; \ + b='run-dwfl-bug-offline-rel.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-dwfl-addr-sect.sh.log: run-dwfl-addr-sect.sh + @p='run-dwfl-addr-sect.sh'; \ + b='run-dwfl-addr-sect.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-disasm-x86.sh.log: run-disasm-x86.sh + @p='run-disasm-x86.sh'; \ + b='run-disasm-x86.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-disasm-x86-64.sh.log: run-disasm-x86-64.sh + @p='run-disasm-x86-64.sh'; \ + b='run-disasm-x86-64.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-early-offscn.sh.log: run-early-offscn.sh + @p='run-early-offscn.sh'; \ + b='run-early-offscn.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-dwarf-getmacros.sh.log: run-dwarf-getmacros.sh + @p='run-dwarf-getmacros.sh'; \ + b='run-dwarf-getmacros.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-test-flag-nobits.sh.log: run-test-flag-nobits.sh + @p='run-test-flag-nobits.sh'; \ + b='run-test-flag-nobits.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-prelink-addr-test.sh.log: run-prelink-addr-test.sh + @p='run-prelink-addr-test.sh'; \ + b='run-prelink-addr-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-dwarf-getstring.sh.log: run-dwarf-getstring.sh + @p='run-dwarf-getstring.sh'; \ + b='run-dwarf-getstring.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-rerequest_tag.sh.log: run-rerequest_tag.sh + @p='run-rerequest_tag.sh'; \ + b='run-rerequest_tag.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-typeiter.sh.log: run-typeiter.sh + @p='run-typeiter.sh'; \ + b='run-typeiter.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-d.sh.log: run-readelf-d.sh + @p='run-readelf-d.sh'; \ + b='run-readelf-d.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-gdb_index.sh.log: run-readelf-gdb_index.sh + @p='run-readelf-gdb_index.sh'; \ + b='run-readelf-gdb_index.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-unstrip-n.sh.log: run-unstrip-n.sh + @p='run-unstrip-n.sh'; \ + b='run-unstrip-n.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-low_high_pc.sh.log: run-low_high_pc.sh + @p='run-low_high_pc.sh'; \ + b='run-low_high_pc.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-macro-test.sh.log: run-macro-test.sh + @p='run-macro-test.sh'; \ + b='run-macro-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-elf_cntl_gelf_getshdr.sh.log: run-elf_cntl_gelf_getshdr.sh + @p='run-elf_cntl_gelf_getshdr.sh'; \ + b='run-elf_cntl_gelf_getshdr.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-test-archive64.sh.log: run-test-archive64.sh + @p='run-test-archive64.sh'; \ + b='run-test-archive64.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-vmcoreinfo.sh.log: run-readelf-vmcoreinfo.sh + @p='run-readelf-vmcoreinfo.sh'; \ + b='run-readelf-vmcoreinfo.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-mixed-corenote.sh.log: run-readelf-mixed-corenote.sh + @p='run-readelf-mixed-corenote.sh'; \ + b='run-readelf-mixed-corenote.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-dwfllines.sh.log: run-dwfllines.sh + @p='run-dwfllines.sh'; \ + b='run-dwfllines.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-dwfl-report-elf-align.sh.log: run-dwfl-report-elf-align.sh + @p='run-dwfl-report-elf-align.sh'; \ + b='run-dwfl-report-elf-align.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-addr2line-test.sh.log: run-addr2line-test.sh + @p='run-addr2line-test.sh'; \ + b='run-addr2line-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-addr2line-i-test.sh.log: run-addr2line-i-test.sh + @p='run-addr2line-i-test.sh'; \ + b='run-addr2line-i-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-varlocs.sh.log: run-varlocs.sh + @p='run-varlocs.sh'; \ + b='run-varlocs.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-funcretval.sh.log: run-funcretval.sh + @p='run-funcretval.sh'; \ + b='run-funcretval.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-native.sh.log: run-backtrace-native.sh + @p='run-backtrace-native.sh'; \ + b='run-backtrace-native.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-data.sh.log: run-backtrace-data.sh + @p='run-backtrace-data.sh'; \ + b='run-backtrace-data.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-dwarf.sh.log: run-backtrace-dwarf.sh + @p='run-backtrace-dwarf.sh'; \ + b='run-backtrace-dwarf.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-native-biarch.sh.log: run-backtrace-native-biarch.sh + @p='run-backtrace-native-biarch.sh'; \ + b='run-backtrace-native-biarch.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-native-core.sh.log: run-backtrace-native-core.sh + @p='run-backtrace-native-core.sh'; \ + b='run-backtrace-native-core.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-native-core-biarch.sh.log: run-backtrace-native-core-biarch.sh + @p='run-backtrace-native-core-biarch.sh'; \ + b='run-backtrace-native-core-biarch.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-core-x86_64.sh.log: run-backtrace-core-x86_64.sh + @p='run-backtrace-core-x86_64.sh'; \ + b='run-backtrace-core-x86_64.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-core-i386.sh.log: run-backtrace-core-i386.sh + @p='run-backtrace-core-i386.sh'; \ + b='run-backtrace-core-i386.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-core-ppc.sh.log: run-backtrace-core-ppc.sh + @p='run-backtrace-core-ppc.sh'; \ + b='run-backtrace-core-ppc.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-core-s390x.sh.log: run-backtrace-core-s390x.sh + @p='run-backtrace-core-s390x.sh'; \ + b='run-backtrace-core-s390x.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-core-s390.sh.log: run-backtrace-core-s390.sh + @p='run-backtrace-core-s390.sh'; \ + b='run-backtrace-core-s390.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-core-aarch64.sh.log: run-backtrace-core-aarch64.sh + @p='run-backtrace-core-aarch64.sh'; \ + b='run-backtrace-core-aarch64.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-backtrace-demangle.sh.log: run-backtrace-demangle.sh + @p='run-backtrace-demangle.sh'; \ + b='run-backtrace-demangle.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-stack-d-test.sh.log: run-stack-d-test.sh + @p='run-stack-d-test.sh'; \ + b='run-stack-d-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-stack-i-test.sh.log: run-stack-i-test.sh + @p='run-stack-i-test.sh'; \ + b='run-stack-i-test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-dwz-multi.sh.log: run-readelf-dwz-multi.sh + @p='run-readelf-dwz-multi.sh'; \ + b='run-readelf-dwz-multi.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-allfcts-multi.sh.log: run-allfcts-multi.sh + @p='run-allfcts-multi.sh'; \ + b='run-allfcts-multi.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +msg_tst.log: msg_tst$(EXEEXT) + @p='msg_tst$(EXEEXT)'; \ + b='msg_tst'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +md5-sha1-test.log: md5-sha1-test$(EXEEXT) + @p='md5-sha1-test$(EXEEXT)'; \ + b='md5-sha1-test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-s.sh.log: run-readelf-s.sh + @p='run-readelf-s.sh'; \ + b='run-readelf-s.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-dwflsyms.sh.log: run-dwflsyms.sh + @p='run-dwflsyms.sh'; \ + b='run-dwflsyms.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +run-readelf-zdebug.sh.log: run-readelf-zdebug.sh + @p='run-readelf-zdebug.sh'; \ + b='run-readelf-zdebug.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +asm-tst1.log: asm-tst1$(EXEEXT) + @p='asm-tst1$(EXEEXT)'; \ + b='asm-tst1'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +asm-tst2.log: asm-tst2$(EXEEXT) + @p='asm-tst2$(EXEEXT)'; \ + b='asm-tst2'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +asm-tst3.log: asm-tst3$(EXEEXT) + @p='asm-tst3$(EXEEXT)'; \ + b='asm-tst3'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +asm-tst4.log: asm-tst4$(EXEEXT) + @p='asm-tst4$(EXEEXT)'; \ + b='asm-tst4'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +asm-tst5.log: asm-tst5$(EXEEXT) + @p='asm-tst5$(EXEEXT)'; \ + b='asm-tst5'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +asm-tst6.log: asm-tst6$(EXEEXT) + @p='asm-tst6$(EXEEXT)'; \ + b='asm-tst6'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +asm-tst7.log: asm-tst7$(EXEEXT) + @p='asm-tst7$(EXEEXT)'; \ + b='asm-tst7'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +asm-tst8.log: asm-tst8$(EXEEXT) + @p='asm-tst8$(EXEEXT)'; \ + b='asm-tst8'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +asm-tst9.log: asm-tst9$(EXEEXT) + @p='asm-tst9$(EXEEXT)'; \ + b='asm-tst9'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @@ -1169,6 +2686,9 @@ install-strip: "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) @@ -1252,18 +2772,18 @@ uninstall-am: .MAKE: check-am install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-checkPROGRAMS clean-generic ctags distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installcheck-local installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags uninstall uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic cscopelist-am ctags ctags-am \ + distclean distclean-compile distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installcheck-local \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am recheck tags tags-am uninstall uninstall-am %.os: %.c %.o @@ -1275,9 +2795,22 @@ uninstall-am: @AMDEP_TRUE@ fi @AMDEP_FALSE@ $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED $< +# Substitute $(COMPILE). +backtrace-child-biarch$(EXEEXT): backtrace-child.c + $(CC_BIARCH) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) $(backtrace_child_CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) $(backtrace_child_LDFLAGS) \ + -o $@ $< + +@BIARCH_FALSE@export ELFUTILS_DISABLE_BIARCH = 1 + +@DEMANGLE_FALSE@export ELFUTILS_DISABLE_DEMANGLE = 1 + @STANDALONE_FALSE@installcheck-local: @STANDALONE_FALSE@ $(MAKE) $(AM_MAKEFLAGS) \ -@STANDALONE_FALSE@ TESTS_ENVIRONMENT='$(installed_TESTS_ENVIRONMENT)' check-TESTS +@STANDALONE_FALSE@ TESTS_ENVIRONMENT="$(installed_TESTS_ENVIRONMENT)" \ +@STANDALONE_FALSE@ LOG_COMPILER="$(installed_LOG_COMPILER)" check-TESTS @GCOV_TRUE@check: check-am coverage @GCOV_TRUE@.PHONY: coverage diff --git a/tests/addrcfi.c b/tests/addrcfi.c index bc8bc32..8a2d126 100644 --- a/tests/addrcfi.c +++ b/tests/addrcfi.c @@ -1,5 +1,5 @@ /* Test program for CFI handling. - Copyright (C) 2009-2010 Red Hat, Inc. + Copyright (C) 2009-2010, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -25,9 +25,27 @@ #include #include #include -#include #include +#include "../libdw/known-dwarf.h" + +static const char * +op_name (unsigned int code) +{ + static const char *const known[] = + { +#define ONE_KNOWN_DW_OP_DESC(NAME, CODE, DESC) ONE_KNOWN_DW_OP (NAME, CODE) +#define ONE_KNOWN_DW_OP(NAME, CODE) [CODE] = #NAME, + ALL_KNOWN_DW_OP +#undef ONE_KNOWN_DW_OP +#undef ONE_KNOWN_DW_OP_DESC + }; + + if (likely (code < sizeof (known) / sizeof (known[0]))) + return known[code]; + + return NULL; +} static void print_detail (int result, const Dwarf_Op *ops, size_t nops, Dwarf_Addr bias) @@ -35,13 +53,13 @@ print_detail (int result, const Dwarf_Op *ops, size_t nops, Dwarf_Addr bias) if (result < 0) printf ("indeterminate (%s)\n", dwarf_errmsg (-1)); else if (nops == 0) - printf ("%s\n", result == 0 ? "same_value" : "undefined"); + printf ("%s\n", ops == NULL ? "same_value" : "undefined"); else { printf ("%s expression:", result == 0 ? "location" : "value"); for (size_t i = 0; i < nops; ++i) { - printf (" %#x", ops[i].atom); + printf (" %s", op_name(ops[i].atom)); if (ops[i].number2 == 0) { if (ops[i].atom == DW_OP_addr) @@ -89,10 +107,16 @@ static int handle_cfi (Dwfl *dwfl, const char *which, Dwarf_CFI *cfi, GElf_Addr pc, struct stuff *stuff) { + if (cfi == NULL) + { + printf ("handle_cfi no CFI (%s): %s\n", which, dwarf_errmsg (-1)); + return -1; + } + int result = dwarf_cfi_addrframe (cfi, pc - stuff->bias, &stuff->frame); if (result != 0) { - error (0, 0, "dwarf_cfi_addrframe (%s): %s", which, dwarf_errmsg (-1)); + printf ("dwarf_cfi_addrframe (%s): %s\n", which, dwarf_errmsg (-1)); return 1; } @@ -116,7 +140,10 @@ handle_cfi (Dwfl *dwfl, const char *which, Dwarf_CFI *cfi, printf ("\treturn address in reg%u%s\n", ra_regno, signalp ? " (signal frame)" : ""); - Dwarf_Op *cfa_ops; + // Point cfa_ops to dummy to match print_detail expectations. + // (nops == 0 && cfa_ops != NULL => "undefined") + Dwarf_Op dummy; + Dwarf_Op *cfa_ops = &dummy; size_t cfa_nops; result = dwarf_frame_cfa (stuff->frame, &cfa_ops, &cfa_nops); diff --git a/tests/allfcts.c b/tests/allfcts.c index f14b493..d3c8d26 100644 --- a/tests/allfcts.c +++ b/tests/allfcts.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2005 Red Hat, Inc. +/* Copyright (C) 2005, 2013 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -18,8 +18,10 @@ # include #endif +#include #include #include ELFUTILS_HEADER(dw) +#include ELFUTILS_HEADER(dwelf) #include #include @@ -34,9 +36,31 @@ cb (Dwarf_Die *func, void *arg __attribute__ ((unused))) printf ("%s:%d:%s\n", file, line, fct); - return DWARF_CB_OK; + return DWARF_CB_ABORT; } +static Dwarf * +setup_alt (Dwarf *main) +{ + const char *alt_name; + const void *build_id; + ssize_t ret = dwelf_dwarf_gnu_debugaltlink (main, &alt_name, &build_id); + if (ret == 0) + return NULL; + if (ret == -1) + errx (1, "dwelf_dwarf_gnu_debugaltlink: %s", dwarf_errmsg (-1)); + int fd = open (alt_name, O_RDONLY); + if (fd < 0) + err (1, "open (%s)", alt_name); + Dwarf *dbg_alt = dwarf_begin (fd, DWARF_C_READ); + if (dbg_alt == NULL) + errx (1, "dwarf_begin (%s): %s", alt_name, dwarf_errmsg (-1)); + if (elf_cntl (dwarf_getelf (dbg_alt), ELF_C_FDREAD) != 0) + errx (1, "elf_cntl (%s, ELF_C_FDREAD): %s", alt_name, elf_errmsg (-1)); + close (fd); + dwarf_setalt (main, dbg_alt); + return dbg_alt; +} int main (int argc, char *argv[]) @@ -44,6 +68,8 @@ main (int argc, char *argv[]) for (int i = 1; i < argc; ++i) { int fd = open (argv[i], O_RDONLY); + if (fd < 0) + err (1, "open (%s)", argv[i]); Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); if (dbg != NULL) @@ -51,19 +77,32 @@ main (int argc, char *argv[]) Dwarf_Off off = 0; size_t cuhl; Dwarf_Off noff; + Dwarf *dbg_alt = setup_alt (dbg); while (dwarf_nextcu (dbg, off, &noff, &cuhl, NULL, NULL, NULL) == 0) { Dwarf_Die die_mem; Dwarf_Die *die = dwarf_offdie (dbg, off + cuhl, &die_mem); - (void) dwarf_getfuncs (die, cb, NULL, 0); + /* Explicitly stop in the callback and then resume each time. */ + ptrdiff_t doff = 0; + do + { + doff = dwarf_getfuncs (die, cb, NULL, doff); + if (dwarf_errno () != 0) + errx (1, "dwarf_getfuncs (%s): %s", + argv[i], dwarf_errmsg (-1)); + } + while (doff != 0); off = noff; } + dwarf_end (dbg_alt); dwarf_end (dbg); } + else + errx (1, "dwarf_begin (%s): %s", argv[i], dwarf_errmsg (-1)); close (fd); } diff --git a/tests/backtrace-child.c b/tests/backtrace-child.c new file mode 100644 index 0000000..788801c --- /dev/null +++ b/tests/backtrace-child.c @@ -0,0 +1,240 @@ +/* Test child for parent backtrace test. + Copyright (C) 2013 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 . */ + +/* Command line syntax: ./backtrace-child [--ptraceme|--gencore] + --ptraceme will call ptrace (PTRACE_TRACEME) in the two threads. + --gencore will call abort () at its end. + Main thread will signal SIGUSR2. Other thread will signal SIGUSR1. + On x86_64 only: + PC will get changed to function 'jmp' by backtrace.c function + prepare_thread. Then SIGUSR2 will be signalled to backtrace-child + which will invoke function sigusr2. + This is all done so that signal interrupts execution of the very first + instruction of a function. Properly handled unwind should not slip into + the previous unrelated function. + The tested functionality is arch-independent but the code reproducing it + has to be arch-specific. + On non-x86_64: + sigusr2 gets called by normal function call from function stdarg. + On any arch then sigusr2 calls raise (SIGUSR1) for --ptraceme. + abort () is called otherwise, expected for --gencore core dump. + + Expected x86_64 output: + TID 10276: + # 0 0x7f7ab61e9e6b raise + # 1 0x7f7ab661af47 - 1 main + # 2 0x7f7ab5e3bb45 - 1 __libc_start_main + # 3 0x7f7ab661aa09 - 1 _start + TID 10278: + # 0 0x7f7ab61e9e6b raise + # 1 0x7f7ab661ab3c - 1 sigusr2 + # 2 0x7f7ab5e4fa60 __restore_rt + # 3 0x7f7ab661ab47 jmp + # 4 0x7f7ab661ac92 - 1 stdarg + # 5 0x7f7ab661acba - 1 backtracegen + # 6 0x7f7ab661acd1 - 1 start + # 7 0x7f7ab61e2c53 - 1 start_thread + # 8 0x7f7ab5f0fdbd - 1 __clone + + Expected non-x86_64 (i386) output; __kernel_vsyscall are skipped if found: + TID 10408: + # 0 0xf779f430 __kernel_vsyscall + # 1 0xf7771466 - 1 raise + # 2 0xf77c1d07 - 1 main + # 3 0xf75bd963 - 1 __libc_start_main + # 4 0xf77c1761 - 1 _start + TID 10412: + # 0 0xf779f430 __kernel_vsyscall + # 1 0xf7771466 - 1 raise + # 2 0xf77c18f4 - 1 sigusr2 + # 3 0xf77c1a10 - 1 stdarg + # 4 0xf77c1a2c - 1 backtracegen + # 5 0xf77c1a48 - 1 start + # 6 0xf77699da - 1 start_thread + # 7 0xf769bbfe - 1 __clone + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef __linux__ + +int +main (int argc __attribute__ ((unused)), char **argv) +{ + fprintf (stderr, "%s: Unwinding not supported for this architecture\n", + argv[0]); + return 77; +} + +#else /* __linux__ */ + +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +#define NOINLINE_NOCLONE __attribute__ ((noinline, noclone)) +#else +#define NOINLINE_NOCLONE __attribute__ ((noinline)) +#endif + +#define NORETURN __attribute__ ((noreturn)) +#define UNUSED __attribute__ ((unused)) +#define USED __attribute__ ((used)) + +static int ptraceme, gencore; + +/* Execution will arrive here from jmp by an artificial ptrace-spawn signal. */ + +static NOINLINE_NOCLONE void +sigusr2 (int signo) +{ + assert (signo == SIGUSR2); + if (! gencore) + { + raise (SIGUSR1); + /* Do not return as stack may be invalid due to ptrace-patched PC to the + jmp function. */ + pthread_exit (NULL); + /* Not reached. */ + abort (); + } + /* Here we dump the core for --gencore. */ + raise (SIGABRT); + /* Avoid tail call optimization for the raise call. */ + asm volatile (""); +} + +static NOINLINE_NOCLONE void +dummy1 (void) +{ + asm volatile (""); +} + +#ifdef __x86_64__ +static NOINLINE_NOCLONE USED void +jmp (void) +{ + /* Not reached, signal will get ptrace-spawn to jump into sigusr2. */ + abort (); +} +#endif + +static NOINLINE_NOCLONE void +dummy2 (void) +{ + asm volatile (""); +} + +static NOINLINE_NOCLONE NORETURN void +stdarg (int f UNUSED, ...) +{ + sighandler_t sigusr2_orig = signal (SIGUSR2, sigusr2); + assert (sigusr2_orig == SIG_DFL); + errno = 0; + if (ptraceme) + { + long l = ptrace (PTRACE_TRACEME, 0, NULL, NULL); + assert_perror (errno); + assert (l == 0); + } +#ifdef __x86_64__ + if (! gencore) + { + /* Execution will get PC patched into function jmp. */ + raise (SIGUSR1); + } +#endif + sigusr2 (SIGUSR2); + /* Not reached. */ + abort (); +} + +static NOINLINE_NOCLONE void +dummy3 (void) +{ + asm volatile (""); +} + +static NOINLINE_NOCLONE void +backtracegen (void) +{ + stdarg (1); + /* Here should be no instruction after the stdarg call as it is noreturn + function. It must be stdarg so that it is a call and not jump (jump as + a tail-call). */ +} + +static NOINLINE_NOCLONE void +dummy4 (void) +{ + asm volatile (""); +} + +static void * +start (void *arg UNUSED) +{ + backtracegen (); + /* Not reached. */ + abort (); +} + +int +main (int argc UNUSED, char **argv) +{ + setbuf (stdout, NULL); + assert (*argv++); + ptraceme = (*argv && strcmp (*argv, "--ptraceme") == 0); + argv += ptraceme; + gencore = (*argv && strcmp (*argv, "--gencore") == 0); + argv += gencore; + assert (!*argv); + /* These dummy* functions are there so that each of their surrounding + functions has some unrelated code around. The purpose of some of the + tests is verify unwinding the very first / after the very last instruction + does not inappropriately slip into the unrelated code around. */ + dummy1 (); + dummy2 (); + dummy3 (); + dummy4 (); + if (gencore) + printf ("%ld\n", (long) getpid ()); + pthread_t thread; + int i = pthread_create (&thread, NULL, start, NULL); + // pthread_* functions do not set errno. + assert (i == 0); + if (ptraceme) + { + errno = 0; + long l = ptrace (PTRACE_TRACEME, 0, NULL, NULL); + assert_perror (errno); + assert (l == 0); + } + if (gencore) + pthread_join (thread, NULL); + else + raise (SIGUSR2); + return 0; +} + +#endif /* ! __linux__ */ + diff --git a/tests/backtrace-data.c b/tests/backtrace-data.c new file mode 100644 index 0000000..01c1c00 --- /dev/null +++ b/tests/backtrace-data.c @@ -0,0 +1,328 @@ +/* Test custom provided Dwfl_Thread_Callbacks vector. + Copyright (C) 2013 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 . */ + +/* Test custom provided Dwfl_Thread_Callbacks vector. Test mimics what + a ptrace based vector would do. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include ELFUTILS_HEADER(dwfl) + +#if !defined(__x86_64__) || !defined(__linux__) + +int +main (int argc __attribute__ ((unused)), char **argv) +{ + fprintf (stderr, "%s: Unwinding not supported for this architecture\n", + argv[0]); + return 77; +} + +#else /* __x86_64__ && __linux__ */ + +/* The only arch specific code is set_initial_registers. */ + +static int +find_elf (Dwfl_Module *mod __attribute__ ((unused)), + void **userdata __attribute__ ((unused)), + const char *modname __attribute__ ((unused)), + Dwarf_Addr base __attribute__ ((unused)), + char **file_name __attribute__ ((unused)), + Elf **elfp __attribute__ ((unused))) +{ + /* Not used as modules are reported explicitly. */ + assert (0); +} + +static bool +memory_read (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Word *result, + void *dwfl_arg __attribute__ ((unused))) +{ + pid_t child = dwfl_pid (dwfl); + + errno = 0; + long l = ptrace (PTRACE_PEEKDATA, child, (void *) (uintptr_t) addr, NULL); + assert_perror (errno); + *result = l; + + /* We could also return false for failed ptrace. */ + return true; +} + +/* Return filename and VMA address *BASEP where its mapping starts which + contains ADDR. */ + +static char * +maps_lookup (pid_t pid, Dwarf_Addr addr, GElf_Addr *basep) +{ + char *fname; + int i = asprintf (&fname, "/proc/%ld/maps", (long) pid); + assert_perror (errno); + assert (i > 0); + FILE *f = fopen (fname, "r"); + assert_perror (errno); + assert (f); + free (fname); + for (;;) + { + // 37e3c22000-37e3c23000 rw-p 00022000 00:11 49532 /lib64/ld-2.14.90.so */ + unsigned long start, end, offset; + i = fscanf (f, "%lx-%lx %*s %lx %*x:%*x %*x", &start, &end, &offset); + assert_perror (errno); + assert (i == 3); + char *filename = strdup (""); + assert (filename); + size_t filename_len = 0; + for (;;) + { + int c = fgetc (f); + assert (c != EOF); + if (c == '\n') + break; + if (c == ' ' && *filename == '\0') + continue; + filename = realloc (filename, filename_len + 2); + assert (filename); + filename[filename_len++] = c; + filename[filename_len] = '\0'; + } + if (start <= addr && addr < end) + { + i = fclose (f); + assert_perror (errno); + assert (i == 0); + + *basep = start - offset; + return filename; + } + free (filename); + } +} + +/* Add module containing ADDR to the DWFL address space. + + dwfl_report_elf call here violates Dwfl manipulation as one should call + dwfl_report only between dwfl_report_begin_add and dwfl_report_end. + Current elfutils implementation does not mind as dwfl_report_begin_add is + empty. */ + +static Dwfl_Module * +report_module (Dwfl *dwfl, pid_t child, Dwarf_Addr addr) +{ + GElf_Addr base; + char *long_name = maps_lookup (child, addr, &base); + Dwfl_Module *mod = dwfl_report_elf (dwfl, long_name, long_name, -1, + base, false /* add_p_vaddr */); + assert (mod); + free (long_name); + assert (dwfl_addrmodule (dwfl, addr) == mod); + return mod; +} + +static pid_t +next_thread (Dwfl *dwfl, void *dwfl_arg __attribute__ ((unused)), + void **thread_argp) +{ + if (*thread_argp != NULL) + return 0; + /* Put arbitrary non-NULL value into *THREAD_ARGP as a marker so that this + function returns non-zero PID only once. */ + *thread_argp = thread_argp; + return dwfl_pid (dwfl); +} + +static bool +set_initial_registers (Dwfl_Thread *thread, + void *thread_arg __attribute__ ((unused))) +{ + pid_t child = dwfl_pid (dwfl_thread_dwfl (thread)); + + struct user_regs_struct user_regs; + long l = ptrace (PTRACE_GETREGS, child, NULL, &user_regs); + assert_perror (errno); + assert (l == 0); + + Dwarf_Word dwarf_regs[17]; + dwarf_regs[0] = user_regs.rax; + dwarf_regs[1] = user_regs.rdx; + dwarf_regs[2] = user_regs.rcx; + dwarf_regs[3] = user_regs.rbx; + dwarf_regs[4] = user_regs.rsi; + dwarf_regs[5] = user_regs.rdi; + dwarf_regs[6] = user_regs.rbp; + dwarf_regs[7] = user_regs.rsp; + dwarf_regs[8] = user_regs.r8; + dwarf_regs[9] = user_regs.r9; + dwarf_regs[10] = user_regs.r10; + dwarf_regs[11] = user_regs.r11; + dwarf_regs[12] = user_regs.r12; + dwarf_regs[13] = user_regs.r13; + dwarf_regs[14] = user_regs.r14; + dwarf_regs[15] = user_regs.r15; + dwarf_regs[16] = user_regs.rip; + bool ok = dwfl_thread_state_registers (thread, 0, 17, dwarf_regs); + assert (ok); + + /* x86_64 has PC contained in its CFI subset of DWARF register set so + elfutils will figure out the real PC value from REGS. + So no need to explicitly call dwfl_thread_state_register_pc. */ + + return true; +} + +static const Dwfl_Thread_Callbacks callbacks = +{ + next_thread, + NULL, /* get_thread */ + memory_read, + set_initial_registers, + NULL, /* detach */ + NULL, /* thread_detach */ +}; + +static int +frame_callback (Dwfl_Frame *state, void *arg) +{ + unsigned *framenop = arg; + Dwarf_Addr pc; + bool isactivation; + if (! dwfl_frame_pc (state, &pc, &isactivation)) + { + error (1, 0, "%s", dwfl_errmsg (-1)); + return 1; + } + Dwarf_Addr pc_adjusted = pc - (isactivation ? 0 : 1); + + /* Get PC->SYMNAME. */ + Dwfl *dwfl = dwfl_thread_dwfl (dwfl_frame_thread (state)); + Dwfl_Module *mod = dwfl_addrmodule (dwfl, pc_adjusted); + if (mod == NULL) + mod = report_module (dwfl, dwfl_pid (dwfl), pc_adjusted); + const char *symname = NULL; + symname = dwfl_module_addrname (mod, pc_adjusted); + + printf ("#%2u %#" PRIx64 "%4s\t%s\n", (*framenop)++, (uint64_t) pc, + ! isactivation ? "- 1" : "", symname); + return DWARF_CB_OK; +} + +static int +thread_callback (Dwfl_Thread *thread, void *thread_arg __attribute__ ((unused))) +{ + unsigned frameno = 0; + switch (dwfl_thread_getframes (thread, frame_callback, &frameno)) + { + case 0: + break; + case -1: + error (1, 0, "dwfl_thread_getframes: %s", dwfl_errmsg (-1)); + default: + abort (); + } + return DWARF_CB_OK; +} + +int +main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))) +{ + /* We use no threads here which can interfere with handling a stream. */ + __fsetlocking (stdin, FSETLOCKING_BYCALLER); + __fsetlocking (stdout, FSETLOCKING_BYCALLER); + __fsetlocking (stderr, FSETLOCKING_BYCALLER); + + /* Set locale. */ + (void) setlocale (LC_ALL, ""); + + elf_version (EV_CURRENT); + + pid_t child = fork (); + switch (child) + { + case -1: + assert_perror (errno); + assert (0); + case 0:; + long l = ptrace (PTRACE_TRACEME, 0, NULL, NULL); + assert_perror (errno); + assert (l == 0); + raise (SIGUSR1); + return 0; + default: + break; + } + + int status; + pid_t pid = waitpid (child, &status, 0); + assert_perror (errno); + assert (pid == child); + assert (WIFSTOPPED (status)); + assert (WSTOPSIG (status) == SIGUSR1); + + static char *debuginfo_path; + static const Dwfl_Callbacks offline_callbacks = + { + .find_debuginfo = dwfl_standard_find_debuginfo, + .debuginfo_path = &debuginfo_path, + .section_address = dwfl_offline_section_address, + .find_elf = find_elf, + }; + Dwfl *dwfl = dwfl_begin (&offline_callbacks); + assert (dwfl); + + struct user_regs_struct user_regs; + long l = ptrace (PTRACE_GETREGS, child, NULL, &user_regs); + assert_perror (errno); + assert (l == 0); + report_module (dwfl, child, user_regs.rip); + + bool ok = dwfl_attach_state (dwfl, EM_NONE, child, &callbacks, NULL); + assert (ok); + + /* Multiple threads are not handled here. */ + int err = dwfl_getthreads (dwfl, thread_callback, NULL); + assert (! err); + + dwfl_end (dwfl); + kill (child, SIGKILL); + pid = waitpid (child, &status, 0); + assert_perror (errno); + assert (pid == child); + assert (WIFSIGNALED (status)); + assert (WTERMSIG (status) == SIGKILL); + + return EXIT_SUCCESS; +} + +#endif /* x86_64 */ diff --git a/tests/backtrace-dwarf.c b/tests/backtrace-dwarf.c new file mode 100644 index 0000000..87d088a --- /dev/null +++ b/tests/backtrace-dwarf.c @@ -0,0 +1,165 @@ +/* Test program for unwinding of complicated DWARF expressions. + Copyright (C) 2013 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 . */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include ELFUTILS_HEADER(dwfl) + +#ifndef __linux__ + +int +main (int argc __attribute__ ((unused)), char **argv) +{ + fprintf (stderr, "%s: Unwinding not supported for this architecture\n", + argv[0]); + return 77; +} + +#else /* __linux__ */ + +static void cleanup_13_abort (void); +#define main cleanup_13_main +#include "cleanup-13.c" +#undef main + +static void +report_pid (Dwfl *dwfl, pid_t pid) +{ + 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"); + + if (dwfl_report_end (dwfl, NULL, NULL) != 0) + error (2, 0, "dwfl_report_end: %s", dwfl_errmsg (-1)); + + result = dwfl_linux_proc_attach (dwfl, pid, true); + 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"); +} + +static Dwfl * +pid_to_dwfl (pid_t pid) +{ + 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)); + report_pid (dwfl, pid); + return dwfl; +} + +static int +frame_callback (Dwfl_Frame *state, void *frame_arg) +{ + Dwarf_Addr pc; + bool isactivation; + if (! dwfl_frame_pc (state, &pc, &isactivation)) + { + error (0, 0, "%s", dwfl_errmsg (-1)); + return DWARF_CB_ABORT; + } + Dwarf_Addr pc_adjusted = pc - (isactivation ? 0 : 1); + + /* Get PC->SYMNAME. */ + Dwfl_Thread *thread = dwfl_frame_thread (state); + Dwfl *dwfl = dwfl_thread_dwfl (thread); + Dwfl_Module *mod = dwfl_addrmodule (dwfl, pc_adjusted); + const char *symname = NULL; + if (mod) + symname = dwfl_module_addrname (mod, pc_adjusted); + + printf ("%#" PRIx64 "\t%s\n", (uint64_t) pc, symname); + + if (symname && (strcmp (symname, "main") == 0 + || strcmp (symname, ".main") == 0)) + { + kill (dwfl_pid (dwfl), SIGKILL); + exit (0); + } + + return DWARF_CB_OK; +} + +static int +thread_callback (Dwfl_Thread *thread, void *thread_arg) +{ + dwfl_thread_getframes (thread, frame_callback, NULL); + error (1, 0, "dwfl_thread_getframes: %s", dwfl_errmsg (-1)); +} + +int +main (int argc __attribute__ ((unused)), char **argv) +{ + /* We use no threads here which can interfere with handling a stream. */ + __fsetlocking (stdin, FSETLOCKING_BYCALLER); + __fsetlocking (stdout, FSETLOCKING_BYCALLER); + __fsetlocking (stderr, FSETLOCKING_BYCALLER); + + /* Set locale. */ + (void) setlocale (LC_ALL, ""); + + elf_version (EV_CURRENT); + + pid_t pid = fork (); + switch (pid) + { + case -1: + abort (); + case 0:; + long l = ptrace (PTRACE_TRACEME, 0, NULL, NULL); + assert_perror (errno); + assert (l == 0); + cleanup_13_main (); + abort (); + default: + break; + } + + errno = 0; + int status; + pid_t got = waitpid (pid, &status, 0); + assert_perror (errno); + assert (got == pid); + assert (WIFSTOPPED (status)); + assert (WSTOPSIG (status) == SIGABRT); + + Dwfl *dwfl = pid_to_dwfl (pid); + dwfl_getthreads (dwfl, thread_callback, NULL); + + /* There is an exit (0) call if we find the "main" frame, */ + error (1, 0, "dwfl_getthreads: %s", dwfl_errmsg (-1)); +} + +#endif /* ! __linux__ */ + diff --git a/tests/backtrace-subr.sh b/tests/backtrace-subr.sh new file mode 100644 index 0000000..1d3d6d4 --- /dev/null +++ b/tests/backtrace-subr.sh @@ -0,0 +1,152 @@ +# Copyright (C) 2013 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 . + +. $srcdir/test-subr.sh + +# Verify one of the backtraced threads contains function 'main'. +check_main() +{ + if grep -w main $1; then + return + fi + echo >&2 $2: no main + false +} + +# Without proper ELF symbols resolution we could get inappropriate weak +# symbol "gsignal" with the same address as the correct symbol "raise". +# It was fixed by GIT commit 78dec228b3cfb2f9300cd0b682ebf416c9674c91 . +# [patch] Improve ELF symbols preference (global > weak) +# https://lists.fedorahosted.org/pipermail/elfutils-devel/2012-October/002624.html +check_gsignal() +{ + if ! grep -w gsignal $1; then + return + fi + echo >&2 $2: found gsignal + false +} + +# Verify the STDERR output does not contain unexpected errors. +# In some cases we cannot reliably find out we got behind _start as some +# operating system do not properly terminate CFI by undefined PC. +# Ignore it here as it is a bug of OS, not a bug of elfutils. +check_err() +{ + if [ $(egrep -v <$1 'dwfl_thread_getframes: (No DWARF information found|no matching address range)$' \ + | wc -c) \ + -eq 0 ] + then + return + fi + echo >&2 $2: neither empty nor just out of DWARF + false +} + +check_all() +{ + bt=$1 + err=$2 + testname=$3 + check_main $bt $testname + check_gsignal $bt $testname + check_err $err $testname +} + +check_unsupported() +{ + err=$1 + testname=$2 + if grep -q ': Unwinding not supported for this architecture$' $err; then + 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' $err; then + echo >&2 $testname: arm needs debuginfo installed for all libraries + exit 77 + fi + ;; + esac +} + +check_core() +{ + arch=$1 + testfiles backtrace.$arch.{exec,core} + tempfiles backtrace.$arch.{bt,err} + echo ./backtrace ./backtrace.$arch.{exec,core} + testrun ${abs_builddir}/backtrace -e ./backtrace.$arch.exec --core=./backtrace.$arch.core 1>backtrace.$arch.bt 2>backtrace.$arch.err || true + cat backtrace.$arch.{bt,err} + check_unsupported backtrace.$arch.err backtrace.$arch.core + check_all backtrace.$arch.{bt,err} backtrace.$arch.core +} + +# Backtrace live process. +# Do not abort on non-zero exit code due to some warnings of ./backtrace +# - see function check_err. +check_native() +{ + child=$1 + 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_native_unsupported $child.err $child + check_all $child.{bt,err} $child +} + +# Backtrace core file. +check_native_core() +{ + child=$1 + + # Disable valgrind while dumping core. + SAVED_VALGRIND_CMD="$VALGRIND_CMD" + unset VALGRIND_CMD + + # Skip the test if we cannot adjust core ulimit. + core="core.`ulimit -c unlimited || exit 77; set +ex; testrun ${abs_builddir}/$child --gencore; true`" + # see if /proc/sys/kernel/core_uses_pid is set to 0 + if [ -f core ]; then + mv core "$core" + fi + if [ ! -f "$core" ]; then exit 77; fi + + if [ "x$SAVED_VALGRIND_CMD" != "x" ]; then + VALGRIND_CMD="$SAVED_VALGRIND_CMD" + export VALGRIND_CMD + fi + + # Do not abort on non-zero exit code due to some warnings of ./backtrace + # - see function check_err. + 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_native_unsupported $core.err $child-$core + check_all $core.{bt,err} $child-$core +} diff --git a/tests/backtrace.aarch64.core.bz2 b/tests/backtrace.aarch64.core.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..3082a5ac0ebd059c41bd5f18c2b0967bc63845c1 GIT binary patch literal 7865 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 literal 0 HcmV?d00001 diff --git a/tests/backtrace.aarch64.exec.bz2 b/tests/backtrace.aarch64.exec.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..66216b525f753ac6fce2b8f5b5f957c1a060ffdc GIT binary patch literal 370058 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‡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�B@1>yFeH$N*(l^5o>^l{ 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