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