From 4b7061dc929d4a5c9cccce951ee7421fe5e97347 Mon Sep 17 00:00:00 2001 From: Serge Lamikhov-Center <to_serge@users.sourceforge.net> Date: Sun, 13 Jan 2013 04:29:43 +0200 Subject: [PATCH] Dynamic section accessor is implemented Fix segment header position when no segments are present Dumper - dynamic section output added Dynamic section reader tests are added Signed-off-by: Serge Lamikhov-Center <to_serge@users.sourceforge.net> --- ELFIOTest/ELFIOTest.cpp | 67 +++++++- ELFIOTest/ELFIOTest.vcxproj | 5 +- ELFIOTest/ELFIOTest.vcxproj.filters | 5 +- Makefile.am | 5 +- Makefile.in | 49 ++++-- aclocal.m4 | 10 +- configure | 182 ++++++++++----------- elf_examples/elf_dummy_header_i386_32.elf | Bin 220 -> 220 bytes elf_examples/elf_dummy_header_i386_64.elf | Bin 304 -> 304 bytes elf_examples/elf_dummy_header_ppc_32.elf | Bin 220 -> 220 bytes elf_examples/elf_dummy_header_ppc_64.elf | Bin 304 -> 304 bytes elf_examples/hello_32_copy.o | Bin 867 -> 867 bytes elf_examples/hello_64_copy.o | Bin 1483 -> 1483 bytes elf_examples/libfunc.so | Bin 0 -> 7752 bytes elf_examples/libfunc32.so | Bin 0 -> 6675 bytes elf_examples/main | Bin 0 -> 8454 bytes elf_examples/main32 | Bin 0 -> 7212 bytes elf_examples/test_ppc_copy.o | Bin 2239 -> 2239 bytes elf_examples/write_obj_i386_32.o | Bin 580 -> 580 bytes elf_examples/write_obj_i386_32_copy.o | Bin 580 -> 580 bytes elf_examples/write_obj_i386_32_match.o | Bin 580 -> 580 bytes elf_examples/write_obj_i386_64.o | Bin 820 -> 820 bytes elf_examples/write_obj_i386_64_copy.o | Bin 820 -> 820 bytes elf_examples/write_obj_i386_64_match.o | Bin 820 -> 820 bytes elfio/elf_types.hpp | 1 + elfio/elfi_dynamic.hpp | 58 ------- elfio/elfio.hpp | 17 +- elfio/elfio_dump.hpp | 96 ++++++++++++ elfio/elfio_dynamic.hpp | 183 ++++++++++++++++++++++ elfio/elfio_relocation.hpp | 19 +-- elfio/elfio_section.hpp | 6 +- elfio/elfio_segment.hpp | 6 +- elfio/elfio_symbols.hpp | 6 +- elfio/elfo_dynamic.hpp | 75 --------- examples/Makefile.in | 35 ++++- examples/elfdump/Makefile.in | 29 +++- examples/elfdump/elfdump.cpp | 1 + examples/tutorial/Makefile.in | 29 +++- examples/write_obj/Makefile.in | 29 +++- examples/writer/Makefile.in | 29 +++- 40 files changed, 647 insertions(+), 295 deletions(-) create mode 100644 elf_examples/libfunc.so create mode 100644 elf_examples/libfunc32.so create mode 100644 elf_examples/main create mode 100644 elf_examples/main32 delete mode 100644 elfio/elfi_dynamic.hpp create mode 100644 elfio/elfio_dynamic.hpp delete mode 100644 elfio/elfo_dynamic.hpp diff --git a/ELFIOTest/ELFIOTest.cpp b/ELFIOTest/ELFIOTest.cpp index 8312879..5cceab0 100644 --- a/ELFIOTest/ELFIOTest.cpp +++ b/ELFIOTest/ELFIOTest.cpp @@ -915,9 +915,74 @@ BOOST_AUTO_TEST_CASE( test_dummy_out_ppc_64 ) checkSection( sec, 1, ".shstrtab", SHT_STRTAB, 0, 0, 17, 0, 0, 0, 0 ); - sec =reader.sections[ ".note" ]; + sec = reader.sections[ ".note" ]; BOOST_CHECK_EQUAL( sec->get_index(), 2 ); checkSection( sec, 2, ".note", SHT_NOTE, SHF_ALLOC, 0, 28, 0, 0, 4, 0 ); } + + +//////////////////////////////////////////////////////////////////////////////// +BOOST_AUTO_TEST_CASE( test_dynamic_64_1 ) +{ + elfio reader; + + reader.load( "../elf_examples/main" ); + + section* dynsec = reader.sections[".dynamic"]; + + dynamic_section_accessor da( reader, dynsec ); + + BOOST_CHECK_EQUAL( da.get_entries_num(), 26 ); + + Elf_Xword tag; + Elf_Xword value; + std::string str; + da.get_entry( 0, tag, value, str ); + BOOST_CHECK_EQUAL( tag, DT_NEEDED ); + BOOST_CHECK_EQUAL( str, "libfunc.so" ); + da.get_entry( 1, tag, value, str ); + BOOST_CHECK_EQUAL( tag, DT_NEEDED ); + BOOST_CHECK_EQUAL( str, "libc.so.6" ); + da.get_entry( 2, tag, value, str ); + BOOST_CHECK_EQUAL( tag, DT_INIT ); + BOOST_CHECK_EQUAL( value, 0x400530 ); + da.get_entry( 19, tag, value, str ); + BOOST_CHECK_EQUAL( tag, 0x6ffffff0 ); + BOOST_CHECK_EQUAL( value, 0x40047e ); + da.get_entry( 20, tag, value, str ); + BOOST_CHECK_EQUAL( tag, DT_NULL ); + BOOST_CHECK_EQUAL( value, 0 ); +} + + +//////////////////////////////////////////////////////////////////////////////// +BOOST_AUTO_TEST_CASE( test_dynamic_64_2 ) +{ + elfio reader; + + reader.load( "../elf_examples/libfunc.so" ); + + section* dynsec = reader.sections[".dynamic"]; + + dynamic_section_accessor da( reader, dynsec ); + + BOOST_CHECK_EQUAL( da.get_entries_num(), 24 ); + + Elf_Xword tag; + Elf_Xword value; + std::string str; + da.get_entry( 0, tag, value, str ); + BOOST_CHECK_EQUAL( tag, DT_NEEDED ); + BOOST_CHECK_EQUAL( str, "libc.so.6" ); + da.get_entry( 1, tag, value, str ); + BOOST_CHECK_EQUAL( tag, DT_INIT ); + BOOST_CHECK_EQUAL( value, 0x480 ); + da.get_entry( 18, tag, value, str ); + BOOST_CHECK_EQUAL( tag, 0x6ffffff9 ); + BOOST_CHECK_EQUAL( value, 1 ); + da.get_entry( 19, tag, value, str ); + BOOST_CHECK_EQUAL( tag, DT_NULL ); + BOOST_CHECK_EQUAL( value, 0 ); +} diff --git a/ELFIOTest/ELFIOTest.vcxproj b/ELFIOTest/ELFIOTest.vcxproj index c99e369..5ad1a37 100644 --- a/ELFIOTest/ELFIOTest.vcxproj +++ b/ELFIOTest/ELFIOTest.vcxproj @@ -62,7 +62,7 @@ <AdditionalDependencies> </AdditionalDependencies> <AdditionalLibraryDirectories>\Developer\boost_1_52_0\stage12\lib</AdditionalLibraryDirectories> - <Profile>true</Profile> + <Profile>false</Profile> </Link> <PostBuildEvent> <Command>"$(TargetDir)\$(TargetName).exe" --result_code=no --report_level=short </Command> @@ -100,6 +100,7 @@ </ItemGroup> <ItemGroup> <ClInclude Include="..\elfio\elfio.hpp" /> + <ClInclude Include="..\elfio\elfio_dynamic.hpp" /> <ClInclude Include="..\elfio\elfio_header.hpp" /> <ClInclude Include="..\elfio\elfio_note.hpp" /> <ClInclude Include="..\elfio\elfio_relocation.hpp" /> @@ -108,8 +109,6 @@ <ClInclude Include="..\elfio\elfio_strings.hpp" /> <ClInclude Include="..\elfio\elfio_symbols.hpp" /> <ClInclude Include="..\elfio\elfio_utils.hpp" /> - <ClInclude Include="..\elfio\elfi_dynamic.hpp" /> - <ClInclude Include="..\elfio\elfo_dynamic.hpp" /> <ClInclude Include="..\elfio\elf_types.hpp" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> diff --git a/ELFIOTest/ELFIOTest.vcxproj.filters b/ELFIOTest/ELFIOTest.vcxproj.filters index dd36331..cc19fff 100644 --- a/ELFIOTest/ELFIOTest.vcxproj.filters +++ b/ELFIOTest/ELFIOTest.vcxproj.filters @@ -26,9 +26,6 @@ <ClInclude Include="..\elfio\elf_types.hpp"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="..\elfio\elfi_dynamic.hpp"> - <Filter>Header Files</Filter> - </ClInclude> <ClInclude Include="..\elfio\elfio.hpp"> <Filter>Header Files</Filter> </ClInclude> @@ -56,7 +53,7 @@ <ClInclude Include="..\elfio\elfio_utils.hpp"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="..\elfio\elfo_dynamic.hpp"> + <ClInclude Include="..\elfio\elfio_dynamic.hpp"> <Filter>Header Files</Filter> </ClInclude> </ItemGroup> diff --git a/Makefile.am b/Makefile.am index 5317332..dd2a4b4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,11 +1,10 @@ SUBDIRS = examples -nobase_include_HEADERS = elfio/elf_types.hpp elfio/elfi_dynamic.hpp \ +nobase_include_HEADERS = elfio/elf_types.hpp elfio/elfio_dynamic.hpp \ elfio/elfio.hpp elfio/elfio_header.hpp \ elfio/elfio_note.hpp elfio/elfio_relocation.hpp \ elfio/elfio_section.hpp elfio/elfio_segment.hpp \ elfio/elfio_strings.hpp elfio/elfio_symbols.hpp \ - elfio/elfio_utils.hpp elfio/elfo_dynamic.hpp \ - elfio/elfio_dump.hpp + elfio/elfio_utils.hpp elfio/elfio_dump.hpp EXTRA_DIST = doc/site/elfio.pdf dist-hook: mv $(distdir)/doc/site/elfio.pdf $(distdir)/doc diff --git a/Makefile.in b/Makefile.in index 222ecf2..569ef2c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -16,6 +16,23 @@ @SET_MAKE@ VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -55,6 +72,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-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/||"`;; \ @@ -216,13 +238,12 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = examples -nobase_include_HEADERS = elfio/elf_types.hpp elfio/elfi_dynamic.hpp \ +nobase_include_HEADERS = elfio/elf_types.hpp elfio/elfio_dynamic.hpp \ elfio/elfio.hpp elfio/elfio_header.hpp \ elfio/elfio_note.hpp elfio/elfio_relocation.hpp \ elfio/elfio_section.hpp elfio/elfio_segment.hpp \ elfio/elfio_strings.hpp elfio/elfio_symbols.hpp \ - elfio/elfio_utils.hpp elfio/elfo_dynamic.hpp \ - elfio/elfio_dump.hpp + elfio/elfio_utils.hpp elfio/elfio_dump.hpp EXTRA_DIST = doc/site/elfio.pdf all: all-recursive @@ -264,15 +285,18 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): install-nobase_includeHEADERS: $(nobase_include_HEADERS) @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ - echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \ echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \ $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \ @@ -453,13 +477,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; \ @@ -548,7 +569,7 @@ distcheck: dist *.zip*) \ unzip $(distdir).zip ;;\ esac - chmod -R a-w $(distdir); chmod a+w $(distdir) + chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) diff --git a/aclocal.m4 b/aclocal.m4 index da06da5..3094178 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,4 +1,4 @@ -# generated automatically by aclocal 1.11.3 -*- Autoconf -*- +# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, @@ -14,8 +14,8 @@ 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'.])]) @@ -38,7 +38,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' 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.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -54,7 +54,7 @@ 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.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) diff --git a/configure b/configure index 792dbe1..ded2849 100755 --- a/configure +++ b/configure @@ -1,11 +1,9 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for ELFIO 2.0. +# Generated by GNU Autoconf 2.69 for ELFIO 2.0. # # -# 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 @@ -134,6 +132,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 @@ -167,7 +190,8 @@ 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'\" && @@ -211,21 +235,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 : @@ -327,6 +355,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 @@ -448,6 +484,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). @@ -482,16 +522,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 @@ -503,28 +543,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'" @@ -1112,8 +1132,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 @@ -1352,9 +1370,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF ELFIO configure 2.0 -generated by GNU Autoconf 2.68 +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. _ACEOF @@ -1407,7 +1425,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by ELFIO $as_me 2.0, which was -generated by GNU Autoconf 2.68. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -1822,7 +1840,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. @@ -1991,7 +2009,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 @@ -2031,7 +2049,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 @@ -2082,7 +2100,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) '* | \ @@ -2135,7 +2153,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 @@ -2289,7 +2307,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_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2333,7 +2351,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_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3420,16 +3438,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 @@ -3489,28 +3507,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'" @@ -3532,7 +3538,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by ELFIO $as_me 2.0, which was -generated by GNU Autoconf 2.68. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -3589,10 +3595,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ ELFIO config.status 2.0 -configured by $0, generated by GNU Autoconf 2.68, +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." @@ -3672,7 +3678,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' diff --git a/elf_examples/elf_dummy_header_i386_32.elf b/elf_examples/elf_dummy_header_i386_32.elf index 8d551a8213bdbdcbda0f61c749152527465e09bf..dc2fd13b07e08c972bb117546d33ac83b7aec4ce 100644 GIT binary patch delta 11 Scmcb^c!zO<3?sut+5G?*mIKuQ delta 11 Scmcb^c!zO<45P_J+5G?+W&{ZU diff --git a/elf_examples/elf_dummy_header_i386_64.elf b/elf_examples/elf_dummy_header_i386_64.elf index c4c5c30bf19ae7458146f0f1f86c8b691051d707..31c8a92e6eba08824e9fdd3494bb77eed2044950 100644 GIT binary patch delta 12 TcmdnMw1H`Y0wcplMSeyA7yttJ delta 12 TcmdnMw1H`Y0;9u5MSeyA89)O# diff --git a/elf_examples/elf_dummy_header_ppc_32.elf b/elf_examples/elf_dummy_header_ppc_32.elf index 2b85ecc591009502e7b1feca377eb635066f2825..3e40c2de95b806240a66cfb82c7dfbb99d4af32f 100644 GIT binary patch delta 11 Scmcb^c!zO<JR`$Ig*^Zms{_~o delta 11 Scmcb^c!zO<Jfq1(g*^Zndjt#s diff --git a/elf_examples/elf_dummy_header_ppc_64.elf b/elf_examples/elf_dummy_header_ppc_64.elf index b85aa18d4fe06ceb7f871cb42027201bddcc9c02..a713e50fc4a51cb397b7a74d4baf16f2d132fde0 100644 GIT binary patch delta 12 TcmdnMw1H`YIwQkI4Gu;C7&rp| delta 12 TcmdnMw1H`YI-|oz4Gu;C8F&Lf diff --git a/elf_examples/hello_32_copy.o b/elf_examples/hello_32_copy.o index 437bfcdd5b30a3ddc15e23928663e3d770a126a8..50d6ee04b6cc88606272a5e70864883e5871e068 100644 GIT binary patch delta 12 TcmaFN_Lyyg3?suvSvO_?9Qp&7 delta 12 TcmaFN_Lyyg45P_LSvO_?9sUE$ diff --git a/elf_examples/hello_64_copy.o b/elf_examples/hello_64_copy.o index 39bd4ae7b79855ee3c7c714fd24f4c3ab4c8537b..ec8f831a9f6dcd8e5b7995974a07e48044612a80 100644 GIT binary patch delta 13 UcmX@jeVTiM!bBgAjT(zt0VIV4!vFvP delta 12 TcmX@jeVTiM0;9u5#Z{~T9e@NM diff --git a/elf_examples/libfunc.so b/elf_examples/libfunc.so new file mode 100644 index 0000000000000000000000000000000000000000..8377027bef0f0068ca575b1079af037219e3c40d GIT binary patch literal 7752 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 literal 0 HcmV?d00001 diff --git a/elf_examples/libfunc32.so b/elf_examples/libfunc32.so new file mode 100644 index 0000000000000000000000000000000000000000..eaa6826cb95d1e7d6e22c6d9a1b702afc4b3278d GIT binary patch literal 6675 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 literal 0 HcmV?d00001 diff --git a/elf_examples/main b/elf_examples/main new file mode 100644 index 0000000000000000000000000000000000000000..f4018b7122ed7e8ab8188299efeef38e6991f033 GIT binary patch literal 8454 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 L2kQhUI8Yb>JKd6i literal 0 HcmV?d00001 diff --git a/elf_examples/main32 b/elf_examples/main32 new file mode 100644 index 0000000000000000000000000000000000000000..63196e91f221128c0a7cff51ea185d87cc4835cf GIT binary patch literal 7212 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 literal 0 HcmV?d00001 diff --git a/elf_examples/test_ppc_copy.o b/elf_examples/test_ppc_copy.o index 36b008fff868ef6cec31023add4c98834d1eec1b..60211cf6dab747183fa2e89e6bdceff3608213a9 100644 GIT binary patch delta 12 TcmdllxL<IBJR`$Kh4~x+8<PXc delta 12 TcmdllxL<IBJfq1*h4~x+9G3(A diff --git a/elf_examples/write_obj_i386_32.o b/elf_examples/write_obj_i386_32.o index 6cb68e564326ada3af0168b32d87f4ca135edc11..48f0942d0f8e0fa0f3386ee0f350ad8a32c530cb 100644 GIT binary patch delta 12 TcmX@Ya)f1q3?suvS#>4=8R-Kx delta 12 TcmX@Ya)f1q45P_LS#>4=8tnsV diff --git a/elf_examples/write_obj_i386_32_copy.o b/elf_examples/write_obj_i386_32_copy.o index 6cb68e564326ada3af0168b32d87f4ca135edc11..48f0942d0f8e0fa0f3386ee0f350ad8a32c530cb 100644 GIT binary patch delta 12 TcmX@Ya)f1q3?suvS#>4=8R-Kx delta 12 TcmX@Ya)f1q45P_LS#>4=8tnsV diff --git a/elf_examples/write_obj_i386_32_match.o b/elf_examples/write_obj_i386_32_match.o index 6cb68e564326ada3af0168b32d87f4ca135edc11..48f0942d0f8e0fa0f3386ee0f350ad8a32c530cb 100644 GIT binary patch delta 12 TcmX@Ya)f1q3?suvS#>4=8R-Kx delta 12 TcmX@Ya)f1q45P_LS#>4=8tnsV diff --git a/elf_examples/write_obj_i386_64.o b/elf_examples/write_obj_i386_64.o index fdd95bdeb60546dc4c044398ae23c5e4eb166835..8335573feecfdb3b9004c53faf053f6eb551b11a 100644 GIT binary patch delta 13 UcmdnOwuNni!bBgAjT$`603g2u@&Et; delta 12 TcmdnOwuNni0;9u5MPX(D8S(>8 diff --git a/elf_examples/write_obj_i386_64_copy.o b/elf_examples/write_obj_i386_64_copy.o index fdd95bdeb60546dc4c044398ae23c5e4eb166835..8335573feecfdb3b9004c53faf053f6eb551b11a 100644 GIT binary patch delta 13 UcmdnOwuNni!bBgAjT$`603g2u@&Et; delta 12 TcmdnOwuNni0;9u5MPX(D8S(>8 diff --git a/elf_examples/write_obj_i386_64_match.o b/elf_examples/write_obj_i386_64_match.o index fdd95bdeb60546dc4c044398ae23c5e4eb166835..8335573feecfdb3b9004c53faf053f6eb551b11a 100644 GIT binary patch delta 13 UcmdnOwuNni!bBgAjT$`603g2u@&Et; delta 12 TcmdnOwuNni0;9u5MPX(D8S(>8 diff --git a/elfio/elf_types.hpp b/elfio/elf_types.hpp index ac7c2aa..17dc51f 100644 --- a/elfio/elf_types.hpp +++ b/elfio/elf_types.hpp @@ -528,6 +528,7 @@ typedef uint64_t Elf64_Off; #define DT_ENCODING 32 #define DT_PREINIT_ARRAY 32 #define DT_PREINIT_ARRAYSZ 33 +#define DT_MAXPOSTAGS 34 #define DT_LOOS 0x6000000D #define DT_HIOS 0x6ffff000 #define DT_LOPROC 0x70000000 diff --git a/elfio/elfi_dynamic.hpp b/elfio/elfi_dynamic.hpp deleted file mode 100644 index ce8d073..0000000 --- a/elfio/elfi_dynamic.hpp +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef ELFI_DYNAMIC_HPP -#define ELFI_DYNAMIC_HPP - -class ELFIDynamicReader : virtual public ELFIReaderImpl, virtual public IELFIDynamicReader -{ - public: - ELFIDynamicReader( const IELFI* pIELFI, const section* pSection ); - virtual ~ELFIDynamicReader(); - - // Dynamic reader functions - virtual Elf_Xword getEntriesNum() const; - virtual ELFIO_Err get_entry( Elf_Xword index, - Elf_Sxword& tag, - Elf_Xword& value ) const; -}; - - -ELFIDynamicReader::ELFIDynamicReader( const IELFI* pIELFI, const section* pSection ) : - ELFIReaderImpl( pIELFI, pSection ) -{ -} - - -ELFIDynamicReader::~ELFIDynamicReader() -{ -} - - -Elf_Xword -ELFIDynamicReader::getEntriesNum() const -{ - Elf_Xword nRet = 0; - if ( 0 != m_pSection->get_entry_size() ) { - nRet = m_pSection->get_size() / m_pSection->get_entry_size(); - } - - return nRet; -} - - -ELFIO_Err -ELFIDynamicReader::get_entry( Elf_Xword index, - Elf_Sxword& tag, - Elf_Xword& value ) const -{ - if ( index >= getEntriesNum() ) { // Is index valid - return ERR_ELFIO_INDEX_ERROR; - } - - const Elf64_Dyn* pEntry = reinterpret_cast<const Elf64_Dyn*>( - m_pSection->get_data() + index * m_pSection->get_entry_size() ); - tag = convert2host( pEntry->d_tag, m_pIELFI->get_encoding() ); - value = convert2host( pEntry->d_un.d_val, m_pIELFI->get_encoding() ); - - return ERR_ELFIO_NO_ERROR; -} - -#endif // ELFI_DYNAMIC_HPP diff --git a/elfio/elfio.hpp b/elfio/elfio.hpp index c75c32d..79d3658 100644 --- a/elfio/elfio.hpp +++ b/elfio/elfio.hpp @@ -44,7 +44,6 @@ THE SOFTWARE. #include <elfio/elfio_segment.hpp> #include <elfio/elfio_strings.hpp> - #define ELFIO_HEADER_ACCESS_GET( TYPE, FNAME ) \ TYPE \ get_##FNAME() const \ @@ -390,10 +389,15 @@ class elfio { // Fill not completed fields in the header header->set_segments_num( segments.size() ); - header->set_segments_offset( header->get_header_size() ); + if ( segments.size() == 0 ) { + header->set_segments_offset( 0 ); + } + else { + header->set_segments_offset( header->get_header_size() ); + } header->set_sections_num( sections.size() ); header->set_sections_offset( header->get_header_size() + - header->get_segment_entry_size() * segments.size() ); + header->get_segment_entry_size() * segments.size() ); } //------------------------------------------------------------------------------ @@ -606,9 +610,10 @@ class elfio } // namespace ELFIO -#include "elfio_symbols.hpp" -#include "elfio_note.hpp" -#include "elfio_relocation.hpp" +#include <elfio/elfio_symbols.hpp> +#include <elfio/elfio_note.hpp> +#include <elfio/elfio_relocation.hpp> +#include <elfio/elfio_dynamic.hpp> #ifdef _MSC_VER #pragma warning ( pop ) diff --git a/elfio/elfio_dump.hpp b/elfio/elfio_dump.hpp index c92ba09..999450c 100644 --- a/elfio/elfio_dump.hpp +++ b/elfio/elfio_dump.hpp @@ -370,6 +370,49 @@ static struct symbol_type_t { }; +static struct dynamic_tag_t { + const Elf_Word key; + const char* str; +} dynamic_tag_table [] = +{ + { DT_NULL , "NULL" }, + { DT_NEEDED , "NEEDED" }, + { DT_PLTRELSZ , "PLTRELSZ" }, + { DT_PLTGOT , "PLTGOT" }, + { DT_HASH , "HASH" }, + { DT_STRTAB , "STRTAB" }, + { DT_SYMTAB , "SYMTAB" }, + { DT_RELA , "RELA" }, + { DT_RELASZ , "RELASZ" }, + { DT_RELAENT , "RELAENT" }, + { DT_STRSZ , "STRSZ" }, + { DT_SYMENT , "SYMENT" }, + { DT_INIT , "INIT" }, + { DT_FINI , "FINI" }, + { DT_SONAME , "SONAME" }, + { DT_RPATH , "RPATH" }, + { DT_SYMBOLIC , "SYMBOLIC" }, + { DT_REL , "REL" }, + { DT_RELSZ , "RELSZ" }, + { DT_RELENT , "RELENT" }, + { DT_PLTREL , "PLTREL" }, + { DT_DEBUG , "DEBUG" }, + { DT_TEXTREL , "TEXTREL" }, + { DT_JMPREL , "JMPREL" }, + { DT_BIND_NOW , "BIND_NOW" }, + { DT_INIT_ARRAY , "INIT_ARRAY" }, + { DT_FINI_ARRAY , "FINI_ARRAY" }, + { DT_INIT_ARRAYSZ , "INIT_ARRAYSZ" }, + { DT_FINI_ARRAYSZ , "FINI_ARRAYSZ" }, + { DT_RUNPATH , "RUNPATH" }, + { DT_FLAGS , "FLAGS" }, + { DT_ENCODING , "ENCODING" }, + { DT_PREINIT_ARRAY , "PREINIT_ARRAY" }, + { DT_PREINIT_ARRAYSZ, "PREINIT_ARRAYSZ" }, + { DT_MAXPOSTAGS , "MAXPOSTAGS" }, +}; + + //------------------------------------------------------------------------------ class dump { @@ -668,6 +711,58 @@ class dump << std::endl; } +//------------------------------------------------------------------------------ + static void + dynamic_tags( std::ostream& out, const elfio& reader ) + { + Elf_Half n = reader.sections.size(); + for ( Elf_Half i = 0; i < n; ++i ) { // For all sections + section* sec = reader.sections[i]; + if ( SHT_DYNAMIC == sec->get_type() ) { + dynamic_section_accessor dynamic( reader, sec ); + + Elf_Xword dyn_no = dynamic.get_entries_num(); + if ( dyn_no > 0 ) { + out << "Dynamic section (" << sec->get_name() << ")" << std::endl; + out << "[ Nr ] Tag Name/Value" << std::endl; + for ( int i = 0; i < dyn_no; ++i ) { + Elf_Xword tag; + Elf_Xword value; + std::string str; + dynamic.get_entry( i, tag, value, str ); + dynamic_tag( out, i, tag, value, str, reader.get_class() ); + if ( DT_NULL == tag ) { + break; + } + } + + out << std::endl; + } + } + } + } + +//------------------------------------------------------------------------------ + static void + dynamic_tag( std::ostream& out, + int no, + Elf_Xword tag, + Elf_Xword value, + std::string str, + unsigned int elf_class ) + { + out << "[" + << DUMP_DEC_FORMAT( 5 ) << no + << "] " + << DUMP_STR_FORMAT( 16 ) << str_dynamic_tag( tag ) << " "; + if ( str.empty() ) { + out << DUMP_HEX_FORMAT( 16 ) << value << " "; + } + else { + out << DUMP_STR_FORMAT( 32 ) << str << " "; + } + out << std::endl; + } private: //------------------------------------------------------------------------------ @@ -755,6 +850,7 @@ class dump STR_FUNC_TABLE( segment_flag ); STR_FUNC_TABLE( symbol_bind ); STR_FUNC_TABLE( symbol_type ); + STR_FUNC_TABLE( dynamic_tag ); #undef STR_FUNC_TABLE #undef DUMP_DEC_FORMAT diff --git a/elfio/elfio_dynamic.hpp b/elfio/elfio_dynamic.hpp new file mode 100644 index 0000000..f075304 --- /dev/null +++ b/elfio/elfio_dynamic.hpp @@ -0,0 +1,183 @@ +/* +Copyright (C) 2001-2011 by Serge Lamikhov-Center + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef ELFIO_DYNAMIC_HPP +#define ELFIO_DYNAMIC_HPP + +namespace ELFIO { + +//------------------------------------------------------------------------------ +class dynamic_section_accessor +{ + public: +//------------------------------------------------------------------------------ + dynamic_section_accessor( const elfio& elf_file_, section* section_ ) : + elf_file( elf_file_ ), + dynamic_section( section_ ) + { + } + +//------------------------------------------------------------------------------ + Elf_Xword + get_entries_num() const + { + Elf_Xword nRet = 0; + + if ( 0 != dynamic_section->get_entry_size() ) { + nRet = dynamic_section->get_size() / dynamic_section->get_entry_size(); + } + + return nRet; + } + +//------------------------------------------------------------------------------ + bool + get_entry( Elf_Xword index, + Elf_Xword& tag, + Elf_Xword& value, + std::string& str ) const + { + if ( index >= get_entries_num() ) { // Is index valid + return false; + } + + if ( elf_file.get_class() == ELFCLASS32 ) { + generic_get_entry_dyn< Elf32_Dyn >( index, tag, value ); + } + else { + generic_get_entry_dyn< Elf64_Dyn >( index, tag, value ); + } + + // If the tag may have a string table reference, prepare the string + if ( tag == DT_NEEDED || + tag == DT_SONAME || + tag == DT_RPATH || + tag == DT_RUNPATH ) { + string_section_accessor strsec = + elf_file.sections[ dynamic_section->get_link() ]; + str = strsec.get_string( value ); + } + else { + str = ""; + } + + return true; + } + +//------------------------------------------------------------------------------ + private: +//------------------------------------------------------------------------------ + Elf_Half + get_symbol_table_index() const + { + return (Elf_Half)dynamic_section->get_link(); + } + +//------------------------------------------------------------------------------ + template< class T > + void + generic_get_entry_dyn( Elf_Xword index, + Elf_Xword& tag, + Elf_Xword& value ) const + { + const endianess_convertor& convertor = elf_file.get_convertor(); + + const T* pEntry = reinterpret_cast<const T*>( + dynamic_section->get_data() + + index * dynamic_section->get_entry_size() ); + tag = convertor( pEntry->d_tag ); + switch ( tag ) { + case DT_NULL: + value = 0; + break; + case DT_NEEDED: + case DT_PLTRELSZ: + case DT_RELASZ: + case DT_RELAENT: + case DT_STRSZ: + case DT_SYMENT: + case DT_SONAME: + case DT_RPATH: + case DT_RELSZ: + case DT_RELENT: + case DT_PLTREL: + case DT_INIT_ARRAYSZ: + case DT_FINI_ARRAYSZ: + case DT_RUNPATH: + case DT_FLAGS: + case DT_PREINIT_ARRAYSZ: +/* + case DT_SUNW_SYMSZ: + case DT_SUNW_SORTENT: + case DT_SUNW_SYMSORTSZ: + case DT_SUNW_TLSSORTSZ: + case DT_SUNW_STRPAD: + case DT_SUNW_LDMACH: + case DT_SUNW_CAPCHAINENT: + case DT_SUNW_CAPCHAINSZ: + case DT_CHECKSUM: + case DT_PLTPADSZ: + case DT_MOVEENT: + case DT_MOVESZ: + case DT_POSFLAG_1: + case DT_SYMINSZ: + case DT_SYMINENT: + case DT_RELACOUNT: + case DT_RELCOUNT: + case DT_FLAGS_1: + case DT_VERDEFNUM: + case DT_VERNEEDNUM: + case DT_SPARC_REGISTER: + case DT_AUXILIARY: + case DT_USED: + case DT_FILTER: +*/ + value = convertor( pEntry->d_un.d_val ); + break; + case DT_PLTGOT: + case DT_HASH: + case DT_STRTAB: + case DT_SYMTAB: + case DT_RELA: + case DT_INIT: + case DT_FINI: + case DT_REL: + case DT_DEBUG: + case DT_JMPREL: + case DT_INIT_ARRAY: + case DT_FINI_ARRAY: + case DT_PREINIT_ARRAY: + default: + value = convertor( pEntry->d_un.d_ptr ); + break; + } + } + +//------------------------------------------------------------------------------ + private: + const elfio& elf_file; + section* dynamic_section; +}; + +} // namespace ELFIO + +#endif // ELFIO_DYNAMIC_HPP diff --git a/elfio/elfio_relocation.hpp b/elfio/elfio_relocation.hpp index 3d26adc..f29f3bf 100644 --- a/elfio/elfio_relocation.hpp +++ b/elfio/elfio_relocation.hpp @@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef ELFI_RELOCATION_HPP -#define ELFI_RELOCATION_HPP +#ifndef ELFIO_RELOCATION_HPP +#define ELFIO_RELOCATION_HPP namespace ELFIO { @@ -77,7 +77,7 @@ class relocation_section_accessor { public: //------------------------------------------------------------------------------ - relocation_section_accessor( elfio& elf_file_, section* section_ ) : + relocation_section_accessor( const elfio& elf_file_, section* section_ ) : elf_file( elf_file_ ), relocation_section( section_ ) { @@ -282,13 +282,6 @@ class relocation_section_accessor return (Elf_Half)relocation_section->get_link(); } -//------------------------------------------------------------------------------ - Elf_Half - getTargetSectionIndex() const - { - return (Elf_Half)relocation_section->get_info(); - } - //------------------------------------------------------------------------------ template< class T > void @@ -365,10 +358,10 @@ class relocation_section_accessor //------------------------------------------------------------------------------ private: - elfio& elf_file; - section* relocation_section; + const elfio& elf_file; + section* relocation_section; }; } // namespace ELFIO -#endif // ELFI_RELOCATION_HPP +#endif // ELFIO_RELOCATION_HPP diff --git a/elfio/elfio_section.hpp b/elfio/elfio_section.hpp index 73f1e31..d24b9bb 100644 --- a/elfio/elfio_section.hpp +++ b/elfio/elfio_section.hpp @@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef ELFI_SECTION_HPP -#define ELFI_SECTION_HPP +#ifndef ELFIO_SECTION_HPP +#define ELFIO_SECTION_HPP #include <string> #include <fstream> @@ -271,4 +271,4 @@ class section_impl : public section } // namespace ELFIO -#endif // ELFI_SECTION_HPP +#endif // ELFIO_SECTION_HPP diff --git a/elfio/elfio_segment.hpp b/elfio/elfio_segment.hpp index 78fc449..fb93fb2 100644 --- a/elfio/elfio_segment.hpp +++ b/elfio/elfio_segment.hpp @@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef ELFI_SEGMENT_HPP -#define ELFI_SEGMENT_HPP +#ifndef ELFIO_SEGMENT_HPP +#define ELFIO_SEGMENT_HPP #include <fstream> #include <vector> @@ -179,4 +179,4 @@ class segment_impl : public segment } // namespace ELFIO -#endif // ELFI_SEGMENT_HPP +#endif // ELFIO_SEGMENT_HPP diff --git a/elfio/elfio_symbols.hpp b/elfio/elfio_symbols.hpp index d498ca1..b893e2b 100644 --- a/elfio/elfio_symbols.hpp +++ b/elfio/elfio_symbols.hpp @@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef ELFI_SYMBOLS_HPP -#define ELFI_SYMBOLS_HPP +#ifndef ELFIO_SYMBOLS_HPP +#define ELFIO_SYMBOLS_HPP namespace ELFIO { @@ -273,4 +273,4 @@ class symbol_section_accessor } // namespace ELFIO -#endif // ELFI_SYMBOLS_HPP +#endif // ELFIO_SYMBOLS_HPP diff --git a/elfio/elfo_dynamic.hpp b/elfio/elfo_dynamic.hpp deleted file mode 100644 index f477a35..0000000 --- a/elfio/elfo_dynamic.hpp +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef ELFO_DYNAMIC_HPP -#define ELFO_DYNAMIC_HPP - -// Dynamic section producer -class ELFODynamicWriter : public IELFODynamicWriter -{ - public: - ELFODynamicWriter( IELFO* pIELFO, IELFOSection* pSection ); - ~ELFODynamicWriter(); - - virtual int addRef(); - virtual int release(); - - virtual ELFIO_Err addEntry( Elf_Sword tag, Elf_Word value ); - - private: - int m_nRefCnt; - IELFO* m_pIELFO; - IELFOSection* m_pSection; -}; - - -ELFODynamicWriter::ELFODynamicWriter( IELFO* pIELFO, IELFOSection* pSection ) : - m_nRefCnt( 1 ), - m_pIELFO( pIELFO ), - m_pSection( pSection ) -{ - m_pIELFO->addRef(); - m_pSection->addRef(); -} - - -ELFODynamicWriter::~ELFODynamicWriter() -{ -} - - -int -ELFODynamicWriter::addRef() -{ - m_pIELFO->addRef(); - m_pSection->addRef(); - return ++m_nRefCnt; -} - - -int -ELFODynamicWriter::release() -{ - int nRet = --m_nRefCnt; - IELFO* pIELFO = m_pIELFO; - IELFOSection* pSec = m_pSection; - - if ( 0 == m_nRefCnt ) { - delete this; - } - pSec->release(); - pIELFO->release(); - - return nRet; -} - - -ELFIO_Err -ELFODynamicWriter::addEntry( Elf_Sword tag, Elf_Word value ) -{ - Elf64_Dyn entry; - entry.d_tag = convert2host( tag, m_pIELFO->get_encoding() ); - entry.d_un.d_val = convert2host( value, m_pIELFO->get_encoding() ); - - return m_pSection->appendData( reinterpret_cast<const char*>( &entry ), - sizeof( entry ) ); -} - -#endif // ELFO_DYNAMIC_HPP diff --git a/examples/Makefile.in b/examples/Makefile.in index 9837be1..e8409cd 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -15,6 +15,23 @@ @SET_MAKE@ VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -49,6 +66,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-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 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ @@ -368,13 +390,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; \ diff --git a/examples/elfdump/Makefile.in b/examples/elfdump/Makefile.in index 4dda556..f7f21f0 100644 --- a/examples/elfdump/Makefile.in +++ b/examples/elfdump/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -16,6 +16,23 @@ @SET_MAKE@ VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -58,6 +75,11 @@ CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(elfdump_SOURCES) DIST_SOURCES = $(elfdump_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -183,8 +205,11 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): 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; \ diff --git a/examples/elfdump/elfdump.cpp b/examples/elfdump/elfdump.cpp index bf985ee..1c6eb50 100644 --- a/examples/elfdump/elfdump.cpp +++ b/examples/elfdump/elfdump.cpp @@ -51,6 +51,7 @@ int main( int argc, char** argv ) dump::segment_headers( std::cout, reader ); dump::symbol_tables ( std::cout, reader ); dump::notes ( std::cout, reader ); + dump::dynamic_tags ( std::cout, reader ); return 0; } diff --git a/examples/tutorial/Makefile.in b/examples/tutorial/Makefile.in index 1e9cc0c..3723556 100644 --- a/examples/tutorial/Makefile.in +++ b/examples/tutorial/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -16,6 +16,23 @@ @SET_MAKE@ VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -58,6 +75,11 @@ CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(tutorial_SOURCES) DIST_SOURCES = $(tutorial_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -182,8 +204,11 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): 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; \ diff --git a/examples/write_obj/Makefile.in b/examples/write_obj/Makefile.in index ed85551..307b23f 100644 --- a/examples/write_obj/Makefile.in +++ b/examples/write_obj/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -16,6 +16,23 @@ @SET_MAKE@ VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -58,6 +75,11 @@ CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(write_obj_SOURCES) DIST_SOURCES = $(write_obj_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -182,8 +204,11 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): 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; \ diff --git a/examples/writer/Makefile.in b/examples/writer/Makefile.in index 039c69e..f59b5d3 100644 --- a/examples/writer/Makefile.in +++ b/examples/writer/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -16,6 +16,23 @@ @SET_MAKE@ VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -58,6 +75,11 @@ CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(writer_SOURCES) DIST_SOURCES = $(writer_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -182,8 +204,11 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): 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; \ -- GitLab