summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authorEvan Lojewski <github@meklort.com>2019-02-26 20:41:38 -0700
committerEvan Lojewski <github@meklort.com>2019-02-26 20:41:38 -0700
commit876e9cbcc1cdb054a5cc068a16b601db1111664a (patch)
treeb89ae0e90101dd0841b64d79017d4594beb5d59d /utils
parenta4d1e1110915f1822b6d2c2384ac8f7f276c0d24 (diff)
downloadbcm5719-ortega-876e9cbcc1cdb054a5cc068a16b601db1111664a.tar.gz
bcm5719-ortega-876e9cbcc1cdb054a5cc068a16b601db1111664a.zip
Begin adding in elfio for enhanced debugging support.
Diffstat (limited to 'utils')
-rw-r--r--utils/bcmregtool/elfio/.gitignore81
-rw-r--r--utils/bcmregtool/elfio/AUTHORS2
-rw-r--r--utils/bcmregtool/elfio/COPYING21
-rw-r--r--utils/bcmregtool/elfio/ChangeLog0
-rw-r--r--utils/bcmregtool/elfio/ELFIO.sln32
-rw-r--r--utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.cpp1054
-rw-r--r--utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.vcxproj119
-rw-r--r--utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.vcxproj.filters60
-rw-r--r--utils/bcmregtool/elfio/ELFIOTest/ELFIOTest1.cpp438
-rw-r--r--utils/bcmregtool/elfio/ELFIOTest/Makefile.am6
-rw-r--r--utils/bcmregtool/elfio/ELFIOTest/Makefile.in934
-rwxr-xr-xutils/bcmregtool/elfio/ELFIOTest/runELFtests6
-rw-r--r--utils/bcmregtool/elfio/INSTALL15
-rw-r--r--utils/bcmregtool/elfio/Makefile.am11
-rw-r--r--utils/bcmregtool/elfio/Makefile.in816
-rw-r--r--utils/bcmregtool/elfio/NEWS0
-rw-r--r--utils/bcmregtool/elfio/README4
-rw-r--r--utils/bcmregtool/elfio/aclocal.m41088
-rwxr-xr-xutils/bcmregtool/elfio/autogen.sh1
-rwxr-xr-xutils/bcmregtool/elfio/configure4412
-rw-r--r--utils/bcmregtool/elfio/configure.ac13
-rw-r--r--utils/bcmregtool/elfio/cygwin/elfio.cygport38
-rwxr-xr-xutils/bcmregtool/elfio/depcomp688
-rw-r--r--utils/bcmregtool/elfio/doc/elfio.docxbin0 -> 155056 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/annot-close.pngbin0 -> 207 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/annot-open.pngbin0 -> 837 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/blank.pngbin0 -> 374 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/1.gifbin0 -> 889 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/1.pngbin0 -> 329 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/1.svg15
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/10.gifbin0 -> 929 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/10.pngbin0 -> 361 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/10.svg18
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/11.gifbin0 -> 202 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/11.pngbin0 -> 565 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/11.svg16
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/12.gifbin0 -> 210 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/12.pngbin0 -> 617 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/12.svg18
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/13.gifbin0 -> 209 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/13.pngbin0 -> 623 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/13.svg20
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/14.gifbin0 -> 205 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/14.pngbin0 -> 411 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/14.svg17
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/15.gifbin0 -> 210 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/15.pngbin0 -> 640 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/15.svg19
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/16.svg20
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/17.svg17
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/18.svg21
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/19.svg20
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/2.gifbin0 -> 907 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/2.pngbin0 -> 353 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/2.svg17
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/20.svg20
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/21.svg18
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/22.svg20
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/23.svg22
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/24.svg19
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/25.svg21
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/26.svg22
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/27.svg19
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/28.svg23
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/29.svg22
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/3.gifbin0 -> 914 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/3.pngbin0 -> 350 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/3.svg19
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/30.svg22
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/4.gifbin0 -> 907 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/4.pngbin0 -> 345 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/4.svg16
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/5.gifbin0 -> 916 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/5.pngbin0 -> 348 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/5.svg18
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/6.gifbin0 -> 218 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/6.pngbin0 -> 355 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/6.svg19
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/7.gifbin0 -> 907 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/7.pngbin0 -> 344 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/7.svg16
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/8.gifbin0 -> 918 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/8.pngbin0 -> 357 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/8.svg20
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/9.gifbin0 -> 923 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/9.pngbin0 -> 357 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/callouts/9.svg19
-rw-r--r--utils/bcmregtool/elfio/doc/images/caution.gifbin0 -> 743 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/caution.pngbin0 -> 1250 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/caution.svg25
-rw-r--r--utils/bcmregtool/elfio/doc/images/caution.tifbin0 -> 1978 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/colorsvg/caution.svg141
-rw-r--r--utils/bcmregtool/elfio/doc/images/colorsvg/home.svg498
-rw-r--r--utils/bcmregtool/elfio/doc/images/colorsvg/important.svg239
-rw-r--r--utils/bcmregtool/elfio/doc/images/colorsvg/next.svg338
-rw-r--r--utils/bcmregtool/elfio/doc/images/colorsvg/note.svg200
-rw-r--r--utils/bcmregtool/elfio/doc/images/colorsvg/prev.svg338
-rw-r--r--utils/bcmregtool/elfio/doc/images/colorsvg/tip.svg367
-rw-r--r--utils/bcmregtool/elfio/doc/images/colorsvg/up.svg338
-rw-r--r--utils/bcmregtool/elfio/doc/images/colorsvg/warning.svg232
-rw-r--r--utils/bcmregtool/elfio/doc/images/draft.pngbin0 -> 16150 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/home.gifbin0 -> 321 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/home.pngbin0 -> 1156 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/home.svg26
-rw-r--r--utils/bcmregtool/elfio/doc/images/important.gifbin0 -> 1003 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/important.pngbin0 -> 722 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/important.svg25
-rw-r--r--utils/bcmregtool/elfio/doc/images/important.tifbin0 -> 2020 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/next.gifbin0 -> 1083 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/next.pngbin0 -> 1150 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/next.svg19
-rw-r--r--utils/bcmregtool/elfio/doc/images/note.gifbin0 -> 580 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/note.pngbin0 -> 490 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/note.svg33
-rw-r--r--utils/bcmregtool/elfio/doc/images/note.tifbin0 -> 460 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/prev.gifbin0 -> 1118 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/prev.pngbin0 -> 1132 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/prev.svg19
-rw-r--r--utils/bcmregtool/elfio/doc/images/tip.gifbin0 -> 598 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/tip.pngbin0 -> 449 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/tip.svg31
-rw-r--r--utils/bcmregtool/elfio/doc/images/tip.tifbin0 -> 420 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/toc-blank.pngbin0 -> 318 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/toc-minus.pngbin0 -> 259 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/toc-plus.pngbin0 -> 264 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/up.gifbin0 -> 1089 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/up.pngbin0 -> 1111 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/up.svg19
-rw-r--r--utils/bcmregtool/elfio/doc/images/warning.gifbin0 -> 743 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/warning.pngbin0 -> 1241 bytes
-rw-r--r--utils/bcmregtool/elfio/doc/images/warning.svg23
-rw-r--r--utils/bcmregtool/elfio/doc/images/warning.tifbin0 -> 1990 bytes
-rwxr-xr-xutils/bcmregtool/elfio/doc/site/index.htm83
-rwxr-xr-xutils/bcmregtool/elfio/doc/site/style.css131
-rw-r--r--utils/bcmregtool/elfio/elf_examples/64bitLOAD.elfbin0 -> 4362678 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/ARMSCII-8.sobin0 -> 13912 bytes
-rwxr-xr-xutils/bcmregtool/elfio/elf_examples/arm_v7m_test_debug.elfbin0 -> 313943 bytes
-rwxr-xr-xutils/bcmregtool/elfio/elf_examples/arm_v7m_test_release.elfbin0 -> 124118 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/asmbin0 -> 360 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/asm.lst23
-rw-r--r--utils/bcmregtool/elfio/elf_examples/asm.readelf51
-rw-r--r--utils/bcmregtool/elfio/elf_examples/asm.s22
-rw-r--r--utils/bcmregtool/elfio/elf_examples/asm64bin0 -> 504 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/asm64.lst23
-rw-r--r--utils/bcmregtool/elfio/elf_examples/crash-060833f08dc14d1712428742b3cad7af17b36bb7bin0 -> 5000 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/crash-7d695153fd8052529d480c2352d4ada33a44badabin0 -> 1023 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/crash-b82f05b0b25c8fdc98480e6d76b6d5f9164ae2bcbin0 -> 8527 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/crash-e1ce7cecf01cf800397a4302854d9d76fa19763cbin0 -> 8666 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/crash-e3c41070342cf84dea077356ddbb8ebf4326a601bin0 -> 43592 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/elf_header_i386_32.elfbin0 -> 4453 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/entropy.sobin0 -> 46599 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/hello.c8
-rw-r--r--utils/bcmregtool/elfio/elf_examples/hello_32bin0 -> 4721 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/hello_32.txt211
-rw-r--r--utils/bcmregtool/elfio/elf_examples/hello_32_o.txt64
-rw-r--r--utils/bcmregtool/elfio/elf_examples/hello_64bin0 -> 6695 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/hello_64.txt244
-rw-r--r--utils/bcmregtool/elfio/elf_examples/hello_64_o.txt85
-rw-r--r--utils/bcmregtool/elfio/elf_examples/hello_armbin0 -> 179739 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/hello_arm_strippedbin0 -> 49368 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/libfunc.sobin0 -> 7752 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/libfunc32.sobin0 -> 6675 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/lsbin0 -> 105840 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/ls.readelf462
-rw-r--r--utils/bcmregtool/elfio/elf_examples/mainbin0 -> 8454 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/main32bin0 -> 7212 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/ppc-32bit-specimen3.elfbin0 -> 1556424 bytes
-rwxr-xr-xutils/bcmregtool/elfio/elf_examples/read_write_arm_elf32_inputbin0 -> 67818 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/startup.elnbin0 -> 54542 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/startup_orig.elnbin0 -> 40702 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/test_ppcbin0 -> 6976 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/test_ppc.cpp8
-rw-r--r--utils/bcmregtool/elfio/elf_examples/test_ppc.txt263
-rw-r--r--utils/bcmregtool/elfio/elf_examples/test_ppc_o.txt114
-rw-r--r--utils/bcmregtool/elfio/elf_examples/write_exe_i386_32_matchbin0 -> 4440 bytes
-rw-r--r--utils/bcmregtool/elfio/elf_examples/write_exe_i386_32_work_dump.txt71
-rw-r--r--utils/bcmregtool/elfio/elfio/elf_types.hpp851
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio.hpp947
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_dump.hpp976
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_dynamic.hpp257
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_header.hpp145
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_note.hpp170
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_relocation.hpp373
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_section.hpp313
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_segment.hpp244
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_strings.hpp100
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_symbols.hpp282
-rw-r--r--utils/bcmregtool/elfio/elfio/elfio_utils.hpp209
-rw-r--r--utils/bcmregtool/elfio/examples/Makefile.am1
-rw-r--r--utils/bcmregtool/elfio/examples/Makefile.in572
-rw-r--r--utils/bcmregtool/elfio/examples/RelocationTable/RelocationTable.cpp56
-rw-r--r--utils/bcmregtool/elfio/examples/anonymizer/Makefile.am3
-rw-r--r--utils/bcmregtool/elfio/examples/anonymizer/Makefile.in559
-rw-r--r--utils/bcmregtool/elfio/examples/anonymizer/anonymizer.cpp145
-rw-r--r--utils/bcmregtool/elfio/examples/elfdump/ELFDump.vcxproj91
-rw-r--r--utils/bcmregtool/elfio/examples/elfdump/Makefile.am4
-rw-r--r--utils/bcmregtool/elfio/examples/elfdump/Makefile.in560
-rw-r--r--utils/bcmregtool/elfio/examples/elfdump/elfdump.cpp59
-rw-r--r--utils/bcmregtool/elfio/examples/tutorial/Makefile.am3
-rw-r--r--utils/bcmregtool/elfio/examples/tutorial/Makefile.in559
-rw-r--r--utils/bcmregtool/elfio/examples/tutorial/tutorial.cpp90
-rw-r--r--utils/bcmregtool/elfio/examples/write_obj/Makefile.am3
-rw-r--r--utils/bcmregtool/elfio/examples/write_obj/Makefile.in559
-rw-r--r--utils/bcmregtool/elfio/examples/write_obj/write_obj.cpp112
-rw-r--r--utils/bcmregtool/elfio/examples/writer/Makefile.am3
-rw-r--r--utils/bcmregtool/elfio/examples/writer/Makefile.in559
-rw-r--r--utils/bcmregtool/elfio/examples/writer/writer.cpp82
-rw-r--r--utils/bcmregtool/elfio/examples/writer/writer.vcxproj87
-rw-r--r--utils/bcmregtool/elfio/examples/writer/writer.vcxproj.filters22
-rw-r--r--utils/bcmregtool/elfio/examples/writer/writer.vcxproj.user7
-rwxr-xr-xutils/bcmregtool/elfio/install-sh527
-rwxr-xr-xutils/bcmregtool/elfio/missing215
212 files changed, 24931 insertions, 0 deletions
diff --git a/utils/bcmregtool/elfio/.gitignore b/utils/bcmregtool/elfio/.gitignore
new file mode 100644
index 0000000..e50b50a
--- /dev/null
+++ b/utils/bcmregtool/elfio/.gitignore
@@ -0,0 +1,81 @@
+autom4te.cache
+Debug
+Release
+ELFIO.sdf
+ELFIO.v11.suo
+ELFIO.opensdf
+ELFIO.v12.suo
+.vs
+
+ELFIOTest/Debug
+ELFIOTest/Release
+ELFIOTest/ELFIOTest.vcxproj.user
+ELFIOTest/ELFIOTest
+
+examples/ELFDump/Debug
+examples/anonymizer/anonymizer
+examples/elfdump/elfdump
+examples/tutorial/tutorial
+examples/write_obj/write_obj
+examples/writer/writer
+
+
+# generated elf files
+elf_examples/*_copy
+elf_examples/*_copy.elf
+elf_examples/elf_dummy_header_i386_32.elf
+elf_examples/elf_dummy_header_i386_64.elf
+elf_examples/elf_dummy_header_ppc_32.elf
+elf_examples/elf_dummy_header_ppc_64.elf
+elf_examples/write_exe_i386_32
+elf_examples/write_exe_i386_32_w_addr
+elf_examples/write_exe_i386_32_wo_addr
+elf_examples/write_exe_i386_32_section_added
+elf_examples/ppc-32bit-testcopy*.elf
+
+# various unwanted files (backups, objects, cmake artifacts)
+*~
+*.o
+*.kate-swp
+*.swp
+.#*
+\#*#
+CMakeCache.txt
+Makefile
+CMakeFiles
+/build*/
+*.res
+
+# autotools artifacts
+.deps
+config.status
+ELFIOTest/runELFtests.trs
+
+# eclipse project files
+.settings
+.project
+.cproject
+.cdtproject
+.cdtbuild
+
+# netbeans project files
+/dist/
+Makefile
+.dep.inc
+nbproject
+
+# QtCreator project files
+CMakeLists.txt.user
+
+# ignore all _ prefixed directories (usually used for generated directories)
+_*/
+
+# Latex build output
+*.pdf
+*.log
+*.out
+*.aux
+*.bbl
+*.toc
+*.blg
+/examples/elfdump/ELFDump.vcxproj.user
diff --git a/utils/bcmregtool/elfio/AUTHORS b/utils/bcmregtool/elfio/AUTHORS
new file mode 100644
index 0000000..2aee04c
--- /dev/null
+++ b/utils/bcmregtool/elfio/AUTHORS
@@ -0,0 +1,2 @@
+ELFIO library implemented by
+ Serge Lamikhov-Center <to_serge@users.sourceforge.net>
diff --git a/utils/bcmregtool/elfio/COPYING b/utils/bcmregtool/elfio/COPYING
new file mode 100644
index 0000000..b0cd4ac
--- /dev/null
+++ b/utils/bcmregtool/elfio/COPYING
@@ -0,0 +1,21 @@
+MIT License
+
+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.
diff --git a/utils/bcmregtool/elfio/ChangeLog b/utils/bcmregtool/elfio/ChangeLog
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/utils/bcmregtool/elfio/ChangeLog
diff --git a/utils/bcmregtool/elfio/ELFIO.sln b/utils/bcmregtool/elfio/ELFIO.sln
new file mode 100644
index 0000000..ebad862
--- /dev/null
+++ b/utils/bcmregtool/elfio/ELFIO.sln
@@ -0,0 +1,32 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ELFDump", "examples\elfdump\ELFDump.vcxproj", "{CBAA735F-E237-4976-909F-2349920ED871}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ELFIOTest", "ELFIOTest\ELFIOTest.vcxproj", "{FC8A3379-B8AA-4C32-804F-F8C43AFBC2A1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "writer", "examples\writer\writer.vcxproj", "{4E5A96DB-F6E9-4EEE-90BE-67B722DA8C84}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CBAA735F-E237-4976-909F-2349920ED871}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CBAA735F-E237-4976-909F-2349920ED871}.Debug|Win32.Build.0 = Debug|Win32
+ {CBAA735F-E237-4976-909F-2349920ED871}.Release|Win32.ActiveCfg = Release|Win32
+ {CBAA735F-E237-4976-909F-2349920ED871}.Release|Win32.Build.0 = Release|Win32
+ {FC8A3379-B8AA-4C32-804F-F8C43AFBC2A1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FC8A3379-B8AA-4C32-804F-F8C43AFBC2A1}.Debug|Win32.Build.0 = Debug|Win32
+ {FC8A3379-B8AA-4C32-804F-F8C43AFBC2A1}.Release|Win32.ActiveCfg = Release|Win32
+ {FC8A3379-B8AA-4C32-804F-F8C43AFBC2A1}.Release|Win32.Build.0 = Release|Win32
+ {4E5A96DB-F6E9-4EEE-90BE-67B722DA8C84}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4E5A96DB-F6E9-4EEE-90BE-67B722DA8C84}.Debug|Win32.Build.0 = Debug|Win32
+ {4E5A96DB-F6E9-4EEE-90BE-67B722DA8C84}.Release|Win32.ActiveCfg = Release|Win32
+ {4E5A96DB-F6E9-4EEE-90BE-67B722DA8C84}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.cpp b/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.cpp
new file mode 100644
index 0000000..03df44a
--- /dev/null
+++ b/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.cpp
@@ -0,0 +1,1054 @@
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#define BOOST_TEST_MAIN
+#ifndef _MSC_VER
+#define BOOST_TEST_DYN_LINK
+#endif
+#define BOOST_TEST_MODULE ELFIO_Test
+#include <boost/test/unit_test.hpp>
+
+#include <elfio/elfio.hpp>
+
+using namespace ELFIO;
+
+////////////////////////////////////////////////////////////////////////////////
+void
+checkHeader( elfio& reader,
+ unsigned char nClass,
+ unsigned char encoding,
+ unsigned char elfVersion,
+ Elf_Half type,
+ Elf_Half machine,
+ Elf_Word version,
+ Elf64_Addr entry,
+ Elf_Word flags,
+ Elf_Half secNum,
+ Elf_Half segNum,
+ unsigned char OSABI,
+ unsigned char ABIVersion )
+{
+ BOOST_CHECK_EQUAL( reader.get_class(), nClass );
+ BOOST_CHECK_EQUAL( reader.get_encoding(), encoding );
+ BOOST_CHECK_EQUAL( reader.get_elf_version(), elfVersion );
+ BOOST_CHECK_EQUAL( reader.get_os_abi(), OSABI );
+ BOOST_CHECK_EQUAL( reader.get_abi_version(), ABIVersion );
+ BOOST_CHECK_EQUAL( reader.get_type(), type );
+ BOOST_CHECK_EQUAL( reader.get_machine(), machine );
+ BOOST_CHECK_EQUAL( reader.get_version(), version );
+ BOOST_CHECK_EQUAL( reader.get_entry(), entry );
+ BOOST_CHECK_EQUAL( reader.get_flags(), flags );
+ BOOST_CHECK_EQUAL( reader.sections.size(), secNum );
+ BOOST_CHECK_EQUAL( reader.segments.size(), segNum );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+void
+checkSection( const section* sec,
+ Elf_Half index,
+ std::string name,
+ Elf_Word type,
+ Elf_Xword flags,
+ Elf64_Addr address,
+ Elf_Xword size,
+ Elf_Word link,
+ Elf_Word info,
+ Elf_Xword addrAlign,
+ Elf_Xword entrySize )
+{
+ BOOST_CHECK_EQUAL( sec->get_index(), index );
+ BOOST_CHECK_EQUAL( sec->get_name(), name );
+ BOOST_CHECK_EQUAL( sec->get_type(), type );
+ BOOST_CHECK_EQUAL( sec->get_flags(), flags );
+ BOOST_CHECK_EQUAL( sec->get_address(), address );
+ BOOST_CHECK_EQUAL( sec->get_size(), size );
+ BOOST_CHECK_EQUAL( sec->get_link(), link );
+ BOOST_CHECK_EQUAL( sec->get_info(), info );
+ BOOST_CHECK_EQUAL( sec->get_addr_align(), addrAlign );
+ BOOST_CHECK_EQUAL( sec->get_entry_size(), entrySize );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+void
+checkSection( const section* sec,
+ std::string name,
+ Elf_Word type,
+ Elf_Xword flags,
+ Elf64_Addr address,
+ Elf_Xword size,
+ Elf_Word link,
+ Elf_Word info,
+ Elf_Xword addrAlign,
+ Elf_Xword entrySize )
+{
+ checkSection( sec, sec->get_index(), name, type, flags, address, size, link,
+ info, addrAlign, entrySize );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+void
+checkSegment( const segment* seg,
+ Elf_Word type,
+ Elf64_Addr vaddr,
+ Elf64_Addr paddr,
+ Elf_Xword fsize,
+ Elf_Xword msize,
+ Elf_Word flags,
+ Elf_Xword align )
+{
+ BOOST_CHECK_EQUAL( seg->get_type(), type );
+ BOOST_CHECK_EQUAL( seg->get_virtual_address(), vaddr );
+ BOOST_CHECK_EQUAL( seg->get_physical_address(), paddr );
+ BOOST_CHECK_EQUAL( seg->get_file_size(), fsize );
+ BOOST_CHECK_EQUAL( seg->get_memory_size(), msize );
+ BOOST_CHECK_EQUAL( seg->get_flags(), flags );
+ BOOST_CHECK_EQUAL( seg->get_align(), align );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+void
+checkSymbol( const symbol_section_accessor& sr, Elf_Xword index,
+ std::string name_, Elf64_Addr value_,
+ Elf_Xword size_,
+ unsigned char bind_, unsigned char type_,
+ Elf_Half section_, unsigned char other_ )
+{
+ std::string name;
+ Elf64_Addr value;
+ Elf_Xword size;
+ unsigned char bind;
+ unsigned char type;
+ Elf_Half section;
+ unsigned char other;
+
+ BOOST_REQUIRE_EQUAL( sr.get_symbol( index, name, value, size, bind, type, section, other ),
+ true );
+ BOOST_CHECK_EQUAL( name, name_ );
+ BOOST_CHECK_EQUAL( value, value_ );
+ BOOST_CHECK_EQUAL( size, size_ );
+ BOOST_CHECK_EQUAL( bind, bind_ );
+ BOOST_CHECK_EQUAL( type, type_ );
+ BOOST_CHECK_EQUAL( section, section_ );
+ BOOST_CHECK_EQUAL( other, other_ );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+void
+checkRelocation( const relocation_section_accessor* pRT, Elf_Xword index,
+ Elf64_Addr offset_, Elf64_Addr symbolValue_,
+ std::string symbolName_,
+ unsigned char type_, Elf_Sxword addend_,
+ Elf_Sxword calcValue_ )
+{
+ Elf64_Addr offset;
+ Elf64_Addr symbolValue;
+ std::string symbolName;
+ Elf_Word type;
+ Elf_Sxword addend;
+ Elf_Sxword calcValue;
+
+ BOOST_REQUIRE_EQUAL( pRT->get_entry( index, offset, symbolValue, symbolName,
+ type, addend, calcValue ),
+ true );
+ BOOST_CHECK_EQUAL( offset, offset_ );
+ BOOST_CHECK_EQUAL( symbolValue, symbolValue_ );
+ BOOST_CHECK_EQUAL( symbolName, symbolName_ );
+ BOOST_CHECK_EQUAL( type, type_ );
+ BOOST_CHECK_EQUAL( addend, addend_ );
+ BOOST_CHECK_EQUAL( calcValue, calcValue_ );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+void
+ checkNote( const note_section_accessor& notes, Elf_Word index,
+ Elf_Word type_, std::string name_,
+ Elf_Word descSize_ )
+{
+ Elf_Word type;
+ std::string name;
+ void* desc;
+ Elf_Word descSize;
+
+ BOOST_REQUIRE_EQUAL( notes.get_note( index, type, name, desc, descSize ),
+ true );
+ BOOST_CHECK_EQUAL( type, type_ );
+ BOOST_CHECK_EQUAL( name, name_ );
+ BOOST_CHECK_EQUAL( descSize, descSize_ );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( load32 )
+{
+ elfio reader;
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/hello_32" ), true );
+ checkHeader( reader, ELFCLASS32, ELFDATA2LSB, EV_CURRENT, ET_EXEC,
+ EM_386, 1, 0x80482b0, 0, 28, 7, 0, 0 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[0];
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ sec = reader.sections[1];
+ checkSection( sec, 1, ".interp", SHT_PROGBITS, SHF_ALLOC,
+ 0x08048114, 0x13, 0, 0, 1, 0 );
+
+ sec = reader.sections[9];
+ checkSection( sec, 9, ".rel.plt", SHT_REL, SHF_ALLOC,
+ 0x08048234, 0x18, 4, 11, 4, 8 );
+
+ sec = reader.sections[19];
+ checkSection( sec, 19, ".dynamic", SHT_DYNAMIC, SHF_WRITE | SHF_ALLOC,
+ 0x080494a0, 0xc8, 5, 0, 4, 8 );
+
+ sec = reader.sections[27];
+ checkSection( sec, 27, ".strtab", SHT_STRTAB, 0,
+ 0x0, 0x259, 0, 0, 1, 0 );
+
+ const section* sec1 = reader.sections[ ".strtab" ];
+ BOOST_CHECK_EQUAL( sec->get_index(), sec1->get_index() );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check segments
+ segment* seg = reader.segments[0];
+ checkSegment( seg, PT_PHDR, 0x08048034, 0x08048034,
+ 0x000e0, 0x000e0, PF_R + PF_X, 4 );
+
+ seg = reader.segments[4];
+ checkSegment( seg, PT_DYNAMIC, 0x080494a0, 0x080494a0,
+ 0x000c8, 0x000c8, PF_R + PF_W, 4 );
+
+ seg = reader.segments[6];
+ checkSegment( seg, 0x6474E551, 0x0, 0x0,
+ 0x0, 0x0, PF_R + PF_W, 4 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check symbol table
+ sec = reader.sections[ ".symtab" ];
+
+
+ symbol_section_accessor sr( reader, sec );
+
+ BOOST_CHECK_EQUAL( sr.get_symbols_num(), 68 );
+ checkSymbol( sr, 0, "", 0x00000000, 0, STB_LOCAL, STT_NOTYPE, STN_UNDEF,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 1, "", 0x08048114, 0, STB_LOCAL, STT_SECTION, 1,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 39, "hello.c", 0x00000000, 0, STB_LOCAL, STT_FILE, SHN_ABS,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 65, "__i686.get_pc_thunk.bx", 0x08048429, 0, STB_GLOBAL, STT_FUNC, 12,
+ ELF_ST_VISIBILITY( STV_HIDDEN ) );
+ checkSymbol( sr, 66, "main", 0x08048384, 43, STB_GLOBAL, STT_FUNC, 12,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 67, "_init", 0x0804824c, 0, STB_GLOBAL, STT_FUNC, 10,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check relocation table
+ sec = reader.sections[ ".rel.dyn" ];
+
+
+ relocation_section_accessor reloc( reader, sec );
+ BOOST_CHECK_EQUAL( reloc.get_entries_num(), 1 );
+
+ checkRelocation( &reloc, 0, 0x08049568, 0x0, "__gmon_start__", R_386_GLOB_DAT, 0, 0 );
+
+ sec = reader.sections[ ".rel.plt" ];
+
+
+ relocation_section_accessor reloc1( reader, sec );
+ BOOST_CHECK_EQUAL( reloc1.get_entries_num(), 3 );
+
+ checkRelocation( &reloc1, 0, 0x08049578, 0x0, "__gmon_start__", R_X86_64_JUMP_SLOT, 0, 0 );
+ checkRelocation( &reloc1, 1, 0x0804957c, 0x0, "__libc_start_main", R_X86_64_JUMP_SLOT, 0, 0 );
+ checkRelocation( &reloc1, 2, 0x08049580, 0x0, "puts", R_X86_64_JUMP_SLOT, 0, 0 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check note reader
+ sec = reader.sections[ ".note.ABI-tag" ];
+
+
+ note_section_accessor notes( reader, sec );
+ BOOST_CHECK_EQUAL( notes.get_notes_num(), 1 );
+
+ checkNote( notes, 0, 1, std::string( "GNU" ), 16 );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( load64 )
+{
+ elfio reader;
+
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/hello_64" ), true );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check ELF header
+ checkHeader( reader, ELFCLASS64, ELFDATA2LSB, EV_CURRENT, ET_EXEC,
+ EM_X86_64, 1, 0x4003c0, 0, 29, 8, 0, 0 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[ 0 ];
+
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ sec =reader.sections[ 1 ];
+
+ checkSection( sec, 1, ".interp", SHT_PROGBITS, SHF_ALLOC,
+ 0x0000000000400200, 0x1c, 0, 0, 1, 0 );
+
+ sec =reader.sections[ 9 ];
+
+ checkSection( sec, 9, ".rela.plt", SHT_RELA, SHF_ALLOC,
+ 0x0000000000400340, 0x30, 4, 11, 8, 0x18 );
+
+ sec =reader.sections[ 20 ];
+
+ checkSection( sec, 20, ".dynamic", SHT_DYNAMIC, SHF_WRITE | SHF_ALLOC,
+ 0x0000000000600698, 0x190, 5, 0, 8, 0x10 );
+
+ sec =reader.sections[ 28 ];
+
+ checkSection( sec, 28, ".strtab", SHT_STRTAB, 0,
+ 0x0, 0x23f, 0, 0, 1, 0 );
+
+ const section* sec1 = reader.sections[ ".strtab" ];
+ BOOST_CHECK_EQUAL( sec->get_index(), sec1->get_index() );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check segments
+ segment* seg = reader.segments[0];
+ checkSegment( seg, PT_PHDR, 0x0000000000400040, 0x0000000000400040,
+ 0x00000000000001c0, 0x00000000000001c0, PF_R + PF_X, 8 );
+
+ seg = reader.segments[2];
+ checkSegment( seg, PT_LOAD, 0x0000000000400000, 0x0000000000400000,
+ 0x000000000000066c, 0x000000000000066c, PF_R + PF_X, 0x200000 );
+
+ seg = reader.segments[7];
+ checkSegment( seg, 0x6474E551, 0x0, 0x0,
+ 0x0, 0x0, PF_R + PF_W, 8 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check symbol table
+ sec =reader.sections[ ".symtab" ];
+
+
+ symbol_section_accessor sr( reader, sec );
+
+ BOOST_CHECK_EQUAL( sr.get_symbols_num(), 67 );
+ checkSymbol( sr, 0, "", 0x00000000, 0, STB_LOCAL, STT_NOTYPE, STN_UNDEF,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 1, "", 0x00400200, 0, STB_LOCAL, STT_SECTION, 1,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 40, "hello.c", 0x00000000, 0, STB_LOCAL, STT_FILE, SHN_ABS,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 52, "__gmon_start__", 0x00000000, 0, STB_WEAK, STT_NOTYPE, STN_UNDEF,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 64, "_edata", 0x0060085c, 0, STB_GLOBAL, STT_NOTYPE, SHN_ABS,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 65, "main", 0x00400498, 21, STB_GLOBAL, STT_FUNC, 12,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 66, "_init", 0x00400370, 0, STB_GLOBAL, STT_FUNC, 10,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check relocation table
+ sec =reader.sections[ ".rela.dyn" ];
+
+
+ relocation_section_accessor reloc( reader, sec );
+ BOOST_CHECK_EQUAL( reloc.get_entries_num(), 1 );
+
+ checkRelocation( &reloc, 0, 0x00600828, 0x0, "__gmon_start__", R_X86_64_GLOB_DAT, 0, 0 );
+
+ sec =reader.sections[ ".rela.plt" ];
+
+
+ relocation_section_accessor reloc1( reader, sec );
+ BOOST_CHECK_EQUAL( reloc1.get_entries_num(), 2 );
+
+ checkRelocation( &reloc1, 0, 0x00600848, 0x0, "puts", R_X86_64_JUMP_SLOT, 0, 0 );
+ checkRelocation( &reloc1, 1, 0x00600850, 0x0, "__libc_start_main", R_X86_64_JUMP_SLOT, 0, 0 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check note reader
+ sec =reader.sections[ ".note.ABI-tag" ];
+
+
+ note_section_accessor notes( reader, sec );
+ BOOST_CHECK_EQUAL( notes.get_notes_num(), 1 );
+
+ checkNote( notes, 0, 1, std::string( "GNU" ), 16 );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( hello_64_o )
+{
+ elfio reader;
+
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/hello_64.o" ), true );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check ELF header
+ checkHeader( reader, ELFCLASS64, ELFDATA2LSB, EV_CURRENT, ET_REL,
+ EM_X86_64, 1, 0, 0, 13, 0, 0, 0 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[ 0 ];
+
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ sec =reader.sections[ 1 ];
+
+ checkSection( sec, 1, ".text", SHT_PROGBITS, SHF_ALLOC | SHF_EXECINSTR,
+ 0x0, 0x15, 0, 0, 4, 0 );
+
+ section* sec1 = reader.sections[ ".text" ];
+ BOOST_CHECK_EQUAL( sec->get_index(), sec1->get_index() );
+
+ sec = reader.sections[12];
+ checkSection( sec, 12, ".strtab", SHT_STRTAB, 0,
+ 0x0, 0x13, 0, 0, 1, 0 );
+
+ sec1 = reader.sections[ ".strtab" ];
+ BOOST_CHECK_EQUAL( sec->get_index(), sec1->get_index() );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check symbol table
+ sec =reader.sections[ ".symtab" ];
+
+
+ symbol_section_accessor sr( reader, sec );
+
+ BOOST_CHECK_EQUAL( sr.get_symbols_num(), 11 );
+ checkSymbol( sr, 9, "main", 0x00000000, 21, STB_GLOBAL, STT_FUNC, 1,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check relocation table
+ sec =reader.sections[ ".rela.text" ];
+
+
+ relocation_section_accessor reloc( reader, sec );
+ BOOST_CHECK_EQUAL( reloc.get_entries_num(), 2 );
+
+ checkRelocation( &reloc, 0, 0x00000005, 0x0, "", R_X86_64_32, 0, 0 );
+ checkRelocation( &reloc, 1, 0x0000000A, 0x0, "puts", R_X86_64_PC32, 0xfffffffffffffffcULL, -14 );
+
+ sec =reader.sections[ ".rela.eh_frame" ];
+
+
+ relocation_section_accessor reloc1( reader, sec );
+ BOOST_CHECK_EQUAL( reloc1.get_entries_num(), 1 );
+
+ checkRelocation( &reloc1, 0, 0x00000020, 0x0, "", R_X86_64_32, 0, 0 );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( hello_32_o )
+{
+ elfio reader;
+
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/hello_32.o" ), true );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check ELF header
+ checkHeader( reader, ELFCLASS32, ELFDATA2LSB, EV_CURRENT, ET_REL,
+ EM_386, 1, 0, 0, 11, 0, 0, 0 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[ 0 ];
+
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ sec =reader.sections[ 1 ];
+
+ checkSection( sec, 1, ".text", SHT_PROGBITS, SHF_ALLOC | SHF_EXECINSTR,
+ 0x0, 0x2b, 0, 0, 4, 0 );
+
+ section* sec1 = reader.sections[ ".text" ];
+ BOOST_CHECK_EQUAL( sec->get_index(), sec1->get_index() );
+
+
+ sec = reader.sections[ 10 ];
+
+ checkSection( sec, 10, ".strtab", SHT_STRTAB, 0,
+ 0x0, 0x13, 0, 0, 1, 0 );
+
+ sec1 = reader.sections[ ".strtab" ];
+ BOOST_CHECK_EQUAL( sec->get_index(), sec1->get_index() );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check symbol table
+ sec =reader.sections[ ".symtab" ];
+
+
+ symbol_section_accessor sr( reader, sec );
+
+ BOOST_CHECK_EQUAL( sr.get_symbols_num(), 10 );
+ checkSymbol( sr, 8, "main", 0x00000000, 43, STB_GLOBAL, STT_FUNC, 1,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check relocation table
+ sec =reader.sections[ ".rel.text" ];
+
+
+ relocation_section_accessor reloc( reader, sec );
+ BOOST_CHECK_EQUAL( reloc.get_entries_num(), 2 );
+
+ checkRelocation( &reloc, 0, 0x00000014, 0x0, "", R_386_32, 0, 0 );
+ checkRelocation( &reloc, 1, 0x00000019, 0x0, "puts", R_386_PC32, 0x0, -25 );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( test_ppc_o )
+{
+ elfio reader;
+
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/test_ppc.o" ), true );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check ELF header
+ checkHeader( reader, ELFCLASS32, ELFDATA2MSB, EV_CURRENT, ET_REL,
+ EM_PPC, 1, 0, 0, 16, 0, 0, 0 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[ 0 ];
+
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ sec =reader.sections[ 1 ];
+
+ checkSection( sec, 1, ".text", SHT_PROGBITS, SHF_ALLOC | SHF_EXECINSTR,
+ 0x0, 0x118, 0, 0, 4, 0 );
+
+ section* sec1 = reader.sections[ ".text" ];
+ BOOST_CHECK_EQUAL( sec->get_index(), sec1->get_index() );
+
+ sec =reader.sections[ 15 ];
+
+ checkSection( sec, 15, ".strtab", SHT_STRTAB, 0,
+ 0x0, 0x14f, 0, 0, 1, 0 );
+
+ sec1 = reader.sections[ ".strtab" ];
+ BOOST_CHECK_EQUAL( sec->get_index(), sec1->get_index() );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check symbol table
+ sec =reader.sections[ ".symtab" ];
+
+
+ symbol_section_accessor sr( reader, sec );
+
+ BOOST_CHECK_EQUAL( sr.get_symbols_num(), 24 );
+ checkSymbol( sr, 14, "main", 0x00000000, 92, STB_GLOBAL, STT_FUNC, 1,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 8, "_GLOBAL__I_main", 0x000000DC, 60, STB_LOCAL, STT_FUNC, 1,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check relocation table
+ sec =reader.sections[ ".rela.text" ];
+
+
+ relocation_section_accessor reloc( reader, sec );
+ BOOST_CHECK_EQUAL( reloc.get_entries_num(), 18 );
+
+ checkRelocation( &reloc, 0, 0x00000016, 0x0, "_ZSt4cout", 6, 0, 0 );
+ checkRelocation( &reloc, 1, 0x0000001a, 0x0, "_ZSt4cout", 4, 0x0, 0 );
+ checkRelocation( &reloc, 17, 0x000000c0, 0x0, "__cxa_atexit", 10, 0x0, 0 );
+
+ sec =reader.sections[ ".rela.ctors" ];
+
+
+ relocation_section_accessor reloc1( reader, sec );
+ BOOST_CHECK_EQUAL( reloc1.get_entries_num(), 1 );
+
+ checkRelocation( &reloc1, 0, 0x00000000, 0x0, "", 1, 0xDC, 0xDC );
+
+ sec =reader.sections[ ".rela.eh_frame" ];
+
+
+ relocation_section_accessor reloc2( reader, sec );
+ BOOST_CHECK_EQUAL( reloc2.get_entries_num(), 3 );
+
+ checkRelocation( &reloc2, 1, 0x00000020, 0x0, "", 1, 0x0, 0x0 );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( test_ppc )
+{
+ elfio reader;
+
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/test_ppc" ), true );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check ELF header
+ checkHeader( reader, ELFCLASS32, ELFDATA2MSB, EV_CURRENT, ET_EXEC,
+ EM_PPC, 1, 0x10000550, 0, 31, 8, 0, 0 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[ 0 ];
+
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ sec =reader.sections[ 1 ];
+
+ checkSection( sec, 1, ".interp", SHT_PROGBITS, SHF_ALLOC,
+ 0x0000000010000134, 0xd, 0, 0, 1, 0 );
+
+ sec =reader.sections[ 9 ];
+
+ checkSection( sec, 9, ".rela.plt", SHT_RELA, SHF_ALLOC,
+ 0x00000000010000494, 0x6c, 4, 22, 4, 0xc );
+
+ sec =reader.sections[ 20 ];
+
+ checkSection( sec, 20, ".dynamic", SHT_DYNAMIC, SHF_WRITE | SHF_ALLOC,
+ 0x0000000010010aec, 0xe8, 5, 0, 4, 0x8 );
+
+ sec =reader.sections[ 28 ];
+
+ checkSection( sec, 28, ".shstrtab", SHT_STRTAB, 0,
+ 0x0, 0x101, 0, 0, 1, 0 );
+
+ const section* sec1 = reader.sections[ ".shstrtab" ];
+ BOOST_CHECK_EQUAL( sec->get_index(), sec1->get_index() );
+
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check segments
+ segment* seg = reader.segments[0];
+ checkSegment( seg, PT_PHDR, 0x10000034, 0x10000034,
+ 0x00100, 0x00100, PF_R + PF_X, 4 );
+
+ seg = reader.segments[2];
+ checkSegment( seg, PT_LOAD, 0x10000000, 0x10000000,
+ 0x00acc, 0x00acc, PF_R + PF_X, 0x10000 );
+
+ seg = reader.segments[7];
+ checkSegment( seg, 0x6474E551, 0x0, 0x0,
+ 0x0, 0x0, PF_R + PF_W, 0x4 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check symbol table
+ sec =reader.sections[ ".symtab" ];
+
+
+ symbol_section_accessor sr( reader, sec );
+
+ BOOST_CHECK_EQUAL( sr.get_symbols_num(), 80 );
+ checkSymbol( sr, 0, "", 0x00000000, 0, STB_LOCAL, STT_NOTYPE, STN_UNDEF,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 1, "", 0x10000134, 0, STB_LOCAL, STT_SECTION, 1,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 40, "__CTOR_END__", 0x10010AD4, 0, STB_LOCAL, STT_OBJECT, 16,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 52, "__init_array_start", 0x10010acc, 0, STB_LOCAL, STT_NOTYPE, 16,
+ ELF_ST_VISIBILITY( STV_HIDDEN ) );
+ checkSymbol( sr, 64, "_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4", 0x10000920, 204, STB_GLOBAL, STT_FUNC, SHN_UNDEF,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 78, "main", 0x1000069c, 92, STB_GLOBAL, STT_FUNC, 11,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+ checkSymbol( sr, 79, "_init", 0x10000500, 0, STB_GLOBAL, STT_FUNC, 10,
+ ELF_ST_VISIBILITY( STV_DEFAULT ) );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check relocation table
+ sec =reader.sections[ ".rela.dyn" ];
+
+
+ relocation_section_accessor reloc( reader, sec );
+ BOOST_CHECK_EQUAL( reloc.get_entries_num(), 2 );
+
+ checkRelocation( &reloc, 1, 0x10010c0c, 0x10010c0c, "_ZSt4cout", 19, 0, 0 );
+
+ sec =reader.sections[ ".rela.plt" ];
+
+
+ relocation_section_accessor reloc1( reader, sec );
+ BOOST_CHECK_EQUAL( reloc1.get_entries_num(), 9 );
+
+ checkRelocation( &reloc1, 0, 0x10010be4, 0x100008e0, "__cxa_atexit", 21, 0, 0 );
+ checkRelocation( &reloc1, 1, 0x10010be8, 0x0, "__gmon_start__", 21, 0, 0 );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check note reader
+ sec =reader.sections[ ".note.ABI-tag" ];
+
+
+ note_section_accessor notes( reader, sec );
+ BOOST_CHECK_EQUAL( notes.get_notes_num(), 1 );
+
+ checkNote( notes, 0, 1, std::string( "GNU" ), 16 );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( test_dummy_out_i386_32 )
+{
+ elfio writer;
+
+ writer.create( ELFCLASS32, ELFDATA2LSB );
+
+ writer.set_os_abi( 0 );
+ writer.set_abi_version( 0 );
+ writer.set_type( ET_REL );
+ writer.set_machine( EM_386 );
+ writer.set_flags( 0 );
+
+ // Set program entry point
+ writer.set_entry( 0x80482b0 );
+
+ // Add Note section
+ section* note_sec = writer.sections.add( ".note" );
+ note_sec->set_type( SHT_NOTE );
+ note_sec->set_flags( SHF_ALLOC );
+ note_sec->set_addr_align( 4 );
+ note_section_accessor note_writer( writer, note_sec );
+ char descr[6] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
+ note_writer.add_note( 0x77, "Hello", &descr, 6 );
+ BOOST_CHECK_EQUAL( note_sec->get_index(), 2 );
+
+ // Create ELF file
+ writer.save( "../elf_examples/elf_dummy_header_i386_32.elf" );
+
+ elfio reader;
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/elf_dummy_header_i386_32.elf" ),
+ true );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check ELF header
+ checkHeader( reader, ELFCLASS32, ELFDATA2LSB, EV_CURRENT, ET_REL,
+ EM_386, EV_CURRENT, 0x80482b0, 0, 3, 0, 0, 0 );
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[ "" ];
+
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ sec = reader.sections[ ".shstrtab" ];
+
+ checkSection( sec, 1, ".shstrtab", SHT_STRTAB, 0,
+ 0, 17, 0, 0, 1, 0 );
+
+ 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_dummy_out_ppc_32 )
+{
+ elfio writer;
+
+ writer.create( ELFCLASS32, ELFDATA2MSB );
+
+ writer.set_os_abi( 0 );
+ writer.set_abi_version( 0 );
+ writer.set_type( ET_REL );
+ writer.set_machine( EM_PPC );
+ writer.set_flags( 0 );
+
+ // Set program entry point
+ writer.set_entry( 0x80482b0 );
+
+ // Add Note section
+ section* note_sec = writer.sections.add( ".note" );
+ note_sec->set_type( SHT_NOTE );
+ note_sec->set_flags( SHF_ALLOC );
+ note_sec->set_addr_align( 4 );
+ note_section_accessor note_writer( writer, note_sec );
+ char descr[6] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
+ note_writer.add_note( 0x77, "Hello", &descr, 6 );
+ BOOST_CHECK_EQUAL( note_sec->get_index(), 2 );
+
+ // Create ELF file
+ writer.save( "../elf_examples/elf_dummy_header_ppc_32.elf" );
+
+ elfio reader;
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/elf_dummy_header_ppc_32.elf" ),
+ true );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check ELF header
+ checkHeader( reader, ELFCLASS32, ELFDATA2MSB, EV_CURRENT, ET_REL,
+ EM_PPC, EV_CURRENT, 0x80482b0, 0, 3, 0, 0, 0 );
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[ "" ];
+
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ 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 );
+
+ sec =reader.sections[ ".shstrtab" ];
+
+ checkSection( sec, 1, ".shstrtab", SHT_STRTAB, 0,
+ 0, 17, 0, 0, 1, 0 );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( test_dummy_out_i386_64 )
+{
+ elfio writer;
+
+ writer.create( ELFCLASS64, ELFDATA2LSB );
+
+ writer.set_os_abi( 0 );
+ writer.set_abi_version( 0 );
+ writer.set_type( ET_REL );
+ writer.set_machine( EM_X86_64 );
+ writer.set_flags( 0 );
+
+ // Set program entry point
+ writer.set_entry( 0x120380482b0ull );
+
+ // Add Note section
+ section* note_sec = writer.sections.add( ".note" );
+ note_sec->set_type( SHT_NOTE );
+ note_sec->set_flags( SHF_ALLOC );
+ note_sec->set_addr_align( 4 );
+ note_section_accessor note_writer( writer, note_sec );
+ char descr[6] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
+ note_writer.add_note( 0x77, "Hello", &descr, 6 );
+ BOOST_CHECK_EQUAL( note_sec->get_index(), 2 );
+
+ // Create ELF file
+ writer.save( "../elf_examples/elf_dummy_header_i386_64.elf" );
+
+ elfio reader;
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/elf_dummy_header_i386_64.elf" ),
+ true );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check ELF header
+ checkHeader( reader, ELFCLASS64, ELFDATA2LSB, EV_CURRENT, ET_REL,
+ EM_X86_64, EV_CURRENT, 0x120380482b0ull, 0, 3, 0, 0, 0 );
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[ "" ];
+
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ 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 );
+
+ sec =reader.sections[ ".shstrtab" ];
+
+ checkSection( sec, 1, ".shstrtab", SHT_STRTAB, 0,
+ 0, 17, 0, 0, 1, 0 );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( test_dummy_out_ppc_64 )
+{
+ elfio writer;
+
+ writer.create( ELFCLASS64, ELFDATA2MSB );
+
+ writer.set_os_abi( 0 );
+ writer.set_abi_version( 0 );
+ writer.set_type( ET_REL );
+ writer.set_machine( EM_PPC64 );
+ writer.set_flags( 0 );
+
+ // Set program entry point
+ writer.set_entry( 0x120380482b0ull );
+
+ // Add Note section
+ section* note_sec = writer.sections.add( ".note" );
+ note_sec->set_type( SHT_NOTE );
+ note_sec->set_flags( SHF_ALLOC );
+ note_sec->set_addr_align( 4 );
+ note_section_accessor note_writer( writer, note_sec );
+ char descr[6] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
+ note_writer.add_note( 0x77, "Hello", &descr, 6 );
+ BOOST_CHECK_EQUAL( note_sec->get_index(), 2 );
+
+ // Create ELF file
+ writer.save( "../elf_examples/elf_dummy_header_ppc_64.elf" );
+
+ elfio reader;
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/elf_dummy_header_ppc_64.elf" ),
+ true );
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Check ELF header
+ checkHeader( reader, ELFCLASS64, ELFDATA2MSB, EV_CURRENT, ET_REL,
+ EM_PPC64, EV_CURRENT, 0x120380482b0ull, 0, 3, 0, 0, 0 );
+ ////////////////////////////////////////////////////////////////////////////
+ // Check sections
+ section* sec = reader.sections[ "" ];
+
+ checkSection( sec, 0, "", SHT_NULL, 0, 0, 0, 0, 0, 0, 0 );
+
+ sec =reader.sections[ ".shstrtab" ];
+
+ checkSection( sec, 1, ".shstrtab", SHT_STRTAB, 0,
+ 0, 17, 0, 0, 1, 0 );
+
+ 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;
+
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/main" ),
+ true );
+
+ section* dynsec = reader.sections[".dynamic"];
+ BOOST_REQUIRE( dynsec != NULL);
+
+ 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;
+
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/libfunc.so" ),
+ true );
+
+ section* dynsec = reader.sections[".dynamic"];
+ BOOST_REQUIRE( dynsec != NULL);
+
+ 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 );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( test_dynamic_64_3 )
+{
+ elfio reader;
+
+ BOOST_REQUIRE_EQUAL( reader.load( "../elf_examples/main" ),
+ true );
+
+ section* dynsec = reader.sections[".dynamic"];
+ BOOST_REQUIRE( dynsec != NULL);
+
+ dynamic_section_accessor da( reader, dynsec );
+ BOOST_CHECK_EQUAL( da.get_entries_num(), 26 );
+
+ section* strsec1 = reader.sections.add( ".dynstr" );
+ strsec1->set_type( SHT_STRTAB );
+ strsec1->set_entry_size( reader.get_default_entry_size( SHT_STRTAB ) );
+
+ section* dynsec1 = reader.sections.add( ".dynamic1" );
+ dynsec1->set_type( SHT_DYNAMIC );
+ dynsec1->set_entry_size( reader.get_default_entry_size( SHT_DYNAMIC ) );
+ dynsec1->set_link( strsec1->get_index() );
+ dynamic_section_accessor da1( reader, dynsec1 );
+
+ Elf_Xword tag, tag1;
+ Elf_Xword value, value1;
+ std::string str, str1;
+
+ for ( unsigned int i = 0; i < da.get_entries_num(); ++i ) {
+ da.get_entry( i, tag, value, str );
+ if ( tag == DT_NEEDED ||
+ tag == DT_SONAME ||
+ tag == DT_RPATH ||
+ tag == DT_RUNPATH ) {
+ da1.add_entry( tag, str );
+ }
+ else {
+ da1.add_entry( tag, value );
+ }
+ }
+
+ for ( unsigned int i = 0; i < da.get_entries_num(); ++i ) {
+ da.get_entry( i, tag, value, str );
+ da1.get_entry( i, tag1, value1, str1 );
+
+ BOOST_CHECK_EQUAL( tag, tag1 );
+ if ( tag == DT_NEEDED ||
+ tag == DT_SONAME ||
+ tag == DT_RPATH ||
+ tag == DT_RUNPATH ) {
+ BOOST_CHECK_EQUAL( str, str1 );
+ }
+ else {
+ BOOST_CHECK_EQUAL( value, value1 );
+ }
+ }
+}
diff --git a/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.vcxproj b/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.vcxproj
new file mode 100644
index 0000000..75fe519
--- /dev/null
+++ b/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.vcxproj
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{FC8A3379-B8AA-4C32-804F-F8C43AFBC2A1}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>ELFIOTest</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <RunCodeAnalysis>false</RunCodeAnalysis>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..;d:\Developer\boost_1_65_1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <EnablePREfast>false</EnablePREfast>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>
+ </AdditionalDependencies>
+ <AdditionalLibraryDirectories>d:\Developer\boost_1_65_1\stage\lib</AdditionalLibraryDirectories>
+ <Profile>false</Profile>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" --result_code=no --report_level=short </Command>
+ </PostBuildEvent>
+ <PostBuildEvent>
+ <Message>Auto run test</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..;c:\Developer\boost_1_65_1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <AdditionalDependencies>
+ </AdditionalDependencies>
+ <AdditionalLibraryDirectories>c:\Developer\boost_1_65_1\stage\lib</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="ELFIOTest.cpp">
+ <PreprocessToFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ </PreprocessToFile>
+ </ClCompile>
+ <ClCompile Include="ELFIOTest1.cpp" />
+ </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" />
+ <ClInclude Include="..\elfio\elfio_section.hpp" />
+ <ClInclude Include="..\elfio\elfio_segment.hpp" />
+ <ClInclude Include="..\elfio\elfio_strings.hpp" />
+ <ClInclude Include="..\elfio\elfio_symbols.hpp" />
+ <ClInclude Include="..\elfio\elfio_utils.hpp" />
+ <ClInclude Include="..\elfio\elf_types.hpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.vcxproj.filters b/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.vcxproj.filters
new file mode 100644
index 0000000..cc19fff
--- /dev/null
+++ b/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest.vcxproj.filters
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="ELFIOTest.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ELFIOTest1.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\elfio\elf_types.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio_header.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio_note.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio_relocation.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio_section.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio_segment.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio_strings.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio_symbols.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio_utils.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\elfio\elfio_dynamic.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest1.cpp b/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest1.cpp
new file mode 100644
index 0000000..6a0667a
--- /dev/null
+++ b/utils/bcmregtool/elfio/ELFIOTest/ELFIOTest1.cpp
@@ -0,0 +1,438 @@
+#ifdef _MSC_VER
+#define _SCL_SECURE_NO_WARNINGS
+#define ELFIO_NO_INTTYPES
+#endif
+
+#include <boost/test/unit_test.hpp>
+#include <boost/test/output_test_stream.hpp>
+using boost::test_tools::output_test_stream;
+
+#include <elfio/elfio.hpp>
+
+using namespace ELFIO;
+
+
+bool write_obj_i386( bool is64bit )
+{
+ elfio writer;
+
+ writer.create( is64bit ? ELFCLASS64 : ELFCLASS32, ELFDATA2LSB );
+ writer.set_type( ET_REL );
+ writer.set_os_abi( ELFOSABI_LINUX );
+ writer.set_machine( is64bit ? EM_X86_64 : EM_386 );
+
+ // Create code section*
+ section* text_sec = writer.sections.add( ".text" );
+ text_sec->set_type( SHT_PROGBITS );
+ text_sec->set_flags( SHF_ALLOC | SHF_EXECINSTR );
+ text_sec->set_addr_align( 0x10 );
+
+ // Add data into it
+ char text[] = { '\xB8', '\x04', '\x00', '\x00', '\x00', // mov eax, 4
+ '\xBB', '\x01', '\x00', '\x00', '\x00', // mov ebx, 1
+ '\xB9', '\x00', '\x00', '\x00', '\x00', // mov ecx, msg
+ '\xBA', '\x0E', '\x00', '\x00', '\x00', // mov edx, 14
+ '\xCD', '\x80', // int 0x80
+ '\xB8', '\x01', '\x00', '\x00', '\x00', // mov eax, 1
+ '\xCD', '\x80' // int 0x80
+ };
+ text_sec->set_data( text, sizeof( text ) );
+
+ // Create data section*
+ section* data_sec = writer.sections.add( ".data" );
+ data_sec->set_type( SHT_PROGBITS );
+ data_sec->set_flags( SHF_ALLOC | SHF_WRITE );
+ data_sec->set_addr_align( 4 );
+
+ char data[] = { '\x48', '\x65', '\x6C', '\x6C', '\x6F', // msg: db 'Hello, World!', 10
+ '\x2C', '\x20', '\x57', '\x6F', '\x72',
+ '\x6C', '\x64', '\x21', '\x0A'
+ };
+ data_sec->set_data( data, sizeof( data ) );
+
+ section* str_sec = writer.sections.add( ".strtab" );
+ str_sec->set_type( SHT_STRTAB );
+ str_sec->set_addr_align( 0x1 );
+
+ string_section_accessor str_writer( str_sec );
+ Elf_Word nStrIndex = str_writer.add_string( "msg" );
+
+ section* sym_sec = writer.sections.add( ".symtab" );
+ sym_sec->set_type( SHT_SYMTAB );
+ sym_sec->set_info( 2 );
+ sym_sec->set_link( str_sec->get_index() );
+ sym_sec->set_addr_align( 4 );
+ sym_sec->set_entry_size( writer.get_default_entry_size( SHT_SYMTAB ) );
+
+ symbol_section_accessor symbol_writer( writer, sym_sec );
+ Elf_Word nSymIndex = symbol_writer.add_symbol( nStrIndex, 0, 0,
+ STB_LOCAL, STT_NOTYPE, 0,
+ data_sec->get_index() );
+
+ // Another way to add symbol
+ symbol_writer.add_symbol( str_writer, "_start", 0x00000000, 0,
+ STB_WEAK, STT_FUNC, 0,
+ text_sec->get_index() );
+
+ // Create relocation table section*
+ section* rel_sec = writer.sections.add( ".rel.text" );
+ rel_sec->set_type( SHT_REL );
+ rel_sec->set_info( text_sec->get_index() );
+ rel_sec->set_link( sym_sec->get_index() );
+ rel_sec->set_addr_align( 4 );
+ rel_sec->set_entry_size( writer.get_default_entry_size( SHT_REL ) );
+
+ relocation_section_accessor rel_writer( writer, rel_sec );
+ rel_writer.add_entry( 11, nSymIndex, (unsigned char)R_386_RELATIVE );
+
+ // Another method to add the same relocation entry
+ // pRelWriter->AddEntry( pStrWriter, "msg",
+ // pSymWriter, 29, 0,
+ // ELF32_ST_INFO( STB_GLOBAL, STT_OBJECT ), 0,
+ // data_sec->GetIndex(),
+ // 0, (unsigned char)R_386_RELATIVE );
+
+ // Create note section*
+ section* note_sec = writer.sections.add( ".note" );
+ note_sec->set_type( SHT_NOTE );
+ note_sec->set_addr_align( 1 );
+
+ // Create notes writer
+ note_section_accessor note_writer( writer, note_sec );
+ note_writer.add_note( 0x77, "Created by ELFIO", 0, 0 );
+
+ // Create ELF file
+ writer.save(
+ is64bit ?
+ "../elf_examples/write_obj_i386_64.o" :
+ "../elf_examples/write_obj_i386_32.o"
+ );
+
+ return true;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( write_obj_i386_32 )
+{
+ BOOST_CHECK_EQUAL( true, write_obj_i386( false ) );
+ output_test_stream output( "../elf_examples/write_obj_i386_32_match.o", true, false );
+ std::ifstream input( "../elf_examples/write_obj_i386_32.o", std::ios::binary );
+ output << input.rdbuf();
+ BOOST_CHECK( output.match_pattern() );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( write_obj_i386_64 )
+{
+ BOOST_CHECK_EQUAL( true, write_obj_i386( true ) );
+ output_test_stream output( "../elf_examples/write_obj_i386_64_match.o", true, false );
+ std::ifstream input( "../elf_examples/write_obj_i386_64.o", std::ios::binary );
+ output << input.rdbuf();
+ BOOST_CHECK( output.match_pattern() );
+}
+
+bool write_exe_i386( const std::string& filename, bool is64bit, bool set_addr = false, Elf64_Addr addr = 0 )
+{
+ elfio writer;
+
+ writer.create( is64bit ? ELFCLASS64 : ELFCLASS32, ELFDATA2LSB );
+ writer.set_os_abi( ELFOSABI_LINUX );
+ writer.set_type( ET_EXEC );
+ writer.set_machine( is64bit ? EM_X86_64 : EM_386 );
+
+ // Create code section*
+ section* text_sec = writer.sections.add( ".text" );
+ text_sec->set_type( SHT_PROGBITS );
+ text_sec->set_flags( SHF_ALLOC | SHF_EXECINSTR );
+ text_sec->set_addr_align( 0x10 );
+ if ( set_addr ) {
+ text_sec->set_address( addr );
+ }
+
+ // Add data into it
+ char text[] = { '\xB8', '\x04', '\x00', '\x00', '\x00', // mov eax, 4
+ '\xBB', '\x01', '\x00', '\x00', '\x00', // mov ebx, 1
+ '\xB9', '\x20', '\x80', '\x04', '\x08', // mov ecx, msg
+ '\xBA', '\x0E', '\x00', '\x00', '\x00', // mov edx, 14
+ '\xCD', '\x80', // int 0x80
+ '\xB8', '\x01', '\x00', '\x00', '\x00', // mov eax, 1
+ '\xCD', '\x80' // int 0x80
+ };
+ text_sec->set_data( text, sizeof( text ) );
+
+ segment* text_seg = writer.segments.add();
+ text_seg->set_type( PT_LOAD );
+ text_seg->set_virtual_address( 0x08048000 );
+ text_seg->set_physical_address( 0x08048000 );
+ text_seg->set_flags( PF_X | PF_R );
+ text_seg->set_align( 0x1000 );
+ text_seg->add_section_index( text_sec->get_index(), text_sec->get_addr_align() );
+
+ // Create data section*
+ section* data_sec = writer.sections.add( ".data" );
+ data_sec->set_type( SHT_PROGBITS );
+ data_sec->set_flags( SHF_ALLOC | SHF_WRITE );
+ data_sec->set_addr_align( 0x4 );
+
+ char data[] = { '\x48', '\x65', '\x6C', '\x6C', '\x6F', // msg: db 'Hello, World!', 10
+ '\x2C', '\x20', '\x57', '\x6F', '\x72',
+ '\x6C', '\x64', '\x21', '\x0A'
+ };
+ data_sec->set_data( data, sizeof( data ) );
+
+ segment* data_seg = writer.segments.add();
+ data_seg->set_type( PT_LOAD );
+ data_seg->set_virtual_address( 0x08048020 );
+ data_seg->set_physical_address( 0x08048020 );
+ data_seg->set_flags( PF_W | PF_R );
+ data_seg->set_align( 0x10 );
+ data_seg->add_section_index( data_sec->get_index(), data_sec->get_addr_align() );
+
+ section* note_sec = writer.sections.add( ".note" );
+ note_sec->set_type( SHT_NOTE );
+ note_sec->set_addr_align( 1 );
+ note_section_accessor note_writer( writer, note_sec );
+ note_writer.add_note( 0x01, "Created by ELFIO", 0, 0 );
+ char descr[6] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36};
+ note_writer.add_note( 0x01, "Never easier!", descr, sizeof( descr ) );
+
+ // Create ELF file
+ writer.set_entry( 0x08048000 );
+
+ writer.save( filename );
+
+ return true;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( write_exe_i386_32 )
+{
+ const std::string generated_file ( "../elf_examples/write_exe_i386_32" );
+ const std::string reference_file ( "../elf_examples/write_exe_i386_32_match" );
+ BOOST_CHECK_EQUAL( true, write_exe_i386( generated_file, false ) );
+ output_test_stream output( reference_file, true, false );
+ std::ifstream input( generated_file, std::ios::binary );
+ output << input.rdbuf();
+ BOOST_CHECK_MESSAGE( output.match_pattern(), "Comparing " + generated_file + " and " + reference_file );
+}
+
+enum Tests { SEG_ALIGN = 1 };
+
+void checkObjestsAreEqual( std::string file_name1, std::string file_name2 )
+{
+ elfio file1;
+ elfio file2;
+ BOOST_REQUIRE_EQUAL( file1.load( file_name1 ), true );
+ BOOST_CHECK_EQUAL( file1.save( file_name2 ), true );
+ BOOST_REQUIRE_EQUAL( file1.load( file_name1 ), true );
+ BOOST_REQUIRE_EQUAL( file2.load( file_name2 ), true );
+
+ for (int i = 0; i < file1.sections.size(); ++i ) {
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_address(),
+ file2.sections[i]->get_address() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_addr_align(),
+ file2.sections[i]->get_addr_align() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_entry_size(),
+ file2.sections[i]->get_entry_size() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_flags(),
+ file2.sections[i]->get_flags() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_index(),
+ file2.sections[i]->get_index() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_info(),
+ file2.sections[i]->get_info() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_link(),
+ file2.sections[i]->get_link() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_name(),
+ file2.sections[i]->get_name() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_name_string_offset(),
+ file2.sections[i]->get_name_string_offset() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_size(),
+ file2.sections[i]->get_size() );
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_type(),
+ file2.sections[i]->get_type() );
+
+
+ if ( file1.sections[i]->get_type() == SHT_NULL ||
+ file1.sections[i]->get_type() == SHT_NOBITS ) {
+ continue;
+ }
+ BOOST_REQUIRE_NE( file1.sections[i]->get_data(), (const char*)0 );
+ BOOST_REQUIRE_NE( file2.sections[i]->get_data(), (const char*)0 );
+ std::string pdata1( file1.sections[i]->get_data(),
+ file1.sections[i]->get_data() +
+ file1.sections[i]->get_size() );
+ std::string pdata2( file2.sections[i]->get_data(),
+ file2.sections[i]->get_data() +
+ file2.sections[i]->get_size() );
+
+ BOOST_CHECK_EQUAL( file1.sections[i]->get_size(),
+ file2.sections[i]->get_size() );
+ if ( ( file2.sections[i]->get_type() != SHT_NULL ) &&
+ ( file2.sections[i]->get_type() != SHT_NOBITS ) ) {
+ BOOST_CHECK_EQUAL_COLLECTIONS( pdata1.begin(), pdata1.end(),
+ pdata2.begin(), pdata2.end() );
+ }
+ }
+}
+
+
+void checkExeAreEqual( std::string file_name1, std::string file_name2, int skipTests = 0 )
+{
+ checkObjestsAreEqual( file_name1, file_name2 );
+
+ elfio file1;
+ elfio file2;
+
+ BOOST_REQUIRE_EQUAL( file1.load( file_name1 ), true );
+ BOOST_REQUIRE_EQUAL( file2.load( file_name2 ), true );
+
+ for (int i = 0; i < file1.segments.size(); ++i ) {
+ if ( !(skipTests & SEG_ALIGN) )
+ BOOST_CHECK_EQUAL( file1.segments[i]->get_align(),
+ file2.segments[i]->get_align() );
+ BOOST_CHECK_EQUAL( file1.segments[i]->get_file_size(),
+ file2.segments[i]->get_file_size() );
+ BOOST_CHECK_EQUAL( file1.segments[i]->get_memory_size(),
+ file2.segments[i]->get_memory_size() );
+ BOOST_CHECK_EQUAL( file1.segments[i]->get_type(),
+ file2.segments[i]->get_type() );
+
+ // skip data comparisons of the program header and of empty segments
+ if( file1.segments[i]->get_type() == PT_PHDR || !file1.segments[i]->get_file_size() )
+ continue;
+
+ BOOST_REQUIRE_NE( file1.segments[i]->get_data(), (const char*)0 );
+ BOOST_REQUIRE_NE( file2.segments[i]->get_data(), (const char*)0 );
+
+ std::string pdata1( file1.segments[i]->get_data(),
+ file1.segments[i]->get_data() +
+ file1.segments[i]->get_file_size() );
+ std::string pdata2( file2.segments[i]->get_data(),
+ file2.segments[i]->get_data() +
+ file2.segments[i]->get_file_size() );
+
+ // truncate the data if the header and the segment table is
+ // part of the segment
+ Elf64_Off afterPHDR = file1.get_segments_offset() +
+ file1.get_segment_entry_size() * file1.segments.size();
+ if( file1.segments[i]->get_offset() < afterPHDR ) {
+ pdata1 = pdata1.substr( (unsigned int)afterPHDR );
+ pdata2 = pdata2.substr( (unsigned int)afterPHDR );
+ }
+
+ BOOST_CHECK_EQUAL_COLLECTIONS( pdata1.begin(), pdata1.end(),
+ pdata2.begin(), pdata2.end() );
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( elf_object_copy_32 )
+{
+ checkObjestsAreEqual( "../elf_examples/hello_32.o",
+ "../elf_examples/hello_32_copy.o" );
+ checkObjestsAreEqual( "../elf_examples/hello_64.o",
+ "../elf_examples/hello_64_copy.o" );
+ checkObjestsAreEqual( "../elf_examples/test_ppc.o",
+ "../elf_examples/test_ppc_copy.o" );
+ checkObjestsAreEqual( "../elf_examples/write_obj_i386_32.o",
+ "../elf_examples/write_obj_i386_32_copy.o" );
+ checkObjestsAreEqual( "../elf_examples/write_obj_i386_64.o",
+ "../elf_examples/write_obj_i386_64_copy.o" );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( section_header_address_update )
+{
+ elfio reader;
+
+ const std::string file_w_addr ( "../elf_examples/write_exe_i386_32_w_addr" );
+ write_exe_i386( file_w_addr, false, true, 0x08048100 );
+ reader.load( file_w_addr );
+ section* sec = reader.sections[".text"];
+ BOOST_REQUIRE_NE( sec, (section*)0 );
+ BOOST_CHECK_EQUAL( sec->get_address(), 0x08048100 );
+
+
+ const std::string file_wo_addr ( "../elf_examples/write_exe_i386_32_wo_addr" );
+ write_exe_i386( file_wo_addr, false, false, 0 );
+ reader.load( file_wo_addr );
+ sec = reader.sections[".text"];
+ BOOST_REQUIRE_NE( sec, (section*)0 );
+ BOOST_CHECK_EQUAL( sec->get_address(), 0x08048000 );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( elfio_copy )
+{
+ elfio e;
+
+ const std::string filename ( "../elf_examples/write_exe_i386_32_section_added" );
+ write_exe_i386( filename, false, true, 0x08048100 );
+
+ e.load( filename );
+ Elf_Half num = e.sections.size();
+ //section* new_sec =
+ e.sections.add( "new" );
+ e.save( filename );
+ BOOST_CHECK_EQUAL( num + 1, e.sections.size() );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( elf_exe_copy_64 )
+{
+ checkExeAreEqual( "../elf_examples/64bitLOAD.elf",
+ "../elf_examples/64bitLOAD_copy.elf" );
+ checkExeAreEqual( "../elf_examples/asm64",
+ "../elf_examples/asm64_copy" );
+ checkExeAreEqual( "../elf_examples/hello_64",
+ "../elf_examples/hello_64_copy" );
+
+ // The last segment (GNU_RELRO) is bigger than necessary.
+ // I don't see why but it contains a few bits of the .got.plt section.
+ // -> load, store, compare cycle fails
+// checkExeAreEqual( "../elf_examples/main",
+// "../elf_examples/main_copy" );
+// checkExeAreEqual( "../elf_examples/ls",
+// "../elf_examples/ls_copy" );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( elf_exe_copy_32 )
+{
+ checkExeAreEqual( "../elf_examples/asm",
+ "../elf_examples/asm_copy" );
+ checkExeAreEqual( "../elf_examples/arm_v7m_test_debug.elf",
+ "../elf_examples/arm_v7m_test_debug_copy.elf" );
+ checkExeAreEqual( "../elf_examples/arm_v7m_test_release.elf",
+ "../elf_examples/arm_v7m_test_release_copy.elf" );
+ checkExeAreEqual( "../elf_examples/hello_32",
+ "../elf_examples/hello_32_copy" );
+ checkExeAreEqual( "../elf_examples/hello_arm",
+ "../elf_examples/hello_arm_copy" );
+ checkExeAreEqual( "../elf_examples/hello_arm_stripped",
+ "../elf_examples/hello_arm_stripped_copy" );
+ checkExeAreEqual( "../elf_examples/read_write_arm_elf32_input",
+ "../elf_examples/read_write_arm_elf32_input_copy" );
+ checkExeAreEqual( "../elf_examples/test_ppc",
+ "../elf_examples/test_ppc_copy" );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+BOOST_AUTO_TEST_CASE( elf_exe_loadsave_ppc32big3 )
+{
+ std::string in = "../elf_examples/ppc-32bit-specimen3.elf";
+ std::string out = "../elf_examples/ppc-32bit-testcopy3.elf";
+ elfio elf;
+ BOOST_REQUIRE_EQUAL( elf.load( in ), true );
+ BOOST_REQUIRE_EQUAL( elf.save( out ), true );
+
+ checkObjestsAreEqual( in, out);
+ checkExeAreEqual( in, out, SEG_ALIGN );
+}
+
diff --git a/utils/bcmregtool/elfio/ELFIOTest/Makefile.am b/utils/bcmregtool/elfio/ELFIOTest/Makefile.am
new file mode 100644
index 0000000..362342e
--- /dev/null
+++ b/utils/bcmregtool/elfio/ELFIOTest/Makefile.am
@@ -0,0 +1,6 @@
+AM_CPPFLAGS = -I$(top_srcdir)
+bin_PROGRAMS = ELFIOTest
+ELFIOTest_SOURCES = ELFIOTest.cpp ELFIOTest1.cpp
+ELFIOTest_LDADD = -lboost_unit_test_framework
+
+TESTS=runELFtests
diff --git a/utils/bcmregtool/elfio/ELFIOTest/Makefile.in b/utils/bcmregtool/elfio/ELFIOTest/Makefile.in
new file mode 100644
index 0000000..2be11cc
--- /dev/null
+++ b/utils/bcmregtool/elfio/ELFIOTest/Makefile.in
@@ -0,0 +1,934 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = ELFIOTest$(EXEEXT)
+subdir = ELFIOTest
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_ELFIOTest_OBJECTS = ELFIOTest.$(OBJEXT) ELFIOTest1.$(OBJEXT)
+ELFIOTest_OBJECTS = $(am_ELFIOTest_OBJECTS)
+ELFIOTest_DEPENDENCIES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+SOURCES = $(ELFIOTest_SOURCES)
+DIST_SOURCES = $(ELFIOTest_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \
+ $(top_srcdir)/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)
+ELFIOTest_SOURCES = ELFIOTest.cpp ELFIOTest1.cpp
+ELFIOTest_LDADD = -lboost_unit_test_framework
+TESTS = runELFtests
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ELFIOTest/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign ELFIOTest/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+ELFIOTest$(EXEEXT): $(ELFIOTest_OBJECTS) $(ELFIOTest_DEPENDENCIES) $(EXTRA_ELFIOTest_DEPENDENCIES)
+ @rm -f ELFIOTest$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(ELFIOTest_OBJECTS) $(ELFIOTest_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ELFIOTest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ELFIOTest1.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS:
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+runELFtests.log: runELFtests
+ @p='runELFtests'; \
+ b='runELFtests'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-binPROGRAMS install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am recheck tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/bcmregtool/elfio/ELFIOTest/runELFtests b/utils/bcmregtool/elfio/ELFIOTest/runELFtests
new file mode 100755
index 0000000..2c94c3c
--- /dev/null
+++ b/utils/bcmregtool/elfio/ELFIOTest/runELFtests
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+# ELFIOTest requires to have the current working directory here,
+# otherwise it would not find its test files
+cd `dirname $0`
+./ELFIOTest
diff --git a/utils/bcmregtool/elfio/INSTALL b/utils/bcmregtool/elfio/INSTALL
new file mode 100644
index 0000000..b3cbb7a
--- /dev/null
+++ b/utils/bcmregtool/elfio/INSTALL
@@ -0,0 +1,15 @@
+ELFIO is a header-only C++ library - installation does not require any
+(pre)compilation step. Just copy 'elfio' folder into standard include directory.
+
+For example:
+ cp -R elfio /usr/include
+
+Alternatively, it is possible to modify compiler's include search path -
+'-I<dir>' option in GCC; '/I<dir>' in MSVC.
+
+Makefile(s) that come with the distribution package are provided for
+example files compilation only.
+
+To compile the examples, use the commands below:
+ ./configure
+ make
diff --git a/utils/bcmregtool/elfio/Makefile.am b/utils/bcmregtool/elfio/Makefile.am
new file mode 100644
index 0000000..dd2a4b4
--- /dev/null
+++ b/utils/bcmregtool/elfio/Makefile.am
@@ -0,0 +1,11 @@
+SUBDIRS = examples
+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/elfio_dump.hpp
+EXTRA_DIST = doc/site/elfio.pdf
+dist-hook:
+ mv $(distdir)/doc/site/elfio.pdf $(distdir)/doc
+ rm -Rf $(distdir)/doc/site
diff --git a/utils/bcmregtool/elfio/Makefile.in b/utils/bcmregtool/elfio/Makefile.in
new file mode 100644
index 0000000..0595dac
--- /dev/null
+++ b/utils/bcmregtool/elfio/Makefile.in
@@ -0,0 +1,816 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(nobase_include_HEADERS) \
+ $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(includedir)"
+HEADERS = $(nobase_include_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in AUTHORS COPYING ChangeLog \
+ INSTALL NEWS README depcomp install-sh missing
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = examples
+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/elfio_dump.hpp
+
+EXTRA_DIST = doc/site/elfio.pdf
+all: all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+install-nobase_includeHEADERS: $(nobase_include_HEADERS)
+ @$(NORMAL_INSTALL)
+ @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'"; \
+ $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \
+ echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \
+ $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \
+ done
+
+uninstall-nobase_includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
+ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
+ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @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; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(includedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-nobase_includeHEADERS
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-nobase_includeHEADERS
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--refresh check check-am clean clean-cscope clean-generic \
+ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
+ dist-zip distcheck distclean distclean-generic distclean-tags \
+ distcleancheck distdir distuninstallcheck dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-nobase_includeHEADERS \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+ tags-am uninstall uninstall-am uninstall-nobase_includeHEADERS
+
+.PRECIOUS: Makefile
+
+dist-hook:
+ mv $(distdir)/doc/site/elfio.pdf $(distdir)/doc
+ rm -Rf $(distdir)/doc/site
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/bcmregtool/elfio/NEWS b/utils/bcmregtool/elfio/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/utils/bcmregtool/elfio/NEWS
diff --git a/utils/bcmregtool/elfio/README b/utils/bcmregtool/elfio/README
new file mode 100644
index 0000000..dcf01f1
--- /dev/null
+++ b/utils/bcmregtool/elfio/README
@@ -0,0 +1,4 @@
+ELFIO is a header-only C++ library intended for reading and generating
+files in the ELF binary format. It is used as a standalone library - it is not
+dependant on any other product or project. Adhering to ISO C++, it compiles on
+a wide variety of architectures and compilers.
diff --git a/utils/bcmregtool/elfio/aclocal.m4 b/utils/bcmregtool/elfio/aclocal.m4
new file mode 100644
index 0000000..e39c0ca
--- /dev/null
+++ b/utils/bcmregtool/elfio/aclocal.m4
@@ -0,0 +1,1088 @@
+# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.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'.])])
+
+# Copyright (C) 2002-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.15'
+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.15.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_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.15.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/utils/bcmregtool/elfio/autogen.sh b/utils/bcmregtool/elfio/autogen.sh
new file mode 100755
index 0000000..ab3aee3
--- /dev/null
+++ b/utils/bcmregtool/elfio/autogen.sh
@@ -0,0 +1 @@
+autoreconf --install
diff --git a/utils/bcmregtool/elfio/configure b/utils/bcmregtool/elfio/configure
new file mode 100755
index 0000000..67a8635
--- /dev/null
+++ b/utils/bcmregtool/elfio/configure
@@ -0,0 +1,4412 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for ELFIO 3.3.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+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
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+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 / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ 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 :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $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
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ 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).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... 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 -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='ELFIO'
+PACKAGE_TARNAME='elfio'
+PACKAGE_VERSION='3.3'
+PACKAGE_STRING='ELFIO 3.3'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CXX
+CPPFLAGS
+LDFLAGS
+CXXFLAGS
+CXX
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+runstatedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_dependency_tracking
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CXX
+CXXFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CCC'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir runstatedir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures ELFIO 3.3 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/elfio]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of ELFIO 3.3:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+
+Some influential environment variables:
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+ELFIO configure 3.3
+generated by GNU Autoconf 2.69
+
+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
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by ELFIO $as_me 3.3, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am__api_version='1.15'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ 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.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ 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) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='elfio'
+ VERSION='3.3'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+ fi
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5
+$as_echo_n "checking whether the C++ compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C++ compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5
+$as_echo_n "checking for C++ compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+depcc="$CXX" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CXX_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+fi
+
+
+ac_config_files="$ac_config_files Makefile examples/Makefile examples/elfdump/Makefile examples/tutorial/Makefile examples/writer/Makefile examples/anonymizer/Makefile examples/write_obj/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... 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 -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# 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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by ELFIO $as_me 3.3, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+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 3.3
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+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."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h | --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+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
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+ "examples/elfdump/Makefile") CONFIG_FILES="$CONFIG_FILES examples/elfdump/Makefile" ;;
+ "examples/tutorial/Makefile") CONFIG_FILES="$CONFIG_FILES examples/tutorial/Makefile" ;;
+ "examples/writer/Makefile") CONFIG_FILES="$CONFIG_FILES examples/writer/Makefile" ;;
+ "examples/anonymizer/Makefile") CONFIG_FILES="$CONFIG_FILES examples/anonymizer/Makefile" ;;
+ "examples/write_obj/Makefile") CONFIG_FILES="$CONFIG_FILES examples/write_obj/Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/utils/bcmregtool/elfio/configure.ac b/utils/bcmregtool/elfio/configure.ac
new file mode 100644
index 0000000..741bfc9
--- /dev/null
+++ b/utils/bcmregtool/elfio/configure.ac
@@ -0,0 +1,13 @@
+AC_INIT([ELFIO], [3.3])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
+AC_PROG_CXX
+AC_CONFIG_FILES([
+ Makefile
+ examples/Makefile
+ examples/elfdump/Makefile
+ examples/tutorial/Makefile
+ examples/writer/Makefile
+ examples/anonymizer/Makefile
+ examples/write_obj/Makefile
+])
+AC_OUTPUT
diff --git a/utils/bcmregtool/elfio/cygwin/elfio.cygport b/utils/bcmregtool/elfio/cygwin/elfio.cygport
new file mode 100644
index 0000000..024b886
--- /dev/null
+++ b/utils/bcmregtool/elfio/cygwin/elfio.cygport
@@ -0,0 +1,38 @@
+inherit python python3
+
+NAME="ELFIO"
+VERSION=3.3
+RELEASE=1
+CATEGORY="Devel System Libs"
+SUMMARY="ELFIO is a header-only C++ library intended for reading and generating
+files in the ELF binary format"
+DESCRIPTION="ELFIO is a small, header-only C++ library that provides a simple
+interface for reading and generating files in ELF binary format. It is used
+as a standalone library - it is not dependant on any other product or project.
+Adhering to ISO C++, it compiles on a wide variety of architectures
+and compilers."
+
+HOMEPAGE="http://elfio.sourceforge.net/"
+SRC_URI="https://sourceforge.net/projects/elfio/files/ELFIO-sources/${PN}-${PV}/elfio-${PV}.tar.gz"
+SRC_DIR="${PN}-${PV}"
+
+PKG_NAMES="ELFIO"
+ELFIO_REQUIRES="cygwin"
+ELFIO_CONTENTS="usr/include/ usr/share/${PN}"
+ELFIO_DOCS='AUTHORS COPYING README doc/elfio.pdf'
+
+src_compile() {
+ cd ${B}
+}
+
+src_install() {
+ cd ${B}
+ dodir /usr/include
+ cp -r ${S}/elfio ${D}/usr/include/
+
+ dodir /usr/share/${PN}
+ cp -r ${S}/configure ${S}/depcomp ${S}/install-sh ${S}/missing \
+ ${S}/configure.ac ${S}/Makefile.am ${S}/Makefile.in ${S}/aclocal.m4 \
+ ${S}/examples \
+ ${D}/usr/share/${PN}
+}
diff --git a/utils/bcmregtool/elfio/depcomp b/utils/bcmregtool/elfio/depcomp
new file mode 100755
index 0000000..bd0ac08
--- /dev/null
+++ b/utils/bcmregtool/elfio/depcomp
@@ -0,0 +1,688 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2011-12-04.11; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
+# 2011 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by `PROGRAMS ARGS'.
+ object Object file output by `PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> "$depfile"
+ echo >> "$depfile"
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts `$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler understands `-MD -MF file'. However on
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want:
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using \ :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+ sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add `dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in `foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mechanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+ # compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test "$stat" = 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/ \1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/ /
+ G
+ p
+}' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for `:'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+ "$@" $dashmflag |
+ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/utils/bcmregtool/elfio/doc/elfio.docx b/utils/bcmregtool/elfio/doc/elfio.docx
new file mode 100644
index 0000000..d49d8ba
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/elfio.docx
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/annot-close.png b/utils/bcmregtool/elfio/doc/images/annot-close.png
new file mode 100644
index 0000000..b9e1a0d
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/annot-close.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/annot-open.png b/utils/bcmregtool/elfio/doc/images/annot-open.png
new file mode 100644
index 0000000..71040ec
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/annot-open.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/blank.png b/utils/bcmregtool/elfio/doc/images/blank.png
new file mode 100644
index 0000000..764bf4f
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/blank.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/1.gif b/utils/bcmregtool/elfio/doc/images/callouts/1.gif
new file mode 100644
index 0000000..9e7a87f
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/1.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/1.png b/utils/bcmregtool/elfio/doc/images/callouts/1.png
new file mode 100644
index 0000000..7d47343
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/1.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/1.svg b/utils/bcmregtool/elfio/doc/images/callouts/1.svg
new file mode 100644
index 0000000..e80c55b
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/1.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M10.428,10.411h0.56c3.78,0,4.788-1.96,4.872-3.444h3.22v19.88h-3.92V13.154h-4.732V10.411z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/10.gif b/utils/bcmregtool/elfio/doc/images/callouts/10.gif
new file mode 100644
index 0000000..e80f7f8
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/10.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/10.png b/utils/bcmregtool/elfio/doc/images/callouts/10.png
new file mode 100644
index 0000000..997bbc8
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/10.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/10.svg b/utils/bcmregtool/elfio/doc/images/callouts/10.svg
new file mode 100644
index 0000000..ee80861
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/10.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.815,10.758h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76v17.04h-3.36V13.11H3.815V10.758z"/>
+ <path style="fill:#FFFFFF;" d="M22.175,7.806c4.009,0,5.904,2.76,5.904,8.736c0,5.975-1.896,8.76-5.904,8.76
+ c-4.008,0-5.904-2.785-5.904-8.76C16.271,10.566,18.167,7.806,22.175,7.806z M22.175,22.613c1.921,0,2.448-1.68,2.448-6.071
+ c0-4.393-0.527-6.049-2.448-6.049c-1.92,0-2.448,1.656-2.448,6.049C19.727,20.934,20.255,22.613,22.175,22.613z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/11.gif b/utils/bcmregtool/elfio/doc/images/callouts/11.gif
new file mode 100644
index 0000000..67f91a2
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/11.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/11.png b/utils/bcmregtool/elfio/doc/images/callouts/11.png
new file mode 100644
index 0000000..ce47dac
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/11.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/11.svg b/utils/bcmregtool/elfio/doc/images/callouts/11.svg
new file mode 100644
index 0000000..413ce48
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/11.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M5.209,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H5.209V10.412z"/>
+ <path style="fill:#FFFFFF;" d="M18.553,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.359V12.764h-4.056V10.412z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/12.gif b/utils/bcmregtool/elfio/doc/images/callouts/12.gif
new file mode 100644
index 0000000..54c4b42
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/12.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/12.png b/utils/bcmregtool/elfio/doc/images/callouts/12.png
new file mode 100644
index 0000000..31daf4e
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/12.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/12.svg b/utils/bcmregtool/elfio/doc/images/callouts/12.svg
new file mode 100644
index 0000000..319f65b
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/12.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M4.813,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H4.813V10.412z"/>
+ <path style="fill:#FFFFFF;" d="M17.316,13.484c0-5.545,4.056-6.024,5.568-6.024c3.265,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.553,5.544c-2.256,1.584-3.432,2.353-3.815,3.145h7.392V24.5h-11.64c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.353-2.424c-2.352,0-2.423,1.944-2.447,3.192H17.316z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/13.gif b/utils/bcmregtool/elfio/doc/images/callouts/13.gif
new file mode 100644
index 0000000..dd5d7d9
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/13.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/13.png b/utils/bcmregtool/elfio/doc/images/callouts/13.png
new file mode 100644
index 0000000..14021a8
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/13.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/13.svg b/utils/bcmregtool/elfio/doc/images/callouts/13.svg
new file mode 100644
index 0000000..bd67131
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/13.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.813,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H3.813V10.412z"/>
+ <path style="fill:#FFFFFF;" d="M20.611,14.636h0.529c1.008,0,2.855-0.096,2.855-2.304c0-0.624-0.288-2.185-2.137-2.185
+ c-2.303,0-2.303,2.185-2.303,2.784h-3.12c0-3.191,1.8-5.472,5.64-5.472c2.279,0,5.279,1.152,5.279,4.752
+ c0,1.728-1.08,2.808-2.039,3.24V15.5c0.6,0.168,2.568,1.056,2.568,3.96c0,3.216-2.377,5.496-5.809,5.496
+ c-1.607,0-5.928-0.36-5.928-5.688h3.288l-0.024,0.024c0,0.912,0.24,2.976,2.496,2.976c1.344,0,2.52-0.911,2.52-2.808
+ c0-2.328-2.256-2.424-3.816-2.424V14.636z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/14.gif b/utils/bcmregtool/elfio/doc/images/callouts/14.gif
new file mode 100644
index 0000000..3d7a952
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/14.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/14.png b/utils/bcmregtool/elfio/doc/images/callouts/14.png
new file mode 100644
index 0000000..64014b7
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/14.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/14.svg b/utils/bcmregtool/elfio/doc/images/callouts/14.svg
new file mode 100644
index 0000000..025770d
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/14.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M4.146,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H4.146V10.412z"/>
+ <path style="fill:#FFFFFF;" d="M28.457,20.732h-1.896V24.5h-3.36v-3.768h-6.72v-2.904L22.746,7.46h3.815v10.656h1.896V20.732z
+ M23.201,18.116c0-4.128,0.072-6.792,0.072-7.32h-0.048l-4.272,7.32H23.201z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/15.gif b/utils/bcmregtool/elfio/doc/images/callouts/15.gif
new file mode 100644
index 0000000..1c9183d
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/15.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/15.png b/utils/bcmregtool/elfio/doc/images/callouts/15.png
new file mode 100644
index 0000000..0d65765
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/15.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/15.svg b/utils/bcmregtool/elfio/doc/images/callouts/15.svg
new file mode 100644
index 0000000..52d6284
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/15.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.479,11.079h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76v17.04h-3.36V13.43H3.479V11.079z"/>
+ <path style="fill:#FFFFFF;" d="M19.342,14.943c0.625-0.433,1.392-0.937,3.048-0.937c2.279,0,5.16,1.584,5.16,5.496
+ c0,2.328-1.176,6.121-6.192,6.121c-2.664,0-5.376-1.584-5.544-5.016h3.36c0.144,1.391,0.888,2.326,2.376,2.326
+ c1.607,0,2.544-1.367,2.544-3.191c0-1.512-0.72-3.047-2.496-3.047c-0.456,0-1.608,0.023-2.256,1.223l-3-0.143l1.176-9.361h9.36
+ v2.832h-6.937L19.342,14.943z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/16.svg b/utils/bcmregtool/elfio/doc/images/callouts/16.svg
new file mode 100644
index 0000000..2f8386a
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/16.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.813,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H3.813V10.412z"/>
+ <path style="fill:#FFFFFF;" d="M24.309,11.78c-0.097-0.96-0.721-1.633-1.969-1.633c-2.184,0-2.688,2.496-2.808,4.704L19.58,14.9
+ c0.456-0.624,1.296-1.416,3.191-1.416c3.529,0,5.209,2.712,5.209,5.256c0,3.72-2.28,6.216-5.568,6.216
+ c-5.16,0-6.168-4.32-6.168-8.568c0-3.24,0.432-8.928,6.336-8.928c0.695,0,2.641,0.264,3.48,1.104
+ c0.936,0.912,1.271,1.416,1.584,3.217H24.309z M22.172,16.172c-1.271,0-2.568,0.792-2.568,2.928c0,1.849,1.056,3.168,2.664,3.168
+ c1.225,0,2.353-0.936,2.353-3.239C24.62,16.868,23.229,16.172,22.172,16.172z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/17.svg b/utils/bcmregtool/elfio/doc/images/callouts/17.svg
new file mode 100644
index 0000000..ccd31f6
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/17.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.479,11.079h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76v17.04h-3.36V13.43H3.479V11.079z"/>
+ <path style="fill:#FFFFFF;" d="M27.838,11.006c-1.631,1.776-5.807,6.816-6.215,14.16h-3.457c0.36-6.816,4.632-12.24,6.072-13.776
+ h-8.472l0.072-2.976h12V11.006z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/18.svg b/utils/bcmregtool/elfio/doc/images/callouts/18.svg
new file mode 100644
index 0000000..fcd493d
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/18.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M4.813,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H4.813V10.412z"/>
+ <path style="fill:#FFFFFF;" d="M23.172,24.956c-4.392,0-5.904-2.856-5.904-5.185c0-0.863,0-3.119,2.592-4.319
+ c-1.344-0.672-2.064-1.752-2.064-3.336c0-2.904,2.328-4.656,5.304-4.656c3.528,0,5.4,2.088,5.4,4.44
+ c0,1.464-0.6,2.712-1.968,3.432c1.632,0.815,2.544,1.896,2.544,4.104C29.076,21.596,27.684,24.956,23.172,24.956z M23.124,16.916
+ c-1.224,0-2.4,0.792-2.4,2.64c0,1.632,0.936,2.712,2.472,2.712c1.752,0,2.424-1.512,2.424-2.688
+ C25.62,18.38,24.996,16.916,23.124,16.916z M25.284,12.26c0-1.296-0.888-2.112-1.968-2.112c-1.512,0-2.305,0.864-2.305,2.112
+ c0,1.008,0.744,2.112,2.185,2.112C24.516,14.372,25.284,13.484,25.284,12.26z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/19.svg b/utils/bcmregtool/elfio/doc/images/callouts/19.svg
new file mode 100644
index 0000000..8225076
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/19.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M4.146,10.746h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76v17.041h-3.36V13.097H4.146V10.746z"/>
+ <path style="fill:#FFFFFF;" d="M20.225,20.898v0.023c0.192,1.176,0.936,1.68,1.968,1.68c1.392,0,2.783-1.176,2.808-4.752
+ l-0.048-0.049c-0.768,1.152-2.088,1.441-3.24,1.441c-3.264,0-5.16-2.473-5.16-5.329c0-4.176,2.472-6.12,5.808-6.12
+ c5.904,0,6,6.36,6,8.76c0,6.601-3.12,8.736-6.192,8.736c-2.904,0-4.992-1.68-5.28-4.391H20.225z M22.434,16.553
+ c1.176,0,2.472-0.84,2.472-2.855c0-1.944-0.841-3.145-2.568-3.145c-0.864,0-2.424,0.433-2.424,2.88
+ C19.913,16.001,21.161,16.553,22.434,16.553z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/2.gif b/utils/bcmregtool/elfio/doc/images/callouts/2.gif
new file mode 100644
index 0000000..94d42a3
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/2.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/2.png b/utils/bcmregtool/elfio/doc/images/callouts/2.png
new file mode 100644
index 0000000..5d09341
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/2.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/2.svg b/utils/bcmregtool/elfio/doc/images/callouts/2.svg
new file mode 100644
index 0000000..8016120
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/2.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M9.668,12.328c0-6.469,4.732-7.028,6.496-7.028c3.808,0,6.833,2.24,6.833,6.271
+ c0,3.416-2.213,5.152-4.145,6.469c-2.632,1.848-4.004,2.744-4.452,3.668h8.624v3.472H9.444c0.14-2.324,0.308-4.76,4.62-7.896
+ c3.584-2.604,5.012-3.612,5.012-5.853c0-1.315-0.84-2.828-2.744-2.828c-2.744,0-2.828,2.269-2.856,3.725H9.668z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/20.svg b/utils/bcmregtool/elfio/doc/images/callouts/20.svg
new file mode 100644
index 0000000..48b86ca
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/20.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
+ <path style="fill:#FFFFFF;" d="M23.172,7.46c4.008,0,5.904,2.76,5.904,8.736c0,5.976-1.896,8.76-5.904,8.76
+ s-5.904-2.784-5.904-8.76C17.268,10.22,19.164,7.46,23.172,7.46z M23.172,22.268c1.92,0,2.448-1.68,2.448-6.071
+ c0-4.393-0.528-6.049-2.448-6.049s-2.448,1.656-2.448,6.049C20.724,20.588,21.252,22.268,23.172,22.268z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/21.svg b/utils/bcmregtool/elfio/doc/images/callouts/21.svg
new file mode 100644
index 0000000..e26a2d7
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/21.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M5.306,13.151c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392v2.976H5.114c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H5.306z"/>
+ <path style="fill:#FFFFFF;" d="M19.49,10.079h0.48c3.239,0,4.104-1.681,4.176-2.952h2.761v17.04h-3.361V12.431H19.49V10.079z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/22.svg b/utils/bcmregtool/elfio/doc/images/callouts/22.svg
new file mode 100644
index 0000000..5e44719
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/22.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
+ <path style="fill:#FFFFFF;" d="M17.316,13.484c0-5.545,4.056-6.024,5.568-6.024c3.265,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.553,5.544c-2.256,1.584-3.432,2.353-3.815,3.145h7.392V24.5h-11.64c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.353-2.424c-2.352,0-2.423,1.944-2.447,3.192H17.316z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/23.svg b/utils/bcmregtool/elfio/doc/images/callouts/23.svg
new file mode 100644
index 0000000..77c709d
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/23.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
+ <path style="fill:#FFFFFF;" d="M21.612,14.636h0.528c1.008,0,2.855-0.096,2.855-2.304c0-0.624-0.287-2.185-2.136-2.185
+ c-2.304,0-2.304,2.185-2.304,2.784h-3.12c0-3.191,1.8-5.472,5.64-5.472c2.28,0,5.28,1.152,5.28,4.752
+ c0,1.728-1.08,2.808-2.04,3.24V15.5c0.6,0.168,2.568,1.056,2.568,3.96c0,3.216-2.377,5.496-5.809,5.496
+ c-1.607,0-5.928-0.36-5.928-5.688h3.288l-0.024,0.024c0,0.912,0.24,2.976,2.496,2.976c1.344,0,2.521-0.911,2.521-2.808
+ c0-2.328-2.257-2.424-3.816-2.424V14.636z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/24.svg b/utils/bcmregtool/elfio/doc/images/callouts/24.svg
new file mode 100644
index 0000000..ecf08fd
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/24.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M4.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H4.78c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H4.972z"/>
+ <path style="fill:#FFFFFF;" d="M30.124,20.732h-1.896V24.5h-3.36v-3.768h-6.72v-2.904L24.412,7.46h3.816v10.656h1.896V20.732z
+ M24.868,18.116c0-4.128,0.071-6.792,0.071-7.32h-0.047l-4.272,7.32H24.868z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/25.svg b/utils/bcmregtool/elfio/doc/images/callouts/25.svg
new file mode 100644
index 0000000..7198800
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/25.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
+ <path style="fill:#FFFFFF;" d="M20.676,14.276c0.624-0.433,1.393-0.937,3.049-0.937c2.279,0,5.16,1.584,5.16,5.496
+ c0,2.328-1.177,6.12-6.193,6.12c-2.664,0-5.375-1.584-5.543-5.016h3.36c0.144,1.392,0.889,2.327,2.376,2.327
+ c1.608,0,2.544-1.367,2.544-3.191c0-1.513-0.72-3.048-2.496-3.048c-0.455,0-1.607,0.023-2.256,1.224l-3-0.144l1.176-9.36h9.36
+ v2.832h-6.937L20.676,14.276z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/26.svg b/utils/bcmregtool/elfio/doc/images/callouts/26.svg
new file mode 100644
index 0000000..cf18de8
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/26.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
+ <path style="fill:#FFFFFF;" d="M25.309,11.78c-0.097-0.96-0.721-1.633-1.969-1.633c-2.184,0-2.688,2.496-2.808,4.704L20.58,14.9
+ c0.456-0.624,1.296-1.416,3.191-1.416c3.529,0,5.209,2.712,5.209,5.256c0,3.72-2.28,6.216-5.568,6.216
+ c-5.16,0-6.168-4.32-6.168-8.568c0-3.24,0.432-8.928,6.336-8.928c0.695,0,2.641,0.264,3.48,1.104
+ c0.936,0.912,1.271,1.416,1.584,3.217H25.309z M23.172,16.172c-1.271,0-2.568,0.792-2.568,2.928c0,1.849,1.056,3.168,2.664,3.168
+ c1.225,0,2.353-0.936,2.353-3.239C25.62,16.868,24.229,16.172,23.172,16.172z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/27.svg b/utils/bcmregtool/elfio/doc/images/callouts/27.svg
new file mode 100644
index 0000000..262daef
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/27.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
+ <path style="fill:#FFFFFF;" d="M29.172,10.34c-1.632,1.776-5.808,6.816-6.216,14.16H19.5c0.36-6.816,4.632-12.24,6.072-13.776
+ H17.1l0.072-2.976h12V10.34z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/28.svg b/utils/bcmregtool/elfio/doc/images/callouts/28.svg
new file mode 100644
index 0000000..e52bc6b
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/28.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
+ <path style="fill:#FFFFFF;" d="M23.172,24.956c-4.392,0-5.904-2.856-5.904-5.185c0-0.863,0-3.119,2.592-4.319
+ c-1.344-0.672-2.064-1.752-2.064-3.336c0-2.904,2.328-4.656,5.304-4.656c3.528,0,5.4,2.088,5.4,4.44
+ c0,1.464-0.6,2.712-1.968,3.432c1.632,0.815,2.544,1.896,2.544,4.104C29.076,21.596,27.684,24.956,23.172,24.956z M23.124,16.916
+ c-1.224,0-2.4,0.792-2.4,2.64c0,1.632,0.936,2.712,2.472,2.712c1.752,0,2.424-1.512,2.424-2.688
+ C25.62,18.38,24.996,16.916,23.124,16.916z M25.284,12.26c0-1.296-0.888-2.112-1.968-2.112c-1.512,0-2.305,0.864-2.305,2.112
+ c0,1.008,0.744,2.112,2.185,2.112C24.516,14.372,25.284,13.484,25.284,12.26z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/29.svg b/utils/bcmregtool/elfio/doc/images/callouts/29.svg
new file mode 100644
index 0000000..9e47e30
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/29.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
+ c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
+ c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
+ <path style="fill:#FFFFFF;" d="M20.893,20.564v0.023c0.191,1.176,0.936,1.68,1.967,1.68c1.393,0,2.785-1.176,2.809-4.752
+ l-0.048-0.048c-0.769,1.152-2.088,1.44-3.24,1.44c-3.264,0-5.16-2.473-5.16-5.328c0-4.176,2.472-6.12,5.807-6.12
+ c5.904,0,6.001,6.36,6.001,8.76c0,6.601-3.12,8.736-6.192,8.736c-2.904,0-4.992-1.68-5.28-4.392H20.893z M23.1,16.22
+ c1.176,0,2.473-0.84,2.473-2.855c0-1.944-0.84-3.145-2.568-3.145c-0.863,0-2.424,0.433-2.424,2.88
+ C20.58,15.668,21.828,16.22,23.1,16.22z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/3.gif b/utils/bcmregtool/elfio/doc/images/callouts/3.gif
new file mode 100644
index 0000000..dd3541a
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/3.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/3.png b/utils/bcmregtool/elfio/doc/images/callouts/3.png
new file mode 100644
index 0000000..ef7b700
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/3.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/3.svg b/utils/bcmregtool/elfio/doc/images/callouts/3.svg
new file mode 100644
index 0000000..fcb52c9
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/3.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M15.127,14.005h0.616c1.176,0,3.332-0.112,3.332-2.688c0-0.728-0.336-2.548-2.492-2.548
+ c-2.688,0-2.688,2.548-2.688,3.248h-3.64c0-3.724,2.1-6.384,6.58-6.384c2.66,0,6.16,1.344,6.16,5.544
+ c0,2.016-1.261,3.276-2.38,3.78v0.056c0.699,0.196,2.996,1.232,2.996,4.62c0,3.752-2.772,6.412-6.776,6.412
+ c-1.876,0-6.916-0.42-6.916-6.636h3.836l-0.028,0.027c0,1.064,0.28,3.473,2.912,3.473c1.568,0,2.94-1.064,2.94-3.276
+ c0-2.716-2.632-2.828-4.452-2.828V14.005z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/30.svg b/utils/bcmregtool/elfio/doc/images/callouts/30.svg
new file mode 100644
index 0000000..3718b17
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/30.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M8.268,14.636h0.528c1.008,0,2.856-0.096,2.856-2.304c0-0.624-0.288-2.185-2.136-2.185
+ c-2.304,0-2.304,2.185-2.304,2.784h-3.12c0-3.191,1.8-5.472,5.64-5.472c2.28,0,5.28,1.152,5.28,4.752
+ c0,1.728-1.08,2.808-2.04,3.24V15.5c0.6,0.168,2.568,1.056,2.568,3.96c0,3.216-2.376,5.496-5.808,5.496
+ c-1.608,0-5.928-0.36-5.928-5.688h3.288l-0.024,0.024c0,0.912,0.24,2.976,2.496,2.976c1.344,0,2.52-0.911,2.52-2.808
+ c0-2.328-2.256-2.424-3.816-2.424V14.636z"/>
+ <path style="fill:#FFFFFF;" d="M23.172,7.46c4.008,0,5.904,2.76,5.904,8.736c0,5.976-1.896,8.76-5.904,8.76
+ s-5.904-2.784-5.904-8.76C17.268,10.22,19.164,7.46,23.172,7.46z M23.172,22.268c1.92,0,2.448-1.68,2.448-6.071
+ c0-4.393-0.528-6.049-2.448-6.049s-2.448,1.656-2.448,6.049C20.724,20.588,21.252,22.268,23.172,22.268z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/4.gif b/utils/bcmregtool/elfio/doc/images/callouts/4.gif
new file mode 100644
index 0000000..4bcbf7e
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/4.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/4.png b/utils/bcmregtool/elfio/doc/images/callouts/4.png
new file mode 100644
index 0000000..adb8364
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/4.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/4.svg b/utils/bcmregtool/elfio/doc/images/callouts/4.svg
new file mode 100644
index 0000000..baeb51e
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/4.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M21.891,20.784h-2.212v4.396h-3.92v-4.396h-7.84v-3.389L15.227,5.3h4.452v12.432h2.212V20.784z
+ M15.759,17.731c0-4.815,0.084-7.924,0.084-8.54h-0.056l-4.984,8.54H15.759z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/5.gif b/utils/bcmregtool/elfio/doc/images/callouts/5.gif
new file mode 100644
index 0000000..1c62b4f
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/5.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/5.png b/utils/bcmregtool/elfio/doc/images/callouts/5.png
new file mode 100644
index 0000000..4d7eb46
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/5.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/5.svg b/utils/bcmregtool/elfio/doc/images/callouts/5.svg
new file mode 100644
index 0000000..0f603b1
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/5.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M14.035,14.252c0.728-0.504,1.624-1.092,3.556-1.092c2.66,0,6.02,1.848,6.02,6.411
+ c0,2.717-1.372,7.141-7.224,7.141c-3.108,0-6.272-1.849-6.468-5.853h3.92c0.168,1.624,1.036,2.717,2.772,2.717
+ c1.876,0,2.968-1.597,2.968-3.725c0-1.764-0.839-3.556-2.912-3.556c-0.532,0-1.876,0.028-2.632,1.428l-3.5-0.168l1.372-10.92
+ h10.919v3.304h-8.092L14.035,14.252z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/6.gif b/utils/bcmregtool/elfio/doc/images/callouts/6.gif
new file mode 100644
index 0000000..23bc555
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/6.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/6.png b/utils/bcmregtool/elfio/doc/images/callouts/6.png
new file mode 100644
index 0000000..0ba694a
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/6.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/6.svg b/utils/bcmregtool/elfio/doc/images/callouts/6.svg
new file mode 100644
index 0000000..335d8c8
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/6.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M19.106,10.673c-0.112-1.12-0.84-1.904-2.296-1.904c-2.548,0-3.136,2.912-3.276,5.488l0.056,0.056
+ c0.532-0.728,1.512-1.651,3.724-1.651c4.116,0,6.077,3.164,6.077,6.131c0,4.34-2.66,7.252-6.497,7.252
+ c-6.02,0-7.196-5.039-7.196-9.996c0-3.78,0.504-10.416,7.392-10.416c0.812,0,3.08,0.308,4.061,1.288
+ c1.092,1.063,1.483,1.652,1.848,3.752H19.106z M16.614,15.797c-1.484,0-2.996,0.924-2.996,3.416c0,2.156,1.232,3.697,3.108,3.697
+ c1.428,0,2.745-1.094,2.745-3.781C19.471,16.609,17.846,15.797,16.614,15.797z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/7.gif b/utils/bcmregtool/elfio/doc/images/callouts/7.gif
new file mode 100644
index 0000000..e55ce89
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/7.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/7.png b/utils/bcmregtool/elfio/doc/images/callouts/7.png
new file mode 100644
index 0000000..472e96f
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/7.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/7.svg b/utils/bcmregtool/elfio/doc/images/callouts/7.svg
new file mode 100644
index 0000000..dc7f310
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/7.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M24.28,9.66c-1.904,2.071-6.776,7.951-7.252,16.52h-4.032c0.42-7.952,5.404-14.28,7.084-16.072
+ h-9.884l0.084-3.472h14V9.66z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/8.gif b/utils/bcmregtool/elfio/doc/images/callouts/8.gif
new file mode 100644
index 0000000..49375e0
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/8.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/8.png b/utils/bcmregtool/elfio/doc/images/callouts/8.png
new file mode 100644
index 0000000..5e60973
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/8.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/8.svg b/utils/bcmregtool/elfio/doc/images/callouts/8.svg
new file mode 100644
index 0000000..f1dcbe6
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/8.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M16.28,26.712c-5.124,0-6.888-3.332-6.888-6.048c0-1.009,0-3.641,3.024-5.04
+ c-1.568-0.784-2.408-2.044-2.408-3.893c0-3.388,2.716-5.432,6.188-5.432c4.116,0,6.3,2.436,6.3,5.18
+ c0,1.708-0.7,3.164-2.296,4.004c1.903,0.952,2.968,2.212,2.968,4.788C23.168,22.792,21.544,26.712,16.28,26.712z M16.224,17.332
+ c-1.428,0-2.8,0.924-2.8,3.08c0,1.903,1.092,3.164,2.884,3.164c2.043,0,2.829-1.765,2.829-3.137
+ C19.137,19.04,18.408,17.332,16.224,17.332z M18.744,11.899c0-1.512-1.036-2.464-2.296-2.464c-1.764,0-2.688,1.008-2.688,2.464
+ c0,1.177,0.868,2.464,2.548,2.464C17.848,14.363,18.744,13.328,18.744,11.899z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/9.gif b/utils/bcmregtool/elfio/doc/images/callouts/9.gif
new file mode 100644
index 0000000..da12a4f
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/9.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/9.png b/utils/bcmregtool/elfio/doc/images/callouts/9.png
new file mode 100644
index 0000000..a0676d2
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/9.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/callouts/9.svg b/utils/bcmregtool/elfio/doc/images/callouts/9.svg
new file mode 100644
index 0000000..1094594
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/callouts/9.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
+ style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
+<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
+<g>
+ <g style="enable-background:new ;">
+ <path style="fill:#FFFFFF;" d="M13.953,21.921v0.027c0.224,1.372,1.092,1.961,2.296,1.961c1.624,0,3.248-1.372,3.276-5.545
+ l-0.057-0.056c-0.896,1.344-2.436,1.68-3.78,1.68c-3.808,0-6.02-2.884-6.02-6.216c0-4.872,2.884-7.14,6.776-7.14
+ c6.888,0,7,7.42,7,10.22c0,7.7-3.641,10.192-7.224,10.192c-3.388,0-5.824-1.96-6.16-5.124H13.953z M16.529,16.853
+ c1.372,0,2.884-0.979,2.884-3.332c0-2.268-0.98-3.668-2.996-3.668c-1.008,0-2.828,0.504-2.828,3.36
+ C13.589,16.209,15.045,16.853,16.529,16.853z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/caution.gif b/utils/bcmregtool/elfio/doc/images/caution.gif
new file mode 100644
index 0000000..d9f5e5b
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/caution.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/caution.png b/utils/bcmregtool/elfio/doc/images/caution.png
new file mode 100644
index 0000000..5b7809c
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/caution.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/caution.svg b/utils/bcmregtool/elfio/doc/images/caution.svg
new file mode 100644
index 0000000..5b662c4
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/caution.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY st0 "fill:#FFFFFF;stroke:none;">
+ <!ENTITY st1 "fill:#FFFFFF;stroke-width:6.6112;stroke-linecap:round;stroke-linejoin:round;">
+ <!ENTITY st2 "stroke:#FFFFFF;stroke-width:6.6112;">
+ <!ENTITY st3 "fill:none;stroke:none;">
+ <!ENTITY st4 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+ <!ENTITY st5 "stroke:none;">
+]>
+<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+ <g id="Layer_x0020_3" style="&st4;">
+ <g>
+ <path style="&st2;" d="M41.7,35.3L26.6,9.4c-0.6-1-1.7-1.7-2.9-1.6c-1.2,0-2.3,0.7-2.9,1.7L6.3,35.4c-0.6,1-0.6,2.3,0,3.3c0.6,1,1.7,1.6,2.9,1.6h29.6c1.2,0,2.3-0.6,2.9-1.7c0.6-1,0.6-2.3,0-3.3z"/>
+ <path style="&st1;" d="M23.7,11L9.2,37h29.6L23.7,11z"/>
+ <path style="&st0;" d="M23.7,11.9L10.3,36.1h27.5l-14-24.1z"/>
+ <g>
+ <path style="&st5;" d="M24.1,34c-1.1,0-1.8-0.8-1.8-1.8c0-1.1,0.7-1.8,1.8-1.8c1.1,0,1.8,0.7,1.8,1.8c0,1-0.7,1.8-1.8,1.8h0z M22.9,29.3l-0.4-9.1h3.2l-0.4,9.1h-2.3z"/>
+ </g>
+ </g>
+ </g>
+ <g id="crop_x0020_marks" style="&st4;">
+ <path style="&st3;" d="M48,48H0V0h48v48z"/>
+ </g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/caution.tif b/utils/bcmregtool/elfio/doc/images/caution.tif
new file mode 100644
index 0000000..4a28294
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/caution.tif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/colorsvg/caution.svg b/utils/bcmregtool/elfio/doc/images/colorsvg/caution.svg
new file mode 100644
index 0000000..7a0db0b
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/colorsvg/caution.svg
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="caution" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<g>
+ <g>
+ <g>
+ <path stroke="#FFFFFF" stroke-width="6.6112" d="M41.629,36.303L26.527,10.403c-0.602-1-1.698-1.7-2.898-1.6
+ c-1.2,0-2.3,0.7-2.9,1.7l-14.5,25.899c-0.6,1-0.6,2.301,0,3.301s1.7,1.6,2.9,1.6h29.599c1.199,0,2.301-0.6,2.899-1.699
+ C42.229,38.604,42.229,37.303,41.629,36.303L41.629,36.303z"/>
+ <g>
+ <path fill="#FFFFFF" stroke="#FFCC00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" d="M23.581,12.003
+ l-14.5,26H38.68L23.581,12.003z"/>
+ <polygon fill="#FFFFFF" stroke="#FFCD00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.582,12.054 9.137,37.953 38.622,37.953 "/>
+ <polygon fill="#FFFFFF" stroke="#FFCE00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.583,12.104 9.193,37.9 38.566,37.9 "/>
+ <polygon fill="#FFFFFF" stroke="#FFCF00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.583,12.153 9.25,37.854 38.508,37.854 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD000" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.584,12.205 9.309,37.805 38.451,37.805 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD100" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.585,12.253 9.364,37.753 38.395,37.753 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD200" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.586,12.304 9.421,37.703 38.337,37.703 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD300" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.587,12.354 9.479,37.652 38.279,37.652 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD400" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.588,12.403 9.537,37.604 38.223,37.604 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD500" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.589,12.455 9.591,37.553 38.166,37.553 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD600" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.591,12.503 9.649,37.503 38.109,37.503 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD700" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.591,12.554 9.707,37.453 38.053,37.453 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD800" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.593,12.604 9.764,37.402 37.996,37.402 "/>
+ <polygon fill="#FFFFFF" stroke="#FFD900" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.594,12.653 9.819,37.354 37.939,37.354 "/>
+ <polygon fill="#FFFFFF" stroke="#FFDA00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.596,12.705 9.876,37.303 37.882,37.303 "/>
+ <polygon fill="#FFFFFF" stroke="#FFDB00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.597,12.753 9.935,37.253 37.824,37.253 "/>
+ <polygon fill="#FFFFFF" stroke="#FFDC00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.599,12.804 9.991,37.203 37.768,37.203 "/>
+ <polygon fill="#FFFFFF" stroke="#FFDD00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.601,12.854 10.047,37.152 37.711,37.152 "/>
+ <polygon fill="#FFFFFF" stroke="#FFDE00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.602,12.903 10.104,37.104 37.654,37.104 "/>
+ <polygon fill="#FFFFFF" stroke="#FFDF00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.603,12.955 10.163,37.053 37.598,37.053 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE000" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.604,13.003 10.218,37.003 37.54,37.003 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE100" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.604,13.054 10.275,36.953 37.482,36.953 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE200" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.605,13.104 10.333,36.902 37.427,36.902 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE300" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.606,13.153 10.389,36.854 37.37,36.854 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE400" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.607,13.205 10.445,36.805 37.312,36.805 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE500" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.608,13.253 10.502,36.753 37.256,36.753 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE600" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.609,13.304 10.561,36.703 37.197,36.703 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE600" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.61,13.354 10.617,36.652 37.143,36.652 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE700" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.611,13.403 10.673,36.604 37.085,36.604 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE800" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.613,13.455 10.73,36.553 37.027,36.553 "/>
+ <polygon fill="#FFFFFF" stroke="#FFE900" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.614,13.503 10.789,36.503 36.971,36.503 "/>
+ <polygon fill="#FFFFFF" stroke="#FFEA00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.616,13.554 10.844,36.453 36.914,36.453 "/>
+ <polygon fill="#FFFFFF" stroke="#FFEB00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.617,13.604 10.901,36.402 36.857,36.402 "/>
+ <polygon fill="#FFFFFF" stroke="#FFEC00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.618,13.653 10.958,36.354 36.8,36.354 "/>
+ <polygon fill="#FFFFFF" stroke="#FFED00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.619,13.705 11.017,36.303 36.742,36.303 "/>
+ <polygon fill="#FFFFFF" stroke="#FFEE00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.622,13.753 11.071,36.253 36.688,36.253 "/>
+ <polygon fill="#FFFFFF" stroke="#FFEF00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.623,13.804 11.129,36.203 36.63,36.203 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF000" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.624,13.854 11.188,36.152 36.572,36.152 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF100" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.625,13.903 11.243,36.104 36.516,36.104 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF200" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.625,13.955 11.299,36.053 36.459,36.053 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF300" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.626,14.003 11.356,36.003 36.4,36.003 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF400" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.627,14.054 11.415,35.953 36.346,35.953 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF500" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.628,14.104 11.471,35.902 36.288,35.902 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF600" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.629,14.153 11.527,35.854 36.232,35.854 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF700" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.63,14.205 11.584,35.805 36.174,35.805 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF800" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.631,14.253 11.643,35.753 36.117,35.753 "/>
+ <polygon fill="#FFFFFF" stroke="#FFF900" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.632,14.304 11.699,35.703 36.061,35.703 "/>
+ <polygon fill="#FFFFFF" stroke="#FFFA00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.633,14.354 11.754,35.652 36.003,35.652 "/>
+ <polygon fill="#FFFFFF" stroke="#FFFB00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.635,14.403 11.812,35.604 35.945,35.604 "/>
+ <polygon fill="#FFFFFF" stroke="#FFFC00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.637,14.455 11.869,35.555 35.891,35.555 "/>
+ <polygon fill="#FFFFFF" stroke="#FFFD00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.638,14.503 11.925,35.503 35.833,35.503 "/>
+ <polygon fill="#FFFFFF" stroke="#FFFE00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 23.639,14.554 11.982,35.453 35.775,35.453 "/>
+ <path fill="#FFFFFF" stroke="#FFFF00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" d="M23.64,14.604
+ l-11.6,20.8h23.678L23.64,14.604z"/>
+ </g>
+ </g>
+
+ <linearGradient id="XMLID_50_" gradientUnits="userSpaceOnUse" x1="395.8457" y1="758.1504" x2="395.8457" y2="785.7822" gradientTransform="matrix(1 0 0 1 -372 -747)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#FFFF00"/>
+ </linearGradient>
+ <path fill="url(#XMLID_50_)" d="M38.891,34.532L26.055,12.519c-0.511-0.85-1.443-1.445-2.462-1.36
+ c-1.02,0-1.955,0.595-2.465,1.445L8.8,34.617c-0.51,0.851-0.51,1.953,0,2.805c0.51,0.852,1.445,1.36,2.465,1.36h25.158
+ c1.021,0,1.956-0.511,2.467-1.445C39.4,36.484,39.4,35.382,38.891,34.532L38.891,34.532z"/>
+ </g>
+ <g>
+ <path d="M23.929,33.948c-1.1,0-1.8-0.8-1.8-1.8c0-1.102,0.7-1.801,1.8-1.801c1.101,0,1.8,0.699,1.8,1.801
+ C25.729,33.148,25.029,33.948,23.929,33.948L23.929,33.948z M22.729,29.248l-0.4-9.1h3.2l-0.399,9.1h-2.297H22.729z"/>
+ </g>
+</g>
+<g id="crop_x0020_marks">
+ <path fill="none" d="M47.93,49.049H-0.071v-48H47.93V49.049z"/>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/colorsvg/home.svg b/utils/bcmregtool/elfio/doc/images/colorsvg/home.svg
new file mode 100644
index 0000000..d6dbc01
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/colorsvg/home.svg
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<g id="Home">
+ <g>
+ <g id="Chimney">
+ <g>
+ <path fill="#660000" d="M30.417,17.563c2.776,2.348,8.258,0.835,7.742,0.434c0-1.2,0-6.9,0-6.9c0-1.2-0.802-2-2-2h-4.802
+ c-1,0-1.698,0.6-1.899,1.5C28.648,9.916,28.359,15.822,30.417,17.563z"/>
+ <path fill="#670000" d="M30.422,17.556c2.771,2.343,8.244,0.833,7.729,0.433c0-1.199,0-6.889,0-6.889
+ c0-1.198-0.799-1.997-1.996-1.997h-4.793c-0.998,0-1.695,0.599-1.896,1.498C28.657,9.921,28.368,15.818,30.422,17.556z"/>
+ <path fill="#680000" d="M30.428,17.548c2.768,2.34,8.229,0.832,7.717,0.432c0-1.196,0-6.876,0-6.876
+ c0-1.196-0.799-1.993-1.994-1.993h-4.783c-0.997,0-1.693,0.598-1.895,1.495C28.665,9.927,28.377,15.813,30.428,17.548z"/>
+ <path fill="#690000" d="M30.434,17.541c2.762,2.336,8.215,0.831,7.703,0.432c0-1.194,0-6.865,0-6.865
+ c0-1.194-0.798-1.989-1.99-1.989H31.37c-0.994,0-1.69,0.596-1.892,1.492C28.674,9.932,28.387,15.809,30.434,17.541z"/>
+ <path fill="#6B0000" d="M30.438,17.533c2.758,2.332,8.203,0.829,7.69,0.431c0-1.192,0-6.853,0-6.853
+ c0-1.192-0.796-1.987-1.987-1.987h-4.768c-0.993,0-1.688,0.596-1.889,1.49C28.682,9.937,28.395,15.804,30.438,17.533z"/>
+ <path fill="#6C0000" d="M30.443,17.525c2.752,2.328,8.188,0.828,7.677,0.43c0-1.19,0-6.841,0-6.841
+ c0-1.19-0.795-1.983-1.983-1.983h-4.76c-0.99,0-1.686,0.595-1.885,1.487C28.689,9.943,28.402,15.799,30.443,17.525z"/>
+ <path fill="#6D0000" d="M30.448,17.518c2.747,2.323,8.174,0.826,7.663,0.429c0-1.188,0-6.829,0-6.829
+ c0-1.188-0.793-1.979-1.979-1.979h-4.751c-0.99,0-1.682,0.593-1.881,1.485C28.698,9.949,28.412,15.795,30.448,17.518z"/>
+ <path fill="#6E0000" d="M30.454,17.51c2.743,2.32,8.159,0.825,7.649,0.429c0-1.187,0-6.818,0-6.818
+ c0-1.186-0.791-1.976-1.977-1.976h-4.744c-0.986,0-1.679,0.592-1.877,1.482C28.707,9.954,28.421,15.791,30.454,17.51z"/>
+ <path fill="#6F0000" d="M30.46,17.503c2.738,2.315,8.146,0.824,7.636,0.427c0-1.184,0-6.806,0-6.806
+ c0-1.184-0.789-1.973-1.972-1.973h-4.735c-0.986,0-1.677,0.592-1.875,1.479C28.715,9.96,28.43,15.786,30.46,17.503z"/>
+ <path fill="#700000" d="M30.465,17.495c2.733,2.312,8.131,0.822,7.623,0.427c0-1.182,0-6.794,0-6.794
+ c0-1.182-0.789-1.969-1.969-1.969h-4.729c-0.983,0-1.673,0.59-1.871,1.477C28.725,9.965,28.438,15.781,30.465,17.495z"/>
+ <path fill="#720000" d="M30.471,17.487c2.729,2.308,8.116,0.821,7.609,0.426c0-1.18,0-6.782,0-6.782
+ c0-1.179-0.787-1.966-1.967-1.966h-4.719c-0.982,0-1.67,0.589-1.867,1.475C28.73,9.97,28.447,15.776,30.471,17.487z"/>
+ <path fill="#730000" d="M30.477,17.48c2.724,2.304,8.103,0.819,7.597,0.426c0-1.178,0-6.771,0-6.771
+ c0-1.177-0.786-1.962-1.962-1.962H31.4c-0.981,0-1.668,0.589-1.865,1.472C28.74,9.976,28.456,15.772,30.477,17.48z"/>
+ <path fill="#740000" d="M30.48,17.473c2.72,2.299,8.088,0.817,7.584,0.424c0-1.176,0-6.759,0-6.759
+ c0-1.175-0.785-1.959-1.959-1.959h-4.703c-0.979,0-1.664,0.587-1.861,1.469C28.748,9.981,28.465,15.767,30.48,17.473z"/>
+ <path fill="#750000" d="M30.484,17.465c2.717,2.295,8.076,0.816,7.572,0.424c0-1.174,0-6.747,0-6.747
+ c0-1.174-0.783-1.956-1.957-1.956h-4.693c-0.979,0-1.661,0.586-1.858,1.467C28.757,9.987,28.475,15.763,30.484,17.465z"/>
+ <path fill="#760000" d="M30.491,17.458c2.71,2.292,8.061,0.815,7.558,0.423c0-1.172,0-6.735,0-6.735
+ c0-1.171-0.781-1.953-1.953-1.953H31.41c-0.977,0-1.658,0.585-1.854,1.465C28.766,9.993,28.482,15.758,30.491,17.458z"/>
+ <path fill="#770000" d="M30.496,17.45c2.706,2.288,8.047,0.813,7.545,0.422c0-1.17,0-6.724,0-6.724
+ c0-1.169-0.781-1.949-1.949-1.949h-4.678c-0.975,0-1.656,0.584-1.854,1.461C28.773,9.998,28.491,15.754,30.496,17.45z"/>
+ <path fill="#790000" d="M30.502,17.442c2.701,2.284,8.032,0.812,7.531,0.422c0-1.167,0-6.712,0-6.712
+ c0-1.167-0.779-1.945-1.945-1.945h-4.671c-0.972,0-1.651,0.583-1.849,1.458C28.781,10.004,28.5,15.749,30.502,17.442z"/>
+ <path fill="#7A0000" d="M30.507,17.435c2.696,2.28,8.019,0.811,7.519,0.421c0-1.166,0-6.7,0-6.7
+ c0-1.166-0.777-1.942-1.942-1.942h-4.661c-0.971,0-1.648,0.583-1.845,1.457C28.79,10.009,28.509,15.745,30.507,17.435z"/>
+ <path fill="#7B0000" d="M30.514,17.427c2.689,2.276,8.004,0.81,7.504,0.42c0-1.164,0-6.688,0-6.688
+ c0-1.163-0.776-1.938-1.938-1.938h-4.653c-0.97,0-1.646,0.582-1.842,1.454C28.798,10.014,28.518,15.74,30.514,17.427z"/>
+ <path fill="#7C0000" d="M30.518,17.42c2.688,2.271,7.99,0.808,7.491,0.419c0-1.162,0-6.677,0-6.677
+ c0-1.161-0.774-1.935-1.935-1.935h-4.646c-0.968,0-1.645,0.58-1.839,1.451C28.807,10.02,28.525,15.736,30.518,17.42z"/>
+ <path fill="#7D0000" d="M30.521,17.412c2.683,2.268,7.978,0.806,7.479,0.418c0-1.159,0-6.665,0-6.665
+ c0-1.159-0.774-1.932-1.933-1.932h-4.637c-0.967,0-1.642,0.58-1.836,1.449C28.814,10.025,28.535,15.73,30.521,17.412z"/>
+ <path fill="#7E0000" d="M30.527,17.404c2.678,2.264,7.963,0.805,7.466,0.418c0-1.157,0-6.652,0-6.652
+ c0-1.158-0.772-1.929-1.929-1.929h-4.629c-0.965,0-1.639,0.578-1.832,1.446C28.823,10.031,28.544,15.726,30.527,17.404z"/>
+ <path fill="#800000" d="M30.533,17.397c2.673,2.26,7.947,0.804,7.451,0.417c0-1.155,0-6.641,0-6.641
+ c0-1.155-0.771-1.925-1.924-1.925h-4.621c-0.963,0-1.635,0.577-1.83,1.443C28.831,10.037,28.553,15.722,30.533,17.397z"/>
+ <path fill="#810000" d="M30.538,17.39c2.668,2.255,7.935,0.802,7.438,0.417c0-1.153,0-6.629,0-6.629
+ c0-1.153-0.77-1.922-1.922-1.922h-4.611c-0.961,0-1.633,0.576-1.826,1.442C28.84,10.042,28.562,15.717,30.538,17.39z"/>
+ <path fill="#820000" d="M30.544,17.382c2.663,2.252,7.92,0.801,7.427,0.416c0-1.151,0-6.618,0-6.618
+ c0-1.151-0.77-1.918-1.92-1.918h-4.604c-0.961,0-1.631,0.575-1.823,1.438C28.85,10.047,28.57,15.713,30.544,17.382z"/>
+ <path fill="#830000" d="M30.549,17.375c2.659,2.248,7.906,0.799,7.413,0.415c0-1.149,0-6.606,0-6.606
+ c0-1.149-0.769-1.915-1.915-1.915H31.45c-0.957,0-1.626,0.574-1.819,1.436C28.855,10.053,28.579,15.708,30.549,17.375z"/>
+ <path fill="#840000" d="M30.555,17.367c2.653,2.243,7.893,0.797,7.399,0.414c0-1.147,0-6.594,0-6.594
+ c0-1.147-0.767-1.911-1.912-1.911h-4.588c-0.955,0-1.623,0.573-1.815,1.434C28.865,10.059,28.588,15.704,30.555,17.367z"/>
+ <path fill="#850000" d="M30.561,17.359c2.648,2.24,7.877,0.797,7.387,0.414c0-1.145,0-6.583,0-6.583
+ c0-1.145-0.766-1.908-1.908-1.908h-4.58c-0.954,0-1.621,0.572-1.812,1.431C28.873,10.064,28.598,15.699,30.561,17.359z"/>
+ <path fill="#860000" d="M30.564,17.352c2.645,2.235,7.863,0.795,7.373,0.413c0-1.143,0-6.57,0-6.57
+ c0-1.143-0.764-1.905-1.904-1.905h-4.571c-0.953,0-1.618,0.571-1.81,1.428C28.882,10.069,28.605,15.694,30.564,17.352z"/>
+ <path fill="#880000" d="M30.57,17.344c2.64,2.232,7.85,0.794,7.359,0.412c0-1.141,0-6.559,0-6.559
+ c0-1.141-0.762-1.901-1.902-1.901h-4.562c-0.949,0-1.613,0.57-1.806,1.426C28.891,10.075,28.613,15.689,30.57,17.344z"/>
+ <path fill="#890000" d="M30.576,17.337c2.634,2.228,7.835,0.792,7.346,0.411c0-1.139,0-6.547,0-6.547
+ c0-1.139-0.76-1.898-1.896-1.898h-4.557c-0.947,0-1.611,0.569-1.803,1.423C28.898,10.08,28.623,15.685,30.576,17.337z"/>
+ <path fill="#8A0000" d="M30.581,17.33c2.63,2.223,7.821,0.79,7.333,0.41c0-1.137,0-6.535,0-6.535
+ c0-1.137-0.76-1.894-1.895-1.894h-4.547c-0.947,0-1.609,0.567-1.801,1.421C28.906,10.086,28.632,15.681,30.581,17.33z"/>
+ <path fill="#8B0000" d="M30.587,17.321c2.625,2.22,7.808,0.79,7.319,0.41c0-1.135,0-6.523,0-6.523
+ c0-1.135-0.758-1.891-1.891-1.891h-4.539c-0.945,0-1.606,0.567-1.797,1.418C28.915,10.091,28.641,15.676,30.587,17.321z"/>
+ <path fill="#8C0000" d="M30.592,17.314c2.62,2.216,7.793,0.788,7.307,0.409c0-1.132,0-6.512,0-6.512
+ c0-1.132-0.756-1.887-1.887-1.887H31.48c-0.943,0-1.604,0.566-1.793,1.416C28.923,10.097,28.648,15.671,30.592,17.314z"/>
+ <path fill="#8D0000" d="M30.598,17.307c2.614,2.211,7.778,0.787,7.293,0.409c0-1.131,0-6.5,0-6.5
+ c0-1.13-0.754-1.884-1.884-1.884h-4.522c-0.941,0-1.601,0.564-1.791,1.413C28.932,10.103,28.658,15.667,30.598,17.307z"/>
+ <path fill="#8F0000" d="M30.604,17.299c2.609,2.208,7.765,0.785,7.279,0.408c0-1.128,0-6.488,0-6.488
+ c0-1.128-0.753-1.881-1.881-1.881h-4.516c-0.939,0-1.598,0.564-1.786,1.411C28.939,10.107,28.668,15.662,30.604,17.299z"/>
+ <path fill="#900000" d="M30.607,17.292c2.605,2.204,7.75,0.784,7.268,0.407c0-1.127,0-6.477,0-6.477
+ c0-1.127-0.753-1.877-1.878-1.877h-4.506c-0.938,0-1.595,0.563-1.783,1.408C28.948,10.113,28.676,15.658,30.607,17.292z"/>
+ <path fill="#910000" d="M30.611,17.284c2.604,2.199,7.738,0.782,7.256,0.406c0-1.124,0-6.464,0-6.464
+ c0-1.125-0.751-1.874-1.874-1.874h-4.498c-0.938,0-1.593,0.562-1.781,1.405C28.956,10.119,28.686,15.653,30.611,17.284z"/>
+ <path fill="#920000" d="M30.618,17.276c2.597,2.196,7.723,0.781,7.241,0.406c0-1.123,0-6.453,0-6.453
+ c0-1.123-0.75-1.871-1.871-1.871h-4.49c-0.936,0-1.588,0.561-1.775,1.403C28.965,10.124,28.693,15.649,30.618,17.276z"/>
+ <path fill="#930000" d="M30.623,17.269c2.592,2.191,7.709,0.779,7.229,0.404c0-1.12,0-6.441,0-6.441
+ c0-1.121-0.748-1.867-1.867-1.867h-4.481c-0.935,0-1.586,0.56-1.772,1.4C28.973,10.13,28.703,15.644,30.623,17.269z"/>
+ <path fill="#940000" d="M30.629,17.261c2.587,2.188,7.694,0.778,7.214,0.404c0-1.119,0-6.43,0-6.43
+ c0-1.119-0.745-1.863-1.862-1.863h-4.475c-0.932,0-1.583,0.559-1.771,1.397C28.98,10.135,28.711,15.64,30.629,17.261z"/>
+ <path fill="#960000" d="M30.634,17.254c2.583,2.184,7.681,0.776,7.201,0.403c0-1.116,0-6.417,0-6.417
+ c0-1.116-0.745-1.86-1.86-1.86H31.51c-0.93,0-1.58,0.558-1.768,1.395C28.988,10.141,28.721,15.635,30.634,17.254z"/>
+ <path fill="#970000" d="M30.641,17.247c2.576,2.179,7.666,0.775,7.188,0.402c0-1.115,0-6.406,0-6.406
+ c0-1.114-0.744-1.856-1.855-1.856h-4.459c-0.928,0-1.576,0.557-1.764,1.393C28.998,10.146,28.729,15.63,30.641,17.247z"/>
+ <path fill="#980000" d="M30.645,17.239c2.573,2.176,7.652,0.774,7.176,0.401c0-1.112,0-6.394,0-6.394
+ c0-1.112-0.742-1.853-1.854-1.853h-4.448c-0.928,0-1.574,0.556-1.762,1.39C29.006,10.151,28.738,15.625,30.645,17.239z"/>
+ <path fill="#990000" d="M30.65,17.231c2.567,2.172,7.638,0.772,7.16,0.401c0-1.11,0-6.383,0-6.383c0-1.11-0.74-1.85-1.85-1.85
+ H31.52c-0.924,0-1.57,0.555-1.758,1.387C29.016,10.157,28.747,15.621,30.65,17.231z"/>
+ <path fill="#9A0000" d="M30.654,17.224c2.563,2.167,7.625,0.771,7.148,0.4c0-1.108,0-6.371,0-6.371
+ c0-1.108-0.74-1.846-1.847-1.846h-4.433c-0.924,0-1.568,0.554-1.756,1.385C29.021,10.163,28.755,15.616,30.654,17.224z"/>
+ <path fill="#9B0000" d="M30.66,17.216c2.561,2.164,7.609,0.769,7.136,0.399c0-1.106,0-6.359,0-6.359
+ c0-1.106-0.737-1.843-1.844-1.843h-4.425c-0.922,0-1.564,0.553-1.752,1.382C29.031,10.168,28.766,15.612,30.66,17.216z"/>
+ <path fill="#9C0000" d="M30.666,17.209c2.555,2.16,7.596,0.768,7.122,0.399c0-1.104,0-6.347,0-6.347
+ c0-1.104-0.737-1.84-1.84-1.84h-4.417c-0.92,0-1.562,0.552-1.748,1.38C29.039,10.174,28.771,15.607,30.666,17.209z"/>
+ <path fill="#9E0000" d="M30.671,17.201c2.55,2.155,7.582,0.767,7.108,0.398c0-1.102,0-6.335,0-6.335
+ c0-1.102-0.735-1.836-1.836-1.836h-4.408c-0.918,0-1.561,0.551-1.745,1.377C29.048,10.179,28.782,15.603,30.671,17.201z"/>
+ <path fill="#9F0000" d="M30.677,17.193c2.544,2.152,7.567,0.765,7.097,0.397c0-1.1,0-6.324,0-6.324
+ c0-1.1-0.735-1.833-1.834-1.833H31.54c-0.916,0-1.558,0.549-1.741,1.375C29.057,10.185,28.79,15.598,30.677,17.193z"/>
+ <path fill="#A00000" d="M30.682,17.186c2.541,2.147,7.555,0.764,7.082,0.396c0-1.098,0-6.312,0-6.312
+ c0-1.098-0.731-1.829-1.828-1.829h-4.393c-0.915,0-1.555,0.548-1.738,1.372C29.064,10.19,28.8,15.594,30.682,17.186z"/>
+ <path fill="#A10000" d="M30.688,17.178c2.535,2.144,7.539,0.763,7.068,0.396c0-1.096,0-6.3,0-6.3
+ c0-1.096-0.73-1.826-1.826-1.826h-4.384c-0.912,0-1.551,0.547-1.733,1.37C29.072,10.196,28.809,15.589,30.688,17.178z"/>
+ <path fill="#A20000" d="M30.691,17.171c2.531,2.14,7.525,0.761,7.057,0.395c0-1.094,0-6.289,0-6.289
+ c0-1.093-0.73-1.822-1.822-1.822H31.55c-0.911,0-1.548,0.546-1.731,1.367C29.081,10.201,28.816,15.584,30.691,17.171z"/>
+ <path fill="#A30000" d="M30.697,17.163c2.525,2.136,7.512,0.76,7.043,0.395c0-1.092,0-6.277,0-6.277
+ c0-1.091-0.729-1.819-1.819-1.819h-4.366c-0.91,0-1.546,0.545-1.729,1.365C29.089,10.207,28.825,15.58,30.697,17.163z"/>
+ <path fill="#A50000" d="M30.703,17.156c2.521,2.132,7.497,0.758,7.029,0.394c0-1.09,0-6.265,0-6.265
+ c0-1.09-0.729-1.816-1.815-1.816h-4.358c-0.908,0-1.543,0.544-1.727,1.362C29.098,10.212,28.835,15.575,30.703,17.156z"/>
+ <path fill="#A60000" d="M30.708,17.148c2.517,2.127,7.483,0.756,7.017,0.393c0-1.087,0-6.253,0-6.253
+ c0-1.088-0.727-1.812-1.812-1.812h-4.351c-0.906,0-1.541,0.543-1.724,1.359C29.105,10.218,28.844,15.571,30.708,17.148z"/>
+ <path fill="#A70000" d="M30.714,17.141c2.511,2.124,7.47,0.755,7.003,0.392c0-1.086,0-6.241,0-6.241
+ c0-1.085-0.725-1.809-1.81-1.809h-4.343c-0.904,0-1.537,0.542-1.719,1.357C29.113,10.223,28.854,15.566,30.714,17.141z"/>
+ <path fill="#A80000" d="M30.719,17.133c2.508,2.12,7.455,0.753,6.99,0.391c0-1.083,0-6.229,0-6.229
+ c0-1.083-0.725-1.806-1.807-1.806h-4.334c-0.902,0-1.533,0.542-1.717,1.354C29.122,10.229,28.861,15.562,30.719,17.133z"/>
+ <path fill="#A90000" d="M30.725,17.125c2.502,2.116,7.44,0.752,6.978,0.391c0-1.082,0-6.218,0-6.218
+ c0-1.081-0.724-1.802-1.804-1.802h-4.325c-0.901,0-1.53,0.54-1.714,1.352C29.131,10.234,28.87,15.557,30.725,17.125z"/>
+ <path fill="#AA0000" d="M30.729,17.118c2.498,2.111,7.428,0.75,6.965,0.39c0-1.08,0-6.206,0-6.206
+ c0-1.079-0.721-1.798-1.799-1.798h-4.318c-0.899,0-1.528,0.539-1.71,1.349C29.139,10.24,28.879,15.552,30.729,17.118z"/>
+ <path fill="#AC0000" d="M30.734,17.11c2.492,2.108,7.412,0.75,6.951,0.389c0-1.078,0-6.194,0-6.194
+ c0-1.077-0.721-1.795-1.797-1.795h-4.311c-0.896,0-1.523,0.538-1.705,1.346C29.146,10.245,28.889,15.548,30.734,17.11z"/>
+ <path fill="#AD0000" d="M30.74,17.103c2.486,2.104,7.398,0.748,6.937,0.389c0-1.076,0-6.183,0-6.183
+ c0-1.075-0.718-1.792-1.792-1.792h-4.302c-0.896,0-1.521,0.537-1.702,1.344C29.154,10.251,28.896,15.543,30.74,17.103z"/>
+ <path fill="#AE0000" d="M30.745,17.096c2.483,2.1,7.385,0.746,6.924,0.388c0-1.074,0-6.171,0-6.171
+ c0-1.073-0.717-1.789-1.788-1.789h-4.294c-0.896,0-1.519,0.537-1.698,1.341C29.164,10.256,28.904,15.539,30.745,17.096z"/>
+ <path fill="#AF0000" d="M30.751,17.088c2.478,2.096,7.37,0.745,6.91,0.387c0-1.072,0-6.159,0-6.159
+ c0-1.071-0.716-1.785-1.785-1.785h-4.285c-0.893,0-1.517,0.535-1.696,1.339C29.172,10.262,28.914,15.534,30.751,17.088z"/>
+ <path fill="#B00000" d="M30.756,17.08c2.475,2.092,7.355,0.744,6.896,0.387c0-1.07,0-6.147,0-6.147
+ c0-1.069-0.713-1.782-1.781-1.782h-4.277c-0.891,0-1.513,0.535-1.691,1.336C29.182,10.267,28.923,15.53,30.756,17.08z"/>
+ <path fill="#B10000" d="M30.762,17.073c2.469,2.088,7.342,0.743,6.885,0.386c0-1.067,0-6.136,0-6.136
+ c0-1.067-0.713-1.778-1.778-1.778h-4.271c-0.889,0-1.51,0.533-1.688,1.334C29.188,10.272,28.932,15.525,30.762,17.073z"/>
+ <path fill="#B30000" d="M30.768,17.065c2.463,2.083,7.328,0.741,6.871,0.385c0-1.065,0-6.124,0-6.124
+ c0-1.065-0.712-1.775-1.775-1.775h-4.262c-0.887,0-1.506,0.532-1.687,1.332C29.197,10.278,28.939,15.521,30.768,17.065z"/>
+ <path fill="#B40000" d="M30.771,17.058c2.459,2.08,7.313,0.74,6.857,0.384c0-1.063,0-6.112,0-6.112
+ c0-1.063-0.71-1.771-1.771-1.771h-4.252c-0.887,0-1.506,0.531-1.685,1.329C29.205,10.284,28.949,15.516,30.771,17.058z"/>
+ <path fill="#B50000" d="M30.777,17.05c2.453,2.076,7.3,0.738,6.845,0.383c0-1.062,0-6.101,0-6.101
+ c0-1.061-0.709-1.768-1.769-1.768h-4.244c-0.885,0-1.502,0.53-1.682,1.326C29.214,10.289,28.958,15.511,30.777,17.05z"/>
+ <path fill="#B60000" d="M30.782,17.043c2.45,2.071,7.286,0.736,6.831,0.382c0-1.059,0-6.088,0-6.088
+ c0-1.059-0.707-1.765-1.766-1.765h-4.236c-0.881,0-1.498,0.529-1.676,1.323C29.223,10.294,28.967,15.507,30.782,17.043z"/>
+ <path fill="#B70000" d="M30.787,17.035c2.445,2.067,7.271,0.735,6.818,0.382c0-1.057,0-6.077,0-6.077
+ c0-1.057-0.705-1.761-1.762-1.761h-4.229c-0.881,0-1.495,0.528-1.674,1.321C29.23,10.3,28.977,15.502,30.787,17.035z"/>
+ <path fill="#B80000" d="M30.793,17.028c2.439,2.063,7.258,0.733,6.807,0.381c0-1.055,0-6.065,0-6.065
+ c0-1.055-0.705-1.758-1.76-1.758h-4.22c-0.879,0-1.493,0.527-1.67,1.318C29.238,10.306,28.984,15.498,30.793,17.028z"/>
+ <path fill="#B90000" d="M30.798,17.02c2.437,2.06,7.244,0.732,6.792,0.38c0-1.053,0-6.053,0-6.053
+ c0-1.053-0.703-1.754-1.754-1.754h-4.212c-0.877,0-1.49,0.526-1.667,1.316C29.247,10.311,28.993,15.493,30.798,17.02z"/>
+ <path fill="#BB0000" d="M30.805,17.013c2.43,2.056,7.229,0.731,6.777,0.379c0-1.051,0-6.042,0-6.042
+ c0-1.051-0.701-1.751-1.751-1.751h-4.204c-0.875,0-1.486,0.525-1.663,1.313C29.255,10.316,29.002,15.488,30.805,17.013z"/>
+ <path fill="#BC0000" d="M30.809,17.005c2.428,2.052,7.217,0.729,6.767,0.379c0-1.049,0-6.03,0-6.03
+ c0-1.048-0.7-1.748-1.748-1.748h-4.195c-0.873,0-1.483,0.524-1.659,1.311C29.264,10.322,29.012,15.484,30.809,17.005z"/>
+ <path fill="#BD0000" d="M30.814,16.998c2.42,2.047,7.201,0.728,6.752,0.378c0-1.047,0-6.018,0-6.018
+ c0-1.046-0.699-1.744-1.744-1.744h-4.188c-0.872,0-1.481,0.523-1.657,1.309C29.271,10.328,29.02,15.48,30.814,16.998z"/>
+ <path fill="#BE0000" d="M30.818,16.99c2.418,2.044,7.188,0.727,6.74,0.377c0-1.045,0-6.006,0-6.006
+ c0-1.044-0.699-1.74-1.742-1.74h-4.178c-0.871,0-1.479,0.522-1.654,1.305C29.279,10.333,29.027,15.475,30.818,16.99z"/>
+ <path fill="#BF0000" d="M30.824,16.982c2.412,2.04,7.174,0.725,6.727,0.376c0-1.043,0-5.994,0-5.994
+ c0-1.043-0.695-1.737-1.736-1.737h-4.172c-0.869,0-1.476,0.521-1.65,1.303C29.288,10.338,29.037,15.47,30.824,16.982z"/>
+ <path fill="#C00000" d="M30.83,16.975c2.406,2.036,7.158,0.724,6.713,0.376c0-1.041,0-5.982,0-5.982
+ c0-1.041-0.695-1.734-1.734-1.734h-4.162c-0.867,0-1.473,0.52-1.647,1.3C29.297,10.344,29.046,15.466,30.83,16.975z"/>
+ <path fill="#C20000" d="M30.835,16.967c2.403,2.032,7.146,0.722,6.7,0.375c0-1.039,0-5.971,0-5.971
+ c0-1.039-0.694-1.73-1.73-1.73H31.65c-0.865,0-1.471,0.519-1.646,1.298C29.305,10.35,29.055,15.461,30.835,16.967z"/>
+ <path fill="#C30000" d="M30.841,16.96c2.397,2.027,7.132,0.721,6.687,0.375c0-1.037,0-5.959,0-5.959
+ c0-1.037-0.691-1.727-1.728-1.727h-4.146c-0.863,0-1.467,0.518-1.643,1.295C29.312,10.355,29.062,15.457,30.841,16.96z"/>
+ <path fill="#C40000" d="M30.846,16.952c2.395,2.023,7.117,0.72,6.674,0.374c0-1.035,0-5.948,0-5.948
+ c0-1.034-0.69-1.724-1.725-1.724h-4.138c-0.862,0-1.464,0.517-1.64,1.293C29.32,10.36,29.072,15.452,30.846,16.952z"/>
+ <path fill="#C50000" d="M30.852,16.945c2.39,2.02,7.104,0.718,6.66,0.373c0-1.033,0-5.936,0-5.936
+ c0-1.032-0.689-1.72-1.721-1.72H31.66c-0.859,0-1.46,0.516-1.635,1.291C29.33,10.366,29.081,15.447,30.852,16.945z"/>
+ <path fill="#C60000" d="M30.855,16.937c2.385,2.016,7.09,0.717,6.646,0.373c0-1.031,0-5.924,0-5.924
+ c0-1.03-0.688-1.717-1.717-1.717h-4.122c-0.858,0-1.458,0.515-1.631,1.288C29.338,10.372,29.09,15.443,30.855,16.937z"/>
+ <path fill="#C70000" d="M30.861,16.93c2.38,2.012,7.074,0.715,6.634,0.372c0-1.029,0-5.913,0-5.913
+ c0-1.028-0.687-1.713-1.714-1.713h-4.113c-0.855,0-1.455,0.514-1.628,1.285C29.348,10.377,29.1,15.438,30.861,16.93z"/>
+ <path fill="#C90000" d="M30.867,16.922c2.374,2.008,7.061,0.714,6.619,0.371c0-1.027,0-5.9,0-5.9c0-1.026-0.686-1.71-1.709-1.71
+ h-4.105c-0.855,0-1.451,0.513-1.625,1.282C29.354,10.382,29.107,15.434,30.867,16.922z"/>
+ <path fill="#CA0000" d="M30.872,16.915c2.37,2.003,7.047,0.712,6.606,0.37c0-1.024,0-5.889,0-5.889
+ c0-1.024-0.685-1.707-1.707-1.707h-4.098c-0.854,0-1.447,0.512-1.621,1.28C29.363,10.388,29.116,15.429,30.872,16.915z"/>
+ <path fill="#CB0000" d="M30.878,16.907c2.364,2,7.032,0.711,6.595,0.37c0-1.022,0-5.877,0-5.877
+ c0-1.022-0.684-1.703-1.703-1.703h-4.09c-0.853,0-1.447,0.511-1.619,1.277C29.371,10.394,29.125,15.424,30.878,16.907z"/>
+ <path fill="#CC0000" d="M30.883,16.899c2.36,1.996,7.02,0.709,6.581,0.369c0-1.021,0-5.865,0-5.865c0-1.02-0.682-1.7-1.7-1.7
+ h-4.08c-0.851,0-1.443,0.51-1.615,1.275C29.38,10.399,29.134,15.42,30.883,16.899z"/>
+ </g>
+
+ <linearGradient id="Chimney_Highlight_1_" gradientUnits="userSpaceOnUse" x1="219.5195" y1="-239.7031" x2="219.5195" y2="-247.9902" gradientTransform="matrix(1 0 0 -1 -186 -230)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#CC0000"/>
+ </linearGradient>
+ <path id="Chimney_Highlight" fill="url(#Chimney_Highlight_1_)" d="M30.883,16.899c2.36,1.996,7.02,0.709,6.581,0.369
+ c0-1.021,0-5.865,0-5.865c0-1.02-0.682-1.7-1.7-1.7h-4.08c-0.851,0-1.443,0.51-1.615,1.275
+ C29.38,10.399,29.134,15.42,30.883,16.899z"/>
+ </g>
+ <g id="House">
+ <g>
+ <path fill="#FFCC00" d="M8.5,24.788c0,2.4,0,14.2,0,14.2c0,1.101,0.8,1.9,1.8,1.9h27.4c1.1,0,1.899-0.9,1.899-2
+ c0,0,0-11.8,0-14.2C40.6,24.688,7.4,24.788,8.5,24.788z"/>
+ <path fill="#FFCD00" d="M8.545,24.812c0,2.395,0,14.159,0,14.159c0,1.097,0.798,1.895,1.794,1.895h27.322
+ c1.097,0,1.894-0.897,1.894-1.993c0,0,0-11.767,0-14.16C40.552,24.711,7.448,24.812,8.545,24.812z"/>
+ <path fill="#FFCE00" d="M8.589,24.835c0,2.387,0,14.119,0,14.119c0,1.094,0.795,1.889,1.79,1.889h27.242
+ c1.094,0,1.889-0.896,1.889-1.988c0,0,0-11.73,0-14.118C40.504,24.735,7.496,24.835,8.589,24.835z"/>
+ <path fill="#FFCF00" d="M8.634,24.857c0,2.38,0,14.077,0,14.077c0,1.091,0.793,1.884,1.785,1.884h27.163
+ c1.09,0,1.883-0.894,1.883-1.981c0,0,0-11.698,0-14.078C40.456,24.758,7.543,24.857,8.634,24.857z"/>
+ <path fill="#FFD000" d="M8.68,24.88c0,2.373,0,14.037,0,14.037c0,1.088,0.791,1.879,1.779,1.879h27.084
+ c1.087,0,1.877-0.892,1.877-1.979c0,0,0-11.663,0-14.036C40.409,24.782,7.592,24.88,8.68,24.88z"/>
+ <path fill="#FFD100" d="M8.725,24.903c0,2.366,0,13.995,0,13.995c0,1.085,0.788,1.874,1.773,1.874h27.006
+ c1.083,0,1.872-0.889,1.872-1.973c0,0,0-11.629,0-13.994C40.361,24.806,7.64,24.903,8.725,24.903z"/>
+ <path fill="#FFD200" d="M8.769,24.925c0,2.359,0,13.955,0,13.955c0,1.082,0.786,1.867,1.769,1.867h26.926
+ c1.081,0,1.866-0.884,1.866-1.965c0,0,0-11.596,0-13.953C40.312,24.829,7.688,24.925,8.769,24.925z"/>
+ <path fill="#FFD300" d="M8.814,24.949c0,2.354,0,13.914,0,13.914c0,1.078,0.784,1.861,1.763,1.861h26.848
+ c1.077,0,1.86-0.882,1.86-1.959c0,0,0-11.562,0-13.914C40.266,24.852,7.736,24.949,8.814,24.949z"/>
+ <path fill="#FFD400" d="M8.858,24.973c0,2.345,0,13.872,0,13.872c0,1.074,0.781,1.855,1.758,1.855h26.768
+ c1.074,0,1.854-0.88,1.854-1.953c0,0,0-11.526,0-13.873C40.217,24.876,7.784,24.973,8.858,24.973z"/>
+ <path fill="#FFD500" d="M8.903,24.997c0,2.338,0,13.83,0,13.83c0,1.072,0.779,1.853,1.753,1.853h26.689
+ c1.07,0,1.85-0.877,1.85-1.948c0,0,0-11.493,0-13.832C40.17,24.898,7.832,24.997,8.903,24.997z"/>
+ <path fill="#FFD600" d="M8.949,25.019c0,2.331,0,13.791,0,13.791c0,1.068,0.777,1.846,1.748,1.846h26.61
+ c1.067,0,1.846-0.875,1.846-1.941c0,0,0-11.459,0-13.791C40.122,24.921,7.88,25.019,8.949,25.019z"/>
+ <path fill="#FFD700" d="M8.993,25.042c0,2.324,0,13.75,0,13.75c0,1.064,0.774,1.84,1.743,1.84h26.532
+ c1.064,0,1.838-0.871,1.838-1.937c0,0,0-11.426,0-13.75C40.074,24.945,7.928,25.042,8.993,25.042z"/>
+ <path fill="#FFD800" d="M9.039,25.065c0,2.316,0,13.708,0,13.708c0,1.063,0.772,1.835,1.737,1.835h26.453
+ c1.062,0,1.834-0.869,1.834-1.931c0,0,0-11.392,0-13.71C40.027,24.968,7.977,25.065,9.039,25.065z"/>
+ <path fill="#FFD900" d="M9.083,25.087c0,2.312,0,13.668,0,13.668c0,1.061,0.77,1.83,1.732,1.83h26.373
+ c1.06,0,1.828-0.867,1.828-1.926c0,0,0-11.356,0-13.668C39.979,24.993,8.024,25.087,9.083,25.087z"/>
+ <path fill="#FFDA00" d="M9.128,25.111c0,2.304,0,13.626,0,13.626c0,1.057,0.767,1.824,1.727,1.824h26.293
+ c1.056,0,1.822-0.864,1.822-1.919c0,0,0-11.323,0-13.627C39.932,25.016,8.072,25.111,9.128,25.111z"/>
+ <path fill="#FFDB00" d="M9.172,25.134c0,2.297,0,13.586,0,13.586c0,1.053,0.766,1.818,1.722,1.818h26.215
+ c1.052,0,1.816-0.861,1.816-1.914c0,0,0-11.289,0-13.586C39.884,25.04,8.12,25.134,9.172,25.134z"/>
+ <path fill="#FFDC00" d="M9.217,25.157c0,2.29,0,13.545,0,13.545c0,1.051,0.763,1.812,1.717,1.812H37.07
+ c1.049,0,1.812-0.858,1.812-1.907c0,0,0-11.256,0-13.545C39.836,25.062,8.168,25.157,9.217,25.157z"/>
+ <path fill="#FFDD00" d="M9.263,25.18c0,2.282,0,13.505,0,13.505c0,1.046,0.76,1.807,1.711,1.807h26.055
+ c1.047,0,1.808-0.855,1.808-1.902c0,0,0-11.221,0-13.502C39.788,25.085,8.216,25.18,9.263,25.18z"/>
+ <path fill="#FFDE00" d="M9.307,25.204c0,2.275,0,13.463,0,13.463c0,1.043,0.758,1.801,1.707,1.801h25.978
+ c1.043,0,1.801-0.854,1.801-1.896c0,0,0-11.188,0-13.463C39.74,25.109,8.265,25.204,9.307,25.204z"/>
+ <path fill="#FFDF00" d="M9.352,25.226c0,2.27,0,13.423,0,13.423c0,1.04,0.756,1.796,1.701,1.796h25.899
+ c1.039,0,1.795-0.852,1.795-1.89c0,0,0-11.153,0-13.423C39.691,25.132,8.312,25.226,9.352,25.226z"/>
+ <path fill="#FFE000" d="M9.397,25.251c0,2.262,0,13.379,0,13.379c0,1.037,0.753,1.791,1.696,1.791h25.819
+ c1.036,0,1.79-0.849,1.79-1.883c0,0,0-11.119,0-13.383C39.645,25.155,8.36,25.251,9.397,25.251z"/>
+ <path fill="#FFE100" d="M9.442,25.272c0,2.255,0,13.34,0,13.34c0,1.034,0.751,1.785,1.691,1.785h25.74
+ c1.033,0,1.784-0.846,1.784-1.879c0,0,0-11.084,0-13.34C39.598,25.179,8.408,25.272,9.442,25.272z"/>
+ <path fill="#FFE200" d="M9.486,25.296c0,2.248,0,13.299,0,13.299c0,1.029,0.749,1.779,1.686,1.779h25.662
+ c1.029,0,1.777-0.844,1.777-1.873c0,0,0-11.051,0-13.299C39.549,25.202,8.457,25.296,9.486,25.296z"/>
+ <path fill="#FFE300" d="M9.532,25.318c0,2.241,0,13.259,0,13.259c0,1.027,0.747,1.773,1.68,1.773h25.583
+ c1.025,0,1.771-0.84,1.771-1.866c0,0,0-11.017,0-13.259C39.502,25.226,8.504,25.318,9.532,25.318z"/>
+ <path fill="#FFE400" d="M9.577,25.341c0,2.234,0,13.218,0,13.218c0,1.024,0.744,1.769,1.675,1.769h25.503
+ c1.022,0,1.769-0.838,1.769-1.859c0,0,0-10.983,0-13.219C39.454,25.249,8.553,25.341,9.577,25.341z"/>
+ <path fill="#FFE500" d="M9.621,25.364c0,2.229,0,13.178,0,13.178c0,1.021,0.742,1.763,1.67,1.763h25.424
+ c1.02,0,1.764-0.835,1.764-1.855c0,0,0-10.948,0-13.176C39.406,25.272,8.601,25.364,9.621,25.364z"/>
+ <path fill="#FFE600" d="M9.666,25.388c0,2.221,0,13.135,0,13.135c0,1.02,0.74,1.758,1.665,1.758h25.345
+ c1.018,0,1.758-0.832,1.758-1.85c0,0,0-10.914,0-13.135C39.357,25.296,8.648,25.388,9.666,25.388z"/>
+ <path fill="#FFE600" d="M9.711,25.411c0,2.215,0,13.094,0,13.094c0,1.016,0.737,1.754,1.66,1.754h25.266
+ c1.016,0,1.752-0.83,1.752-1.846c0,0,0-10.879,0-13.094C39.311,25.319,8.696,25.411,9.711,25.411z"/>
+ <path fill="#FFE700" d="M9.756,25.434c0,2.207,0,13.054,0,13.054c0,1.012,0.735,1.747,1.654,1.747h25.188
+ c1.012,0,1.746-0.827,1.746-1.839c0,0,0-10.846,0-13.053C39.264,25.343,8.745,25.434,9.756,25.434z"/>
+ <path fill="#FFE800" d="M9.801,25.458c0,2.199,0,13.013,0,13.013c0,1.008,0.732,1.741,1.649,1.741h25.108
+ c1.008,0,1.74-0.825,1.74-1.834c0,0,0-10.812,0-13.012C39.215,25.366,8.792,25.458,9.801,25.458z"/>
+ <path fill="#FFE900" d="M9.845,25.48c0,2.192,0,12.972,0,12.972c0,1.006,0.73,1.735,1.644,1.735h25.029
+ c1.006,0,1.735-0.822,1.735-1.827c0,0,0-10.777,0-12.971C39.167,25.39,8.84,25.48,9.845,25.48z"/>
+ <path fill="#FFEA00" d="M9.89,25.503c0,2.187,0,12.931,0,12.931c0,1.002,0.729,1.729,1.639,1.729h24.95
+ c1.002,0,1.729-0.818,1.729-1.82c0,0,0-10.744,0-12.93C39.12,25.413,8.889,25.503,9.89,25.503z"/>
+ <path fill="#FFEB00" d="M9.935,25.526c0,2.18,0,12.891,0,12.891c0,0.998,0.726,1.725,1.634,1.725h24.871
+ c1,0,1.726-0.817,1.726-1.814c0,0,0-10.711,0-12.89C39.072,25.437,8.937,25.526,9.935,25.526z"/>
+ <path fill="#FFEC00" d="M9.98,25.548c0,2.174,0,12.85,0,12.85c0,0.996,0.724,1.721,1.628,1.721H36.4
+ c0.994,0,1.719-0.814,1.719-1.811c0,0,0-10.676,0-12.85C39.023,25.46,8.985,25.548,9.98,25.548z"/>
+ <path fill="#FFED00" d="M10.025,25.572c0,2.165,0,12.808,0,12.808c0,0.992,0.721,1.715,1.623,1.715h24.713
+ c0.99,0,1.713-0.812,1.713-1.805c0,0,0-10.642,0-12.808C38.977,25.482,9.033,25.572,10.025,25.572z"/>
+ <path fill="#FFEE00" d="M10.07,25.595c0,2.158,0,12.768,0,12.768c0,0.989,0.719,1.708,1.618,1.708h24.635
+ c0.987,0,1.706-0.809,1.706-1.798c0,0,0-10.607,0-12.768C38.93,25.505,9.081,25.595,10.07,25.595z"/>
+ <path fill="#FFEF00" d="M10.114,25.618c0,2.151,0,12.727,0,12.727c0,0.986,0.717,1.703,1.613,1.703h24.555
+ c0.985,0,1.702-0.808,1.702-1.793c0,0,0-10.573,0-12.726C38.881,25.529,9.129,25.618,10.114,25.618z"/>
+ <path fill="#FFF000" d="M10.159,25.642c0,2.145,0,12.686,0,12.686c0,0.982,0.714,1.696,1.608,1.696h24.476
+ c0.981,0,1.696-0.804,1.696-1.786c0,0,0-10.54,0-12.685C38.833,25.553,9.177,25.642,10.159,25.642z"/>
+ <path fill="#FFF100" d="M10.204,25.665c0,2.138,0,12.644,0,12.644c0,0.979,0.712,1.692,1.603,1.692h24.397
+ c0.979,0,1.69-0.802,1.69-1.78c0,0,0-10.507,0-12.644C38.785,25.577,9.225,25.665,10.204,25.665z"/>
+ <path fill="#FFF200" d="M10.249,25.688c0,2.131,0,12.603,0,12.603c0,0.978,0.71,1.688,1.597,1.688h24.318
+ c0.977,0,1.686-0.799,1.686-1.773c0,0,0-10.473,0-12.604C38.736,25.6,9.273,25.688,10.249,25.688z"/>
+ <path fill="#FFF300" d="M10.294,25.71c0,2.125,0,12.562,0,12.562c0,0.975,0.708,1.682,1.592,1.682h24.239
+ c0.973,0,1.68-0.797,1.68-1.77c0,0,0-10.438,0-12.562C38.689,25.624,9.321,25.71,10.294,25.71z"/>
+ <path fill="#FFF400" d="M10.339,25.733c0,2.117,0,12.521,0,12.521c0,0.97,0.705,1.675,1.587,1.675h24.16
+ c0.969,0,1.674-0.793,1.674-1.763c0,0,0-10.403,0-12.521C38.643,25.646,9.369,25.733,10.339,25.733z"/>
+ <path fill="#FFF500" d="M10.384,25.757c0,2.109,0,12.479,0,12.479c0,0.969,0.703,1.67,1.582,1.67h24.081
+ c0.967,0,1.669-0.79,1.669-1.757c0,0,0-10.369,0-12.479C38.596,25.669,9.417,25.757,10.384,25.757z"/>
+ <path fill="#FFF600" d="M10.428,25.779c0,2.104,0,12.438,0,12.438c0,0.965,0.701,1.664,1.577,1.664h24.002
+ c0.964,0,1.663-0.787,1.663-1.75c0,0,0-10.336,0-12.438C38.547,25.693,9.465,25.779,10.428,25.779z"/>
+ <path fill="#FFF700" d="M10.473,25.803c0,2.097,0,12.397,0,12.397c0,0.961,0.698,1.659,1.571,1.659h23.923
+ c0.96,0,1.658-0.786,1.658-1.746c0,0,0-10.302,0-12.397C38.499,25.716,9.513,25.803,10.473,25.803z"/>
+ <path fill="#FFF800" d="M10.518,25.827c0,2.088,0,12.355,0,12.355c0,0.958,0.696,1.654,1.566,1.654h23.844
+ c0.957,0,1.653-0.783,1.653-1.74c0,0,0-10.268,0-12.356C38.451,25.74,9.561,25.827,10.518,25.827z"/>
+ <path fill="#FFF900" d="M10.563,25.849c0,2.083,0,12.316,0,12.316c0,0.953,0.693,1.647,1.561,1.647h23.765
+ c0.953,0,1.647-0.78,1.647-1.733c0,0,0-10.233,0-12.316C38.402,25.763,9.609,25.849,10.563,25.849z"/>
+ <path fill="#FFFA00" d="M10.608,25.872c0,2.075,0,12.275,0,12.275c0,0.951,0.691,1.643,1.556,1.643H35.85
+ c0.95,0,1.643-0.777,1.643-1.729c0,0,0-10.199,0-12.275C38.355,25.786,9.657,25.872,10.608,25.872z"/>
+ <path fill="#FFFB00" d="M10.653,25.896c0,2.068,0,12.232,0,12.232c0,0.949,0.689,1.639,1.55,1.639h23.607
+ c0.946,0,1.637-0.775,1.637-1.723c0,0,0-10.166,0-12.234C38.309,25.81,9.705,25.896,10.653,25.896z"/>
+ <path fill="#FFFC00" d="M10.697,25.917c0,2.062,0,12.193,0,12.193c0,0.945,0.687,1.633,1.545,1.633H35.77
+ c0.944,0,1.631-0.772,1.631-1.718c0,0,0-10.132,0-12.192C38.262,25.833,9.753,25.917,10.697,25.917z"/>
+ <path fill="#FFFD00" d="M10.742,25.941c0,2.056,0,12.151,0,12.151c0,0.941,0.685,1.627,1.541,1.627h23.449
+ c0.939,0,1.625-0.771,1.625-1.711c0,0,0-10.098,0-12.152C38.213,25.856,9.801,25.941,10.742,25.941z"/>
+ <path fill="#FFFE00" d="M10.787,25.964c0,2.048,0,12.11,0,12.11c0,0.939,0.682,1.621,1.535,1.621h23.37
+ c0.938,0,1.619-0.768,1.619-1.705c0,0,0-10.062,0-12.11C38.165,25.88,9.849,25.964,10.787,25.964z"/>
+ <path fill="#FFFF00" d="M10.832,25.987c0,2.041,0,12.07,0,12.07c0,0.936,0.68,1.615,1.53,1.615h23.291
+ c0.936,0,1.615-0.766,1.615-1.699c0,0,0-10.029,0-12.07C38.117,25.903,9.897,25.987,10.832,25.987z"/>
+ </g>
+
+ <linearGradient id="House_Highlight_1_" gradientUnits="userSpaceOnUse" x1="210.0469" y1="-255.9038" x2="210.0469" y2="-269.6733" gradientTransform="matrix(1 0 0 -1 -186 -230)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#FFFF00"/>
+ </linearGradient>
+ <path id="House_Highlight" fill="url(#House_Highlight_1_)" d="M10.832,25.987c0,2.041,0,12.07,0,12.07
+ c0,0.936,0.68,1.615,1.53,1.615h23.291c0.936,0,1.615-0.766,1.615-1.699c0,0,0-10.029,0-12.07
+ C38.117,25.903,9.897,25.987,10.832,25.987z"/>
+ </g>
+ <g id="Roof">
+ <g>
+ <path fill="#006600" d="M22.8,6.963l-17.7,15.1l0,0c-0.3,0.301-0.5,0.801-0.5,1.2c0,0.2,0,0.399,0.1,0.601c0.3,0.6,0.9,1,1.6,1
+ l35.3-0.1c0.801,0,1.4-0.5,1.7-1.201c0.101-0.199,0.101-0.4,0.101-0.6c0-0.5-0.199-1-0.699-1.4L25.4,6.963l0.1,0.1
+ C24.8,6.363,23.7,6.263,22.8,6.963L22.8,6.963z"/>
+ <path fill="#006700" d="M22.803,6.989L5.155,22.044l0,0c-0.299,0.3-0.499,0.799-0.499,1.197c0,0.2,0,0.398,0.1,0.599
+ c0.299,0.598,0.897,0.997,1.595,0.997l35.198-0.1c0.799,0,1.396-0.5,1.695-1.197c0.102-0.198,0.102-0.399,0.102-0.598
+ c0-0.498-0.199-0.997-0.699-1.396L25.396,6.989l0.1,0.099C24.798,6.391,23.701,6.291,22.803,6.989L22.803,6.989z"/>
+ <path fill="#006800" d="M22.807,7.014L5.209,22.026l0,0c-0.298,0.299-0.497,0.796-0.497,1.193c0,0.199,0,0.397,0.1,0.598
+ c0.298,0.596,0.895,0.994,1.591,0.994l35.096-0.1c0.796,0,1.394-0.498,1.69-1.194c0.1-0.198,0.1-0.397,0.1-0.596
+ c0-0.497-0.198-0.995-0.696-1.393l-17.2-14.514l0.099,0.099C24.795,6.417,23.702,6.317,22.807,7.014L22.807,7.014z"/>
+ <path fill="#006900" d="M22.81,7.039L5.264,22.008l0,0c-0.298,0.298-0.496,0.793-0.496,1.189c0,0.198,0,0.396,0.099,0.596
+ c0.297,0.594,0.893,0.99,1.586,0.99l34.995-0.099c0.794,0,1.388-0.497,1.686-1.19c0.101-0.198,0.101-0.397,0.101-0.594
+ c0-0.496-0.198-0.991-0.694-1.389L25.389,7.039l0.1,0.099C24.793,6.444,23.703,6.345,22.81,7.039L22.81,7.039z"/>
+ <path fill="#006A00" d="M22.814,7.064L5.318,21.989l0,0c-0.296,0.298-0.494,0.792-0.494,1.187c0,0.198,0,0.395,0.099,0.594
+ c0.295,0.593,0.89,0.987,1.582,0.987l34.892-0.098c0.793,0,1.386-0.494,1.682-1.187c0.1-0.197,0.1-0.396,0.1-0.593
+ c0-0.494-0.197-0.988-0.691-1.384l-17.1-14.431l0.098,0.099C24.791,6.471,23.704,6.372,22.814,7.064L22.814,7.064z"/>
+ <path fill="#006B00" d="M22.817,7.089L5.373,21.971l0,0C5.077,22.267,4.88,22.76,4.88,23.154c0,0.197,0,0.394,0.099,0.592
+ c0.295,0.591,0.887,0.984,1.577,0.984l34.792-0.099c0.789,0,1.381-0.493,1.676-1.183c0.1-0.196,0.1-0.395,0.1-0.591
+ c0-0.493-0.197-0.986-0.689-1.38L25.381,7.089l0.098,0.098C24.788,6.498,23.705,6.399,22.817,7.089L22.817,7.089z"/>
+ <path fill="#006C00" d="M22.821,7.114L5.427,21.953l0,0c-0.295,0.295-0.492,0.787-0.492,1.179c0,0.197,0,0.393,0.099,0.59
+ c0.294,0.589,0.884,0.981,1.572,0.981l34.688-0.098c0.787,0,1.376-0.492,1.671-1.181c0.1-0.196,0.1-0.393,0.1-0.589
+ c0-0.492-0.196-0.983-0.688-1.376l-17-14.347l0.099,0.098C24.786,6.524,23.706,6.426,22.821,7.114L22.821,7.114z"/>
+ <path fill="#006D00" d="M22.824,7.139L5.481,21.934l0,0c-0.294,0.295-0.49,0.785-0.49,1.176c0,0.196,0,0.391,0.098,0.589
+ c0.293,0.587,0.882,0.98,1.567,0.98l34.587-0.099c0.784,0,1.372-0.49,1.666-1.176c0.099-0.195,0.099-0.393,0.099-0.588
+ c0-0.49-0.195-0.979-0.688-1.372L25.372,7.139l0.099,0.098C24.783,6.551,23.706,6.453,22.824,7.139L22.824,7.139z"/>
+ <path fill="#006E00" d="M22.827,7.164L5.536,21.915l0,0c-0.293,0.294-0.488,0.783-0.488,1.173c0,0.195,0,0.39,0.098,0.587
+ c0.293,0.585,0.879,0.977,1.563,0.977l34.484-0.097c0.783,0,1.369-0.49,1.662-1.173c0.098-0.194,0.098-0.391,0.098-0.586
+ c0-0.489-0.195-0.977-0.684-1.368L25.367,7.164l0.098,0.098C24.781,6.578,23.707,6.48,22.827,7.164L22.827,7.164z"/>
+ <path fill="#006F00" d="M22.831,7.189L5.591,21.897l0,0c-0.292,0.292-0.487,0.78-0.487,1.168c0,0.195,0,0.39,0.097,0.585
+ c0.292,0.584,0.876,0.973,1.558,0.973l34.384-0.097c0.779,0,1.363-0.487,1.655-1.169c0.099-0.194,0.099-0.39,0.099-0.584
+ c0-0.487-0.194-0.974-0.683-1.364L25.363,7.189l0.099,0.098C24.779,6.605,23.708,6.507,22.831,7.189L22.831,7.189z"/>
+ <path fill="#007000" d="M22.834,7.215L5.646,21.879l0,0c-0.292,0.292-0.486,0.778-0.486,1.165c0,0.195,0,0.388,0.098,0.584
+ c0.291,0.582,0.874,0.971,1.554,0.971l34.281-0.098c0.778,0,1.36-0.485,1.651-1.166c0.098-0.193,0.098-0.389,0.098-0.583
+ c0-0.485-0.193-0.971-0.68-1.36L25.359,7.215l0.098,0.097C24.775,6.632,23.709,6.535,22.834,7.215L22.834,7.215z"/>
+ <path fill="#007100" d="M22.838,7.24L5.7,21.86l0,0c-0.291,0.292-0.484,0.775-0.484,1.162c0,0.194,0,0.387,0.097,0.582
+ c0.29,0.58,0.871,0.967,1.549,0.967l34.18-0.096c0.774,0,1.354-0.484,1.646-1.162c0.1-0.193,0.1-0.388,0.1-0.581
+ c0-0.484-0.194-0.968-0.68-1.356L25.355,7.24l0.097,0.097C24.773,6.659,23.709,6.562,22.838,7.24L22.838,7.24z"/>
+ <path fill="#007200" d="M22.842,7.265L5.755,21.842l0,0C5.465,22.133,5.272,22.615,5.272,23c0,0.194,0,0.386,0.097,0.581
+ c0.289,0.578,0.868,0.964,1.544,0.964l34.077-0.096c0.773,0,1.353-0.483,1.642-1.159c0.097-0.192,0.097-0.387,0.097-0.579
+ c0-0.483-0.191-0.965-0.676-1.352L25.352,7.265l0.098,0.096C24.771,6.686,23.711,6.589,22.842,7.265L22.842,7.265z"/>
+ <path fill="#007300" d="M22.845,7.29L5.809,21.824l0,0c-0.29,0.29-0.481,0.771-0.481,1.155c0,0.193,0,0.385,0.096,0.579
+ c0.289,0.577,0.867,0.961,1.54,0.961l33.976-0.097c0.771,0,1.35-0.481,1.638-1.155c0.097-0.192,0.097-0.386,0.097-0.577
+ c0-0.481-0.191-0.963-0.674-1.348L25.348,7.29l0.098,0.096C24.771,6.712,23.711,6.616,22.845,7.29L22.845,7.29z"/>
+ <path fill="#007400" d="M22.848,7.315L5.863,21.805l0,0c-0.288,0.289-0.48,0.769-0.48,1.152c0,0.192,0,0.383,0.096,0.576
+ c0.288,0.575,0.864,0.959,1.535,0.959l33.875-0.096c0.769,0,1.344-0.479,1.631-1.152c0.098-0.191,0.098-0.384,0.098-0.575
+ c0-0.479-0.192-0.959-0.672-1.344L25.344,7.315l0.096,0.096C24.768,6.739,23.712,6.643,22.848,7.315L22.848,7.315z"/>
+ <path fill="#007500" d="M22.852,7.34L5.918,21.787l0,0c-0.288,0.288-0.479,0.767-0.479,1.148c0,0.191,0,0.382,0.096,0.575
+ c0.287,0.574,0.861,0.956,1.53,0.956l33.772-0.096c0.767,0,1.34-0.478,1.627-1.148c0.097-0.19,0.097-0.383,0.097-0.574
+ c0-0.479-0.19-0.957-0.67-1.34L25.34,7.34l0.096,0.095C24.766,6.767,23.713,6.67,22.852,7.34L22.852,7.34z"/>
+ <path fill="#007600" d="M22.855,7.365L5.973,21.768l0,0c-0.287,0.287-0.477,0.764-0.477,1.145c0,0.191,0,0.381,0.095,0.573
+ c0.286,0.572,0.858,0.953,1.526,0.953l33.67-0.095c0.764,0,1.336-0.477,1.622-1.146c0.096-0.19,0.096-0.382,0.096-0.572
+ c0-0.477-0.19-0.954-0.668-1.336L25.336,7.365l0.096,0.095C24.764,6.793,23.714,6.697,22.855,7.365L22.855,7.365z"/>
+ <path fill="#007700" d="M22.858,7.391L6.027,21.75l0,0c-0.286,0.286-0.476,0.762-0.476,1.142c0,0.19,0,0.38,0.095,0.571
+ c0.285,0.57,0.856,0.95,1.521,0.95l33.567-0.095c0.763,0,1.332-0.476,1.617-1.141c0.097-0.189,0.097-0.381,0.097-0.57
+ c0-0.476-0.19-0.951-0.666-1.332L25.331,7.391l0.096,0.095C24.762,6.82,23.715,6.725,22.858,7.391L22.858,7.391z"/>
+ <path fill="#007800" d="M22.862,7.416L6.082,21.731l0,0c-0.285,0.285-0.475,0.759-0.475,1.138c0,0.19,0,0.379,0.095,0.57
+ c0.284,0.568,0.854,0.947,1.517,0.947l33.467-0.095c0.76,0,1.328-0.474,1.61-1.138c0.097-0.189,0.097-0.379,0.097-0.568
+ c0-0.474-0.189-0.948-0.664-1.328L25.327,7.416l0.095,0.095C24.758,6.847,23.716,6.751,22.862,7.416L22.862,7.416z"/>
+ <path fill="#007900" d="M22.865,7.441L6.136,21.713l0,0c-0.284,0.284-0.473,0.757-0.473,1.135c0,0.189,0,0.377,0.095,0.567
+ c0.283,0.567,0.851,0.944,1.512,0.944l33.365-0.094c0.758,0,1.324-0.473,1.607-1.135c0.095-0.188,0.095-0.378,0.095-0.566
+ c0-0.473-0.188-0.945-0.662-1.324L25.323,7.441l0.095,0.094C24.756,6.874,23.716,6.779,22.865,7.441L22.865,7.441z"/>
+ <path fill="#007A00" d="M22.869,7.466L6.19,21.694l0,0c-0.283,0.283-0.471,0.754-0.471,1.131c0,0.188,0,0.376,0.094,0.566
+ c0.283,0.564,0.848,0.941,1.507,0.941l33.263-0.094c0.755,0,1.319-0.471,1.603-1.131c0.096-0.188,0.096-0.377,0.096-0.565
+ c0-0.471-0.188-0.942-0.66-1.32L25.318,7.466l0.095,0.094C24.754,6.901,23.717,6.806,22.869,7.466L22.869,7.466z"/>
+ <path fill="#007B00" d="M22.872,7.491L6.245,21.676l0,0c-0.282,0.283-0.47,0.752-0.47,1.128c0,0.188,0,0.375,0.094,0.564
+ c0.282,0.563,0.846,0.939,1.503,0.939l33.161-0.094c0.753,0,1.316-0.469,1.598-1.127c0.096-0.187,0.096-0.376,0.096-0.563
+ c0-0.47-0.188-0.939-0.658-1.316L25.314,7.491l0.095,0.094C24.751,6.927,23.718,6.833,22.872,7.491L22.872,7.491z"/>
+ <path fill="#007C00" d="M22.876,7.516L6.299,21.658l0,0c-0.281,0.281-0.468,0.75-0.468,1.124c0,0.188,0,0.374,0.094,0.562
+ c0.281,0.562,0.843,0.936,1.499,0.936l33.059-0.093c0.75,0,1.312-0.468,1.594-1.124c0.094-0.187,0.094-0.375,0.094-0.562
+ c0-0.468-0.188-0.937-0.656-1.312L25.312,7.516l0.094,0.094C24.749,6.954,23.719,6.86,22.876,7.516L22.876,7.516z"/>
+ <path fill="#007D00" d="M22.879,7.542L6.354,21.639l0,0c-0.281,0.281-0.467,0.748-0.467,1.121c0,0.187,0,0.373,0.094,0.561
+ c0.28,0.56,0.84,0.933,1.494,0.933l32.958-0.093c0.748,0,1.308-0.467,1.586-1.121c0.096-0.186,0.096-0.374,0.096-0.56
+ c0-0.467-0.188-0.934-0.654-1.307L25.307,7.542L25.4,7.635C24.746,6.981,23.72,6.887,22.879,7.542L22.879,7.542z"/>
+ <path fill="#007E00" d="M22.883,7.566L6.408,21.621l0,0c-0.279,0.28-0.465,0.745-0.465,1.117c0,0.187,0,0.372,0.093,0.559
+ c0.279,0.558,0.838,0.93,1.489,0.93l32.856-0.093c0.746,0,1.305-0.465,1.583-1.117c0.095-0.186,0.095-0.373,0.095-0.559
+ c0-0.465-0.188-0.93-0.652-1.303L25.303,7.566l0.094,0.093C24.744,7.008,23.721,6.915,22.883,7.566L22.883,7.566z"/>
+ <path fill="#007F00" d="M22.886,7.592L6.463,21.603l0,0c-0.279,0.279-0.464,0.743-0.464,1.113c0,0.186,0,0.371,0.093,0.558
+ c0.278,0.556,0.835,0.927,1.484,0.927l32.754-0.092c0.743,0,1.3-0.464,1.577-1.114c0.094-0.185,0.094-0.372,0.094-0.557
+ c0-0.464-0.187-0.928-0.649-1.299L25.299,7.592l0.094,0.092C24.742,7.035,23.722,6.941,22.886,7.592L22.886,7.592z"/>
+ <path fill="#007F00" d="M22.89,7.617L6.518,21.584l0,0c-0.278,0.278-0.462,0.741-0.462,1.11c0,0.185,0,0.369,0.092,0.556
+ c0.276,0.555,0.833,0.924,1.48,0.924l32.651-0.092c0.742,0,1.297-0.462,1.572-1.11c0.094-0.185,0.094-0.371,0.094-0.555
+ c0-0.462-0.186-0.925-0.647-1.295L25.295,7.617l0.094,0.092C24.738,7.062,23.723,6.969,22.89,7.617L22.89,7.617z"/>
+ <path fill="#008000" d="M22.893,7.642L6.572,21.565l0,0c-0.277,0.277-0.461,0.739-0.461,1.107c0,0.185,0,0.368,0.092,0.554
+ c0.276,0.553,0.83,0.921,1.475,0.921l32.55-0.092c0.738,0,1.291-0.461,1.566-1.106c0.094-0.184,0.094-0.369,0.094-0.553
+ c0-0.461-0.185-0.922-0.646-1.292L25.291,7.642l0.093,0.092C24.736,7.088,23.724,6.996,22.893,7.642L22.893,7.642z"/>
+ <path fill="#008100" d="M22.896,7.667l-16.27,13.88l0,0c-0.276,0.277-0.459,0.736-0.459,1.104c0,0.184,0,0.367,0.092,0.552
+ c0.275,0.551,0.827,0.918,1.471,0.918l32.448-0.091c0.736,0,1.288-0.459,1.562-1.104c0.093-0.183,0.093-0.368,0.093-0.551
+ c0-0.459-0.185-0.919-0.644-1.287L25.287,7.667l0.092,0.092C24.734,7.116,23.725,7.023,22.896,7.667L22.896,7.667z"/>
+ <path fill="#008200" d="M22.9,7.692L6.681,21.529l0,0c-0.275,0.275-0.458,0.734-0.458,1.1c0,0.184,0,0.366,0.092,0.55
+ c0.275,0.549,0.825,0.916,1.466,0.916l32.347-0.091c0.733,0,1.284-0.458,1.558-1.1c0.094-0.183,0.094-0.367,0.094-0.55
+ c0-0.458-0.184-0.917-0.643-1.283L25.282,7.692l0.093,0.091C24.732,7.143,23.725,7.05,22.9,7.692L22.9,7.692z"/>
+ <path fill="#008300" d="M22.903,7.717L6.735,21.51l0,0c-0.274,0.275-0.457,0.731-0.457,1.096c0,0.183,0,0.365,0.091,0.549
+ c0.274,0.547,0.822,0.913,1.461,0.913l32.245-0.091c0.731,0,1.28-0.457,1.554-1.096c0.092-0.182,0.092-0.366,0.092-0.548
+ c0-0.457-0.183-0.914-0.64-1.279L25.277,7.717l0.093,0.091C24.73,7.169,23.726,7.078,22.903,7.717L22.903,7.717z"/>
+ <path fill="#008400" d="M22.907,7.742L6.79,21.492l0,0c-0.273,0.274-0.456,0.729-0.456,1.093c0,0.183,0,0.364,0.091,0.547
+ c0.273,0.546,0.82,0.909,1.457,0.909l32.144-0.09c0.729,0,1.274-0.455,1.548-1.093c0.092-0.181,0.092-0.364,0.092-0.546
+ c0-0.455-0.183-0.911-0.638-1.275L25.273,7.742l0.093,0.091C24.729,7.196,23.727,7.105,22.907,7.742L22.907,7.742z"/>
+ <path fill="#008500" d="M22.911,7.768L6.845,21.474l0,0c-0.272,0.273-0.454,0.727-0.454,1.089c0,0.182,0,0.363,0.091,0.546
+ c0.272,0.543,0.817,0.906,1.452,0.906l32.041-0.09c0.729,0,1.271-0.454,1.543-1.089c0.092-0.181,0.092-0.363,0.092-0.544
+ c0-0.454-0.182-0.908-0.635-1.271L25.271,7.768l0.09,0.09C24.727,7.223,23.728,7.132,22.911,7.768L22.911,7.768z"/>
+ <path fill="#008600" d="M22.914,7.792L6.899,21.455l0,0c-0.272,0.272-0.453,0.725-0.453,1.086c0,0.181,0,0.361,0.091,0.543
+ c0.271,0.542,0.814,0.904,1.447,0.904l31.939-0.09c0.726,0,1.269-0.452,1.538-1.086c0.092-0.18,0.092-0.362,0.092-0.542
+ c0-0.452-0.181-0.905-0.634-1.267L25.268,7.792l0.09,0.09C24.725,7.25,23.729,7.159,22.914,7.792L22.914,7.792z"/>
+ <path fill="#008700" d="M22.917,7.818L6.954,21.437l0,0c-0.271,0.271-0.451,0.722-0.451,1.083c0,0.181,0,0.36,0.09,0.542
+ c0.271,0.54,0.812,0.901,1.443,0.901l31.837-0.09c0.723,0,1.264-0.451,1.533-1.082c0.092-0.18,0.092-0.361,0.092-0.541
+ c0-0.451-0.182-0.902-0.633-1.263L25.264,7.818l0.09,0.09C24.723,7.277,23.729,7.186,22.917,7.818L22.917,7.818z"/>
+ <path fill="#008800" d="M22.921,7.843L7.008,21.418l0,0c-0.27,0.27-0.45,0.72-0.45,1.079c0,0.18,0,0.359,0.09,0.54
+ c0.27,0.539,0.809,0.898,1.438,0.898l31.734-0.09c0.722,0,1.261-0.449,1.529-1.079c0.09-0.179,0.09-0.36,0.09-0.539
+ c0-0.449-0.18-0.899-0.629-1.259L25.259,7.843l0.091,0.09C24.719,7.303,23.73,7.213,22.921,7.843L22.921,7.843z"/>
+ <path fill="#008900" d="M22.924,7.868L7.062,21.4l0,0c-0.269,0.269-0.448,0.717-0.448,1.075c0,0.18,0,0.358,0.09,0.539
+ c0.269,0.537,0.807,0.895,1.434,0.895l31.633-0.089c0.72,0,1.256-0.448,1.523-1.075c0.092-0.179,0.092-0.359,0.092-0.538
+ c0-0.448-0.181-0.896-0.629-1.255L25.255,7.868l0.091,0.089C24.717,7.331,23.731,7.241,22.924,7.868L22.924,7.868z"/>
+ <path fill="#008A00" d="M22.928,7.893L7.117,21.381l0,0C6.849,21.65,6.67,22.097,6.67,22.453c0,0.179,0,0.357,0.089,0.537
+ c0.268,0.536,0.804,0.893,1.429,0.893l31.533-0.089c0.715,0,1.252-0.446,1.518-1.072c0.092-0.178,0.092-0.358,0.092-0.536
+ c0-0.446-0.18-0.894-0.626-1.251L25.25,7.893l0.09,0.089C24.714,7.357,23.732,7.268,22.928,7.893L22.928,7.893z"/>
+ <path fill="#008B00" d="M22.931,7.918L7.172,21.363l0,0c-0.268,0.268-0.445,0.713-0.445,1.069c0,0.178,0,0.355,0.089,0.535
+ c0.267,0.534,0.801,0.89,1.424,0.89l31.43-0.089c0.714,0,1.248-0.445,1.514-1.068c0.09-0.178,0.09-0.357,0.09-0.534
+ c0-0.445-0.178-0.891-0.623-1.247L25.246,7.918l0.09,0.089C24.712,7.384,23.733,7.295,22.931,7.918L22.931,7.918z"/>
+ <path fill="#008C00" d="M22.935,7.943L7.227,21.345l0,0c-0.267,0.267-0.444,0.71-0.444,1.065c0,0.178,0,0.354,0.089,0.533
+ c0.266,0.532,0.799,0.887,1.42,0.887l31.328-0.089c0.711,0,1.243-0.443,1.509-1.065c0.09-0.177,0.09-0.355,0.09-0.532
+ c0-0.444-0.178-0.888-0.621-1.243L25.242,7.943l0.089,0.089C24.71,7.411,23.734,7.322,22.935,7.943L22.935,7.943z"/>
+ <path fill="#008D00" d="M22.938,7.968L7.281,21.326l0,0c-0.266,0.266-0.442,0.708-0.442,1.062c0,0.177,0,0.353,0.088,0.532
+ c0.264,0.53,0.796,0.883,1.415,0.883l31.227-0.088c0.709,0,1.24-0.442,1.505-1.062c0.09-0.176,0.09-0.354,0.09-0.53
+ c0-0.442-0.177-0.885-0.62-1.239L25.238,7.968l0.089,0.088C24.707,7.438,23.735,7.349,22.938,7.968L22.938,7.968z"/>
+ <path fill="#008E00" d="M22.941,7.994L7.335,21.308l0,0c-0.265,0.265-0.441,0.706-0.441,1.058c0,0.177,0,0.352,0.088,0.53
+ c0.264,0.528,0.793,0.881,1.411,0.881l31.125-0.088c0.707,0,1.235-0.441,1.5-1.058c0.088-0.176,0.088-0.353,0.088-0.529
+ c0-0.441-0.176-0.882-0.617-1.235L25.234,7.994l0.089,0.088C24.705,7.465,23.736,7.376,22.941,7.994L22.941,7.994z"/>
+ <path fill="#008F00" d="M22.945,8.019L7.39,21.289l0,0c-0.264,0.264-0.44,0.704-0.44,1.055c0,0.176,0,0.351,0.088,0.528
+ c0.263,0.527,0.791,0.878,1.406,0.878l31.022-0.088c0.704,0,1.231-0.439,1.494-1.055c0.089-0.175,0.089-0.352,0.089-0.527
+ c0-0.439-0.176-0.879-0.615-1.231L25.229,8.019l0.09,0.088C24.703,7.492,23.736,7.403,22.945,8.019L22.945,8.019z"/>
+ <path fill="#009000" d="M22.948,8.044L7.444,21.271l0,0c-0.263,0.263-0.438,0.701-0.438,1.051c0,0.175,0,0.35,0.087,0.526
+ c0.263,0.525,0.789,0.875,1.401,0.875l30.921-0.088c0.702,0,1.228-0.438,1.489-1.051c0.089-0.174,0.089-0.351,0.089-0.525
+ c0-0.438-0.177-0.876-0.614-1.227L25.227,8.044l0.088,0.087C24.7,7.519,23.737,7.431,22.948,8.044L22.948,8.044z"/>
+ <path fill="#009100" d="M22.952,8.069L7.499,21.252l0,0c-0.262,0.262-0.437,0.699-0.437,1.048c0,0.175,0,0.349,0.087,0.524
+ c0.262,0.523,0.786,0.872,1.397,0.872l30.819-0.087c0.699,0,1.224-0.436,1.484-1.047c0.088-0.174,0.088-0.35,0.088-0.524
+ c0-0.436-0.174-0.873-0.611-1.223L25.223,8.069l0.088,0.087C24.698,7.545,23.738,7.458,22.952,8.069L22.952,8.069z"/>
+ <path fill="#009200" d="M22.955,8.094L7.553,21.234l0,0c-0.261,0.262-0.435,0.697-0.435,1.044c0,0.174,0,0.347,0.087,0.523
+ c0.259,0.521,0.783,0.869,1.392,0.869l30.717-0.087c0.697,0,1.22-0.435,1.479-1.044c0.088-0.173,0.088-0.348,0.088-0.522
+ c0-0.435-0.174-0.87-0.609-1.218L25.218,8.094l0.089,0.087C24.695,7.572,23.739,7.485,22.955,8.094L22.955,8.094z"/>
+ <path fill="#009300" d="M22.959,8.119L7.608,21.215l0,0c-0.26,0.261-0.434,0.695-0.434,1.041c0,0.174,0,0.346,0.087,0.521
+ c0.26,0.52,0.781,0.867,1.388,0.867l30.615-0.087c0.695,0,1.217-0.434,1.475-1.041c0.089-0.173,0.089-0.348,0.089-0.521
+ c0-0.433-0.175-0.867-0.606-1.214L25.214,8.119l0.088,0.087C24.693,7.599,23.74,7.512,22.959,8.119L22.959,8.119z"/>
+ <path fill="#009400" d="M22.962,8.145l-15.3,13.053l0,0c-0.26,0.26-0.433,0.692-0.433,1.037c0,0.173,0,0.345,0.086,0.52
+ c0.259,0.518,0.778,0.863,1.383,0.863l30.514-0.086c0.692,0,1.212-0.432,1.47-1.038c0.088-0.172,0.088-0.346,0.088-0.519
+ c0-0.432-0.172-0.864-0.605-1.21L25.21,8.145l0.087,0.086C24.691,7.626,23.741,7.539,22.962,8.145L22.962,8.145z"/>
+ <path fill="#009500" d="M22.966,8.169L7.717,21.179l0,0c-0.259,0.259-0.431,0.69-0.431,1.034c0,0.173,0,0.344,0.086,0.518
+ c0.257,0.517,0.775,0.86,1.378,0.86l30.412-0.086c0.689,0,1.207-0.431,1.465-1.034c0.087-0.171,0.087-0.345,0.087-0.517
+ c0-0.431-0.172-0.861-0.604-1.207L25.206,8.169l0.087,0.086C24.688,7.653,23.742,7.566,22.966,8.169L22.966,8.169z"/>
+ <path fill="#009600" d="M22.969,8.195L7.771,21.16l0,0c-0.258,0.258-0.43,0.688-0.43,1.03c0,0.172,0,0.343,0.086,0.516
+ c0.257,0.515,0.773,0.858,1.374,0.858l30.311-0.086c0.688,0,1.203-0.429,1.459-1.03c0.088-0.171,0.088-0.344,0.088-0.515
+ c0-0.429-0.172-0.859-0.602-1.203L25.201,8.195l0.087,0.085C24.688,7.68,23.743,7.593,22.969,8.195L22.969,8.195z"/>
+ <path fill="#009700" d="M22.973,8.22L7.826,21.142l0,0c-0.257,0.257-0.428,0.686-0.428,1.027c0,0.171,0,0.341,0.085,0.514
+ c0.255,0.513,0.771,0.855,1.369,0.855l30.208-0.086c0.687,0,1.198-0.428,1.455-1.027c0.086-0.17,0.086-0.343,0.086-0.513
+ c0-0.428-0.172-0.856-0.6-1.198L25.197,8.22l0.087,0.085C24.686,7.707,23.743,7.621,22.973,8.22L22.973,8.22z"/>
+ <path fill="#009800" d="M22.976,8.245L7.88,21.124l0,0c-0.256,0.256-0.427,0.683-0.427,1.023c0,0.171,0,0.34,0.085,0.512
+ c0.256,0.511,0.768,0.852,1.364,0.852l30.106-0.085c0.684,0,1.195-0.426,1.45-1.023c0.086-0.17,0.086-0.342,0.086-0.512
+ c0-0.426-0.17-0.853-0.599-1.194L25.193,8.245l0.086,0.085C24.682,7.733,23.744,7.647,22.976,8.245L22.976,8.245z"/>
+ <path fill="#009900" d="M22.979,8.27L7.935,21.105l0,0C7.68,21.36,7.51,21.786,7.51,22.125c0,0.17,0,0.339,0.085,0.511
+ c0.255,0.509,0.765,0.849,1.36,0.849L38.959,23.4c0.682,0,1.191-0.425,1.445-1.02c0.086-0.169,0.086-0.34,0.086-0.51
+ c0-0.425-0.17-0.85-0.596-1.19L25.189,8.27l0.086,0.085C24.68,7.76,23.745,7.675,22.979,8.27L22.979,8.27z"/>
+ </g>
+
+ <linearGradient id="Roof_Highlight_1_" gradientUnits="userSpaceOnUse" x1="210" y1="-237.8638" x2="210" y2="-253.4849" gradientTransform="matrix(1 0 0 -1 -186 -230)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#009900"/>
+ </linearGradient>
+ <path id="Roof_Highlight" fill="url(#Roof_Highlight_1_)" d="M22.979,8.27L7.935,21.105l0,0C7.68,21.36,7.51,21.786,7.51,22.125
+ c0,0.17,0,0.339,0.085,0.51c0.255,0.51,0.765,0.85,1.36,0.85L38.959,23.4c0.682,0,1.191-0.425,1.445-1.021
+ c0.086-0.169,0.086-0.34,0.086-0.51c0-0.424-0.17-0.85-0.596-1.189L25.189,8.27l0.086,0.085C24.68,7.76,23.745,7.675,22.979,8.27
+ L22.979,8.27z"/>
+ </g>
+ </g>
+</g>
+<g id="Layer_2">
+ <g id="crop_x0020_marks">
+ <path fill="none" d="M48,47.687H0v-48h48V47.687z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/colorsvg/important.svg b/utils/bcmregtool/elfio/doc/images/colorsvg/important.svg
new file mode 100644
index 0000000..803ad8d
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/colorsvg/important.svg
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Caution" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<g>
+ <path stroke="#FFFFFF" stroke-width="6.6112" d="M42.35,35.841L27.248,9.941c-0.602-1-1.699-1.7-2.899-1.6c-1.2,0-2.3,0.7-2.9,1.7
+ l-14.5,25.901c-0.6,1-0.6,2.299,0,3.299c0.6,1,1.7,1.6,2.9,1.6h29.601c1.199,0,2.301-0.6,2.898-1.697
+ C42.949,38.142,42.949,36.841,42.35,35.841L42.35,35.841z"/>
+ <g>
+ <path fill="#FFFFFF" stroke="#009900" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" d="M24.349,11.586
+ l-14.5,26h29.601L24.349,11.586z"/>
+ <polygon fill="#FFFFFF" stroke="#009A00" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.35,11.611 9.877,37.562 39.42,37.562 "/>
+ <polygon fill="#FFFFFF" stroke="#009B01" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.35,11.637 9.907,37.536 39.391,37.536 "/>
+ <polygon fill="#FFFFFF" stroke="#009C01" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.351,11.662 9.935,37.511 39.361,37.511 "/>
+ <polygon fill="#FFFFFF" stroke="#009D02" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.352,11.688 9.963,37.485 39.334,37.485 "/>
+ <polygon fill="#FFFFFF" stroke="#009E02" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.352,11.712 9.993,37.46 39.305,37.46 "/>
+ <polygon fill="#FFFFFF" stroke="#009F03" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.353,11.738 10.021,37.435 39.275,37.435 "/>
+ <polygon fill="#FFFFFF" stroke="#00A003" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.353,11.763 10.049,37.409 39.248,37.409 "/>
+ <polygon fill="#FFFFFF" stroke="#00A104" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.354,11.789 10.079,37.386 39.219,37.386 "/>
+ <polygon fill="#FFFFFF" stroke="#00A204" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.354,11.813 10.106,37.36 39.189,37.36 "/>
+ <polygon fill="#FFFFFF" stroke="#00A305" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.354,11.838 10.135,37.335 39.16,37.335 "/>
+ <polygon fill="#FFFFFF" stroke="#00A405" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.355,11.864 10.166,37.31 39.133,37.31 "/>
+ <polygon fill="#FFFFFF" stroke="#00A506" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.355,11.89 10.193,37.284 39.104,37.284 "/>
+ <polygon fill="#FFFFFF" stroke="#00A606" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.355,11.915 10.223,37.259 39.074,37.259 "/>
+ <polygon fill="#FFFFFF" stroke="#00A707" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.356,11.939 10.25,37.233 39.047,37.233 "/>
+ <polygon fill="#FFFFFF" stroke="#00A807" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.357,11.965 10.279,37.21 39.018,37.21 "/>
+ <polygon fill="#FFFFFF" stroke="#00A908" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.357,11.99 10.309,37.183 38.988,37.183 "/>
+ <polygon fill="#FFFFFF" stroke="#00AA08" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.357,12.016 10.336,37.157 38.959,37.157 "/>
+ <polygon fill="#FFFFFF" stroke="#00AB09" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.358,12.041 10.367,37.132 38.932,37.132 "/>
+ <polygon fill="#FFFFFF" stroke="#00AC09" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.359,12.066 10.396,37.106 38.902,37.106 "/>
+ <polygon fill="#FFFFFF" stroke="#00AD0A" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.359,12.091 10.423,37.083 38.873,37.083 "/>
+ <polygon fill="#FFFFFF" stroke="#00AE0A" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.36,12.116 10.453,37.056 38.846,37.056 "/>
+ <polygon fill="#FFFFFF" stroke="#00AF0B" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.361,12.142 10.48,37.032 38.816,37.032 "/>
+ <polygon fill="#FFFFFF" stroke="#00B00B" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.362,12.167 10.509,37.007 38.789,37.007 "/>
+ <polygon fill="#FFFFFF" stroke="#00B10C" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.362,12.191 10.539,36.981 38.76,36.981 "/>
+ <polygon fill="#FFFFFF" stroke="#00B20C" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.362,12.217 10.566,36.956 38.729,36.956 "/>
+ <polygon fill="#FFFFFF" stroke="#00B30D" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.363,12.242 10.596,36.931 38.701,36.931 "/>
+ <polygon fill="#FFFFFF" stroke="#00B40D" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.364,12.269 10.625,36.905 38.674,36.905 "/>
+ <polygon fill="#FFFFFF" stroke="#00B50E" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.364,12.293 10.653,36.88 38.645,36.88 "/>
+ <polygon fill="#FFFFFF" stroke="#00B60E" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.366,12.317 10.682,36.854 38.613,36.854 "/>
+ <polygon fill="#FFFFFF" stroke="#00B70F" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.367,12.343 10.71,36.829 38.586,36.829 "/>
+ <polygon fill="#FFFFFF" stroke="#00B80F" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.367,12.37 10.739,36.804 38.559,36.804 "/>
+ <polygon fill="#FFFFFF" stroke="#00B910" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.368,12.395 10.769,36.778 38.527,36.778 "/>
+ <polygon fill="#FFFFFF" stroke="#00BA10" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.368,12.419 10.796,36.755 38.5,36.755 "/>
+ <polygon fill="#FFFFFF" stroke="#00BB11" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.369,12.444 10.826,36.728 38.471,36.728 "/>
+ <polygon fill="#FFFFFF" stroke="#00BC11" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.37,12.469 10.854,36.704 38.441,36.704 "/>
+ <polygon fill="#FFFFFF" stroke="#00BD12" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.37,12.496 10.883,36.677 38.414,36.677 "/>
+ <polygon fill="#FFFFFF" stroke="#00BE12" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.371,12.521 10.912,36.651 38.385,36.651 "/>
+ <polygon fill="#FFFFFF" stroke="#00BF13" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.371,12.545 10.94,36.628 38.355,36.628 "/>
+ <polygon fill="#FFFFFF" stroke="#00C013" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.372,12.57 10.969,36.603 38.328,36.603 "/>
+ <polygon fill="#FFFFFF" stroke="#00C114" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.372,12.595 10.999,36.577 38.299,36.577 "/>
+ <polygon fill="#FFFFFF" stroke="#00C214" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.373,12.622 11.026,36.552 38.27,36.552 "/>
+ <polygon fill="#FFFFFF" stroke="#00C315" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.373,12.646 11.056,36.526 38.242,36.526 "/>
+ <polygon fill="#FFFFFF" stroke="#00C415" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.374,12.672 11.084,36.503 38.213,36.503 "/>
+ <polygon fill="#FFFFFF" stroke="#00C516" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.375,12.696 11.113,36.476 38.184,36.476 "/>
+ <polygon fill="#FFFFFF" stroke="#00C616" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.375,12.721 11.142,36.45 38.154,36.45 "/>
+ <polygon fill="#FFFFFF" stroke="#00C717" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.375,12.748 11.17,36.425 38.127,36.425 "/>
+ <polygon fill="#FFFFFF" stroke="#00C817" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.375,12.773 11.2,36.401 38.098,36.401 "/>
+ <polygon fill="#FFFFFF" stroke="#00C918" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.376,12.797 11.229,36.376 38.068,36.376 "/>
+ <polygon fill="#FFFFFF" stroke="#00CA18" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.376,12.822 11.256,36.349 38.041,36.349 "/>
+ <polygon fill="#FFFFFF" stroke="#00CB19" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.377,12.849 11.286,36.325 38.012,36.325 "/>
+ <polygon fill="#FFFFFF" stroke="#00CC19" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.378,12.875 11.314,36.3 37.982,36.3 "/>
+ <polygon fill="#FFFFFF" stroke="#00CC1A" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.378,12.899 11.342,36.274 37.955,36.274 "/>
+ <polygon fill="#FFFFFF" stroke="#00CD1A" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.379,12.923 11.372,36.249 37.926,36.249 "/>
+ <polygon fill="#FFFFFF" stroke="#00CE1B" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.379,12.949 11.4,36.224 37.896,36.224 "/>
+ <polygon fill="#FFFFFF" stroke="#00CF1B" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.38,12.975 11.43,36.198 37.867,36.198 "/>
+ <polygon fill="#FFFFFF" stroke="#00D01C" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.381,13 11.458,36.173 37.84,36.173 "/>
+ <polygon fill="#FFFFFF" stroke="#00D11C" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.381,13.024 11.486,36.147 37.811,36.147 "/>
+ <polygon fill="#FFFFFF" stroke="#00D21D" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.381,13.05 11.516,36.124 37.781,36.124 "/>
+ <polygon fill="#FFFFFF" stroke="#00D31D" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.382,13.075 11.543,36.097 37.754,36.097 "/>
+ <polygon fill="#FFFFFF" stroke="#00D41E" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.383,13.102 11.572,36.071 37.725,36.071 "/>
+ <polygon fill="#FFFFFF" stroke="#00D51E" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.383,13.126 11.602,36.046 37.695,36.046 "/>
+ <polygon fill="#FFFFFF" stroke="#00D61F" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.384,13.151 11.63,36.022 37.666,36.022 "/>
+ <polygon fill="#FFFFFF" stroke="#00D71F" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.385,13.176 11.66,35.997 37.639,35.997 "/>
+ <polygon fill="#FFFFFF" stroke="#00D820" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.385,13.201 11.688,35.972 37.609,35.972 "/>
+ <polygon fill="#FFFFFF" stroke="#00D920" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.387,13.228 11.716,35.946 37.58,35.946 "/>
+ <polygon fill="#FFFFFF" stroke="#00DA21" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.387,13.252 11.746,35.921 37.553,35.921 "/>
+ <polygon fill="#FFFFFF" stroke="#00DB21" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.388,13.277 11.773,35.896 37.521,35.896 "/>
+ <polygon fill="#FFFFFF" stroke="#00DC22" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.389,13.302 11.802,35.872 37.494,35.872 "/>
+ <polygon fill="#FFFFFF" stroke="#00DD22" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.389,13.327 11.832,35.845 37.465,35.845 "/>
+ <polygon fill="#FFFFFF" stroke="#00DE23" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.39,13.354 11.86,35.819 37.438,35.819 "/>
+ <polygon fill="#FFFFFF" stroke="#00DF23" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.39,13.378 11.89,35.796 37.408,35.796 "/>
+ <polygon fill="#FFFFFF" stroke="#00E024" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.391,13.403 11.917,35.769 37.379,35.769 "/>
+ <polygon fill="#FFFFFF" stroke="#00E124" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.391,13.429 11.946,35.743 37.352,35.743 "/>
+ <polygon fill="#FFFFFF" stroke="#00E225" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.392,13.455 11.976,35.718 37.32,35.718 "/>
+ <polygon fill="#FFFFFF" stroke="#00E325" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.393,13.479 12.003,35.694 37.293,35.694 "/>
+ <polygon fill="#FFFFFF" stroke="#00E426" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.393,13.504 12.033,35.669 37.264,35.669 "/>
+ <polygon fill="#FFFFFF" stroke="#00E526" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.394,13.529 12.062,35.644 37.234,35.644 "/>
+ <polygon fill="#FFFFFF" stroke="#00E627" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.394,13.556 12.09,35.618 37.207,35.618 "/>
+ <polygon fill="#FFFFFF" stroke="#00E727" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.395,13.581 12.12,35.593 37.178,35.593 "/>
+ <polygon fill="#FFFFFF" stroke="#00E828" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.396,13.605 12.147,35.567 37.148,35.567 "/>
+ <polygon fill="#FFFFFF" stroke="#00E928" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.396,13.63 12.176,35.544 37.121,35.544 "/>
+ <polygon fill="#FFFFFF" stroke="#00EA29" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.396,13.655 12.206,35.517 37.092,35.517 "/>
+ <polygon fill="#FFFFFF" stroke="#00EB29" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.396,13.682 12.233,35.491 37.062,35.491 "/>
+ <polygon fill="#FFFFFF" stroke="#00EC2A" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.397,13.707 12.263,35.466 37.035,35.466 "/>
+ <polygon fill="#FFFFFF" stroke="#00ED2A" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.397,13.732 12.292,35.44 37.006,35.44 "/>
+ <polygon fill="#FFFFFF" stroke="#00EE2B" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.398,13.756 12.319,35.417 36.977,35.417 "/>
+ <polygon fill="#FFFFFF" stroke="#00EF2B" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.398,13.782 12.349,35.392 36.949,35.392 "/>
+ <polygon fill="#FFFFFF" stroke="#00F02C" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.399,13.808 12.377,35.366 36.92,35.366 "/>
+ <polygon fill="#FFFFFF" stroke="#00F12C" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.399,13.833 12.407,35.341 36.891,35.341 "/>
+ <polygon fill="#FFFFFF" stroke="#00F22D" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.4,13.858 12.436,35.315 36.861,35.315 "/>
+ <polygon fill="#FFFFFF" stroke="#00F32D" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.401,13.883 12.463,35.29 36.834,35.29 "/>
+ <polygon fill="#FFFFFF" stroke="#00F42E" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.401,13.908 12.493,35.265 36.805,35.265 "/>
+ <polygon fill="#FFFFFF" stroke="#00F52E" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.402,13.934 12.521,35.239 36.775,35.239 "/>
+ <polygon fill="#FFFFFF" stroke="#00F62F" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.402,13.959 12.549,35.214 36.748,35.214 "/>
+ <polygon fill="#FFFFFF" stroke="#00F72F" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.403,13.983 12.579,35.188 36.719,35.188 "/>
+ <polygon fill="#FFFFFF" stroke="#00F830" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.404,14.009 12.607,35.165 36.689,35.165 "/>
+ <polygon fill="#FFFFFF" stroke="#00F930" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.404,14.034 12.637,35.138 36.662,35.138 "/>
+ <polygon fill="#FFFFFF" stroke="#00FA31" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.405,14.061 12.666,35.112 36.633,35.112 "/>
+ <polygon fill="#FFFFFF" stroke="#00FB31" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.405,14.085 12.693,35.089 36.604,35.089 "/>
+ <polygon fill="#FFFFFF" stroke="#00FC32" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.407,14.11 12.723,35.063 36.574,35.063 "/>
+ <polygon fill="#FFFFFF" stroke="#00FD32" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.408,14.135 12.75,35.038 36.547,35.038 "/>
+ <polygon fill="#FFFFFF" stroke="#00FE33" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" points="
+ 24.408,14.16 12.779,35.013 36.518,35.013 "/>
+ <path fill="#FFFFFF" stroke="#00FF33" stroke-width="6.6112" stroke-linecap="round" stroke-linejoin="round" d="M24.409,14.187
+ l-11.6,20.801h23.68L24.409,14.187z"/>
+ </g>
+
+ <linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="582.6475" y1="-987.77" x2="582.6475" y2="-1015.4038" gradientTransform="matrix(1 0 0 -1 -558 -977)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#00FF33"/>
+ </linearGradient>
+ <path fill="url(#XMLID_4_)" d="M39.693,34.153L26.857,12.138c-0.51-0.85-1.443-1.445-2.463-1.36c-1.021,0-1.955,0.595-2.465,1.445
+ L9.604,34.239c-0.511,0.85-0.511,1.953,0,2.805c0.51,0.852,1.444,1.359,2.465,1.359h25.16c1.021,0,1.955-0.51,2.465-1.445
+ C40.203,36.106,40.203,35.003,39.693,34.153L39.693,34.153z"/>
+ <g>
+ <path d="M24.648,33.487c-1.1,0-1.8-0.801-1.8-1.801c0-1.102,0.7-1.801,1.8-1.801c1.1,0,1.801,0.699,1.801,1.801
+ C26.449,32.687,25.748,33.487,24.648,33.487L24.648,33.487z M23.449,28.786l-0.4-9.1h3.2l-0.4,9.1H23.55H23.449z"/>
+ </g>
+</g>
+<g id="crop_x0020_marks">
+ <path fill="none" d="M48.648,48.586h-48v-48h48V48.586z"/>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/colorsvg/next.svg b/utils/bcmregtool/elfio/doc/images/colorsvg/next.svg
new file mode 100644
index 0000000..52b73cf
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/colorsvg/next.svg
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<g>
+ <path fill="#FFFFFF" stroke="#FFFFFF" stroke-width="7.5901" stroke-linejoin="round" d="M22.34,41.101c0,0.301,0.3,0.301,0.5,0.2
+ l16.6-16.899c0.5-0.5,0.4-0.7,0-1l-16.6-16.7c-0.1-0.1-0.4-0.1-0.4,0.1v10H8.84c-0.3,0-0.5,0.2-0.5,0.4v13.299
+ c0,0.4,0.2,0.5,0.6,0.5h13.5L22.34,41.101z"/>
+ <g>
+ <path fill="#0033CC" d="M22.34,41.101c0,0.301,0.3,0.301,0.5,0.2l16.6-16.899c0.5-0.5,0.4-0.7,0-1l-16.6-16.7
+ c-0.1-0.1-0.4-0.1-0.4,0.1v10H8.84c-0.3,0-0.5,0.2-0.5,0.4v13.299c0,0.4,0.2,0.5,0.6,0.5h13.5L22.34,41.101z"/>
+ <path fill="#0134CC" d="M22.351,41.074c0,0.3,0.3,0.3,0.5,0.2L39.427,24.4c0.5-0.499,0.4-0.699,0-0.999L22.85,6.729
+ c-0.1-0.1-0.399-0.1-0.399,0.099v9.984H8.87c-0.299,0-0.5,0.2-0.5,0.4v13.279c0,0.398,0.2,0.499,0.6,0.499H22.45L22.351,41.074z"
+ />
+ <path fill="#0235CD" d="M22.359,41.047c0,0.3,0.299,0.3,0.499,0.2l16.553-16.848c0.5-0.498,0.399-0.697,0-0.997L22.858,6.755
+ c-0.1-0.1-0.399-0.1-0.399,0.1v9.969H8.897c-0.299,0-0.499,0.199-0.499,0.399v13.258c0,0.398,0.2,0.498,0.598,0.498h13.462
+ L22.359,41.047z"/>
+ <path fill="#0336CD" d="M22.369,41.021c0,0.301,0.299,0.301,0.498,0.199l16.53-16.82c0.498-0.498,0.397-0.696,0-0.995
+ L22.866,6.783c-0.1-0.1-0.398-0.1-0.398,0.099v9.953H8.926c-0.299,0-0.498,0.199-0.498,0.398v13.239
+ c0,0.397,0.199,0.496,0.598,0.496h13.442L22.369,41.021z"/>
+ <path fill="#0437CE" d="M22.378,40.994c0,0.299,0.298,0.299,0.497,0.198l16.506-16.794c0.496-0.497,0.397-0.695,0-0.994
+ L22.876,6.81c-0.1-0.1-0.398-0.1-0.398,0.099v9.937H8.956c-0.298,0-0.498,0.199-0.498,0.398v13.217c0,0.397,0.2,0.496,0.597,0.496
+ h13.423L22.378,40.994z"/>
+ <path fill="#0538CE" d="M22.389,40.968c0,0.299,0.298,0.299,0.496,0.198l16.483-16.769c0.496-0.496,0.397-0.694,0-0.992
+ L22.884,6.836c-0.099-0.099-0.397-0.099-0.397,0.099v9.922H8.983c-0.297,0-0.496,0.199-0.496,0.397V30.45
+ c0,0.396,0.199,0.496,0.596,0.496h13.404L22.389,40.968z"/>
+ <path fill="#0639CF" d="M22.398,40.94c0,0.299,0.298,0.299,0.496,0.199l16.46-16.742c0.495-0.496,0.396-0.694,0-0.991
+ L22.894,6.863c-0.099-0.099-0.396-0.099-0.396,0.099v9.906H9.012c-0.297,0-0.496,0.198-0.496,0.396V30.44
+ c0,0.396,0.199,0.494,0.595,0.494h13.386L22.398,40.94z"/>
+ <path fill="#073ACF" d="M22.407,40.914c0,0.298,0.298,0.298,0.495,0.198l16.437-16.716c0.494-0.495,0.396-0.692,0-0.989
+ L22.902,6.891c-0.099-0.099-0.396-0.099-0.396,0.099v9.891H9.041c-0.296,0-0.495,0.198-0.495,0.396v13.154
+ c0,0.396,0.198,0.493,0.594,0.493h13.367L22.407,40.914z"/>
+ <path fill="#083BD0" d="M22.417,40.888c0,0.297,0.297,0.297,0.495,0.198l16.413-16.689c0.494-0.494,0.396-0.691,0-0.987
+ L22.912,6.917c-0.099-0.099-0.396-0.099-0.396,0.099v9.875H9.069c-0.296,0-0.494,0.198-0.494,0.396v13.133
+ c0,0.395,0.198,0.493,0.594,0.493h13.347L22.417,40.888z"/>
+ <path fill="#093CD0" d="M22.426,40.86c0,0.297,0.296,0.297,0.493,0.197l16.39-16.662c0.492-0.494,0.395-0.69,0-0.986L22.919,6.943
+ c-0.099-0.099-0.395-0.099-0.395,0.098v9.86H9.099c-0.296,0-0.494,0.197-0.494,0.395V30.41c0,0.396,0.198,0.493,0.593,0.493
+ h13.328L22.426,40.86z"/>
+ <path fill="#0A3DD1" d="M22.437,40.834c0,0.297,0.296,0.297,0.493,0.196l16.367-16.636c0.492-0.493,0.395-0.689,0-0.984
+ L22.928,6.97c-0.099-0.099-0.394-0.099-0.394,0.098v9.844H9.127c-0.296,0-0.493,0.197-0.493,0.394v13.093
+ c0,0.395,0.197,0.492,0.592,0.492h13.309L22.437,40.834z"/>
+ <path fill="#0B3ED1" d="M22.445,40.808c0,0.297,0.296,0.297,0.492,0.197l16.343-16.61c0.492-0.492,0.395-0.688,0-0.982
+ L22.938,6.999C22.84,6.9,22.544,6.9,22.544,7.097v9.829H9.155c-0.295,0-0.493,0.196-0.493,0.394v13.072
+ c0,0.394,0.198,0.49,0.591,0.49h13.29L22.445,40.808z"/>
+ <path fill="#0C3FD2" d="M22.456,40.78c0,0.296,0.295,0.296,0.492,0.197l16.319-16.584c0.49-0.491,0.395-0.687,0-0.982
+ L22.946,7.024c-0.098-0.098-0.393-0.098-0.393,0.098v9.813H9.185c-0.294,0-0.492,0.196-0.492,0.393v13.05
+ c0,0.394,0.197,0.491,0.59,0.491h13.271L22.456,40.78z"/>
+ <path fill="#0D40D2" d="M22.464,40.754c0,0.295,0.294,0.295,0.491,0.196l16.295-16.558c0.489-0.49,0.393-0.686,0-0.98
+ L22.956,7.051c-0.099-0.098-0.393-0.098-0.393,0.097v9.797H9.212c-0.294,0-0.49,0.197-0.49,0.393v13.031
+ c0,0.393,0.196,0.489,0.588,0.489h13.252L22.464,40.754z"/>
+ <path fill="#0E41D3" d="M22.475,40.728c0,0.295,0.294,0.295,0.49,0.196l16.272-16.531c0.49-0.489,0.394-0.684,0-0.978L22.964,7.08
+ c-0.098-0.098-0.392-0.098-0.392,0.097v9.782H9.241c-0.294,0-0.49,0.196-0.49,0.392v13.01c0,0.392,0.196,0.488,0.588,0.488h13.233
+ L22.475,40.728z"/>
+ <path fill="#0F42D3" d="M22.483,40.701c0,0.294,0.294,0.294,0.49,0.194l16.248-16.504c0.488-0.488,0.393-0.683,0-0.977
+ L22.974,7.105c-0.098-0.098-0.391-0.098-0.391,0.097v9.767H9.271c-0.293,0-0.489,0.195-0.489,0.391v12.988
+ c0,0.392,0.196,0.487,0.587,0.487h13.214L22.483,40.701z"/>
+ <path fill="#1043D4" d="M22.494,40.675c0,0.293,0.294,0.293,0.489,0.194l16.226-16.478c0.487-0.488,0.392-0.683,0-0.975
+ L22.982,7.132c-0.098-0.098-0.391-0.098-0.391,0.097v9.751H9.298c-0.293,0-0.489,0.195-0.489,0.39v12.967
+ c0,0.392,0.196,0.487,0.586,0.487H22.59L22.494,40.675z"/>
+ <path fill="#1144D4" d="M22.502,40.647c0,0.293,0.293,0.293,0.488,0.194L39.191,24.39c0.487-0.487,0.392-0.682,0-0.974
+ L22.991,7.16c-0.098-0.098-0.391-0.098-0.391,0.097v9.735H9.328c-0.293,0-0.488,0.195-0.488,0.39v12.948
+ c0,0.39,0.195,0.486,0.585,0.486h13.176L22.502,40.647z"/>
+ <path fill="#1245D5" d="M22.514,40.621c0,0.292,0.292,0.292,0.487,0.194L39.177,24.39c0.488-0.486,0.392-0.68,0-0.972L23,7.188
+ c-0.098-0.098-0.39-0.098-0.39,0.096v9.72H9.356c-0.292,0-0.487,0.195-0.487,0.39v12.926c0,0.39,0.195,0.486,0.585,0.486H22.61
+ L22.514,40.621z"/>
+ <path fill="#1346D5" d="M22.522,40.595c0,0.292,0.292,0.292,0.487,0.194L39.165,24.39c0.485-0.485,0.389-0.679,0-0.97
+ L23.009,7.213c-0.098-0.097-0.389-0.097-0.389,0.097v9.704H9.384c-0.292,0-0.486,0.194-0.486,0.389V30.31
+ c0,0.389,0.195,0.484,0.584,0.484h13.138L22.522,40.595z"/>
+ <path fill="#1447D6" d="M22.531,40.567c0,0.291,0.292,0.291,0.486,0.193l16.132-16.372c0.484-0.484,0.389-0.678,0-0.969
+ L23.018,7.241c-0.097-0.097-0.389-0.097-0.389,0.097v9.688H9.414c-0.292,0-0.486,0.194-0.486,0.388v12.885
+ c0,0.388,0.195,0.483,0.583,0.483h13.118L22.531,40.567z"/>
+ <path fill="#1548D6" d="M22.542,40.541c0,0.291,0.292,0.291,0.485,0.192l16.107-16.346c0.484-0.484,0.389-0.677,0-0.968
+ L23.026,7.268c-0.097-0.097-0.388-0.097-0.388,0.097v9.672H9.441c-0.291,0-0.485,0.194-0.485,0.388v12.865
+ c0,0.388,0.194,0.483,0.582,0.483h13.099L22.542,40.541z"/>
+ <path fill="#1649D7" d="M22.551,40.515c0,0.291,0.291,0.291,0.484,0.193l16.083-16.321c0.485-0.483,0.389-0.676,0-0.966
+ L23.036,7.294c-0.097-0.097-0.388-0.097-0.388,0.096v9.657H9.47c-0.291,0-0.484,0.193-0.484,0.387v12.844
+ c0,0.387,0.194,0.481,0.582,0.481h13.08L22.551,40.515z"/>
+ <path fill="#174AD7" d="M22.561,40.487c0,0.291,0.291,0.291,0.484,0.193l16.061-16.294c0.483-0.482,0.388-0.674,0-0.964
+ L23.044,7.321c-0.097-0.096-0.387-0.096-0.387,0.097v9.641H9.5c-0.29,0-0.483,0.193-0.483,0.386v12.823
+ c0,0.387,0.193,0.481,0.58,0.481h13.062L22.561,40.487z"/>
+ <path fill="#184BD8" d="M22.57,40.462c0,0.289,0.29,0.289,0.483,0.191l16.038-16.267c0.481-0.481,0.387-0.673,0-0.962
+ L23.053,7.349c-0.097-0.096-0.387-0.096-0.387,0.096v9.626H9.527c-0.29,0-0.483,0.193-0.483,0.385v12.802
+ c0,0.386,0.193,0.481,0.58,0.481h13.042L22.57,40.462z"/>
+ <path fill="#194CD8" d="M22.58,40.435c0,0.289,0.29,0.289,0.482,0.192l16.014-16.242c0.481-0.481,0.387-0.672,0-0.961
+ L23.062,7.375c-0.097-0.096-0.386-0.096-0.386,0.096v9.611H9.557c-0.289,0-0.482,0.192-0.482,0.385v12.782
+ c0,0.384,0.193,0.479,0.579,0.479h13.023L22.58,40.435z"/>
+ <path fill="#1A4DD9" d="M22.589,40.408c0,0.288,0.289,0.288,0.482,0.192l15.99-16.216c0.48-0.48,0.386-0.672,0-0.959L23.071,7.402
+ c-0.097-0.096-0.385-0.096-0.385,0.095v9.595H9.585c-0.289,0-0.482,0.192-0.482,0.384v12.761c0,0.385,0.193,0.479,0.578,0.479
+ h13.004L22.589,40.408z"/>
+ <path fill="#1B4ED9" d="M22.6,40.382c0,0.288,0.289,0.288,0.481,0.192l15.967-16.19c0.48-0.479,0.385-0.67,0-0.958L23.081,7.43
+ c-0.096-0.096-0.384-0.096-0.384,0.095v9.58H9.614c-0.288,0-0.481,0.192-0.481,0.384v12.741c0,0.383,0.193,0.478,0.577,0.478
+ h12.985L22.6,40.382z"/>
+ <path fill="#1C4FDA" d="M22.608,40.354c0,0.289,0.289,0.289,0.48,0.192l15.943-16.164c0.479-0.478,0.386-0.669,0-0.957
+ L23.088,7.457c-0.096-0.096-0.384-0.096-0.384,0.095v9.564H9.643c-0.288,0-0.48,0.191-0.48,0.383v12.719
+ c0,0.383,0.192,0.479,0.577,0.479h12.966L22.608,40.354z"/>
+ <path fill="#1D50DA" d="M22.619,40.328c0,0.287,0.288,0.287,0.479,0.19l15.92-16.136c0.479-0.478,0.384-0.668,0-0.955
+ L23.098,7.482c-0.096-0.096-0.384-0.096-0.384,0.095v9.548H9.67c-0.288,0-0.479,0.191-0.479,0.382v12.699
+ c0,0.382,0.191,0.479,0.575,0.479h12.947L22.619,40.328z"/>
+ <path fill="#1E51DB" d="M22.628,40.302c0,0.287,0.288,0.287,0.479,0.191l15.896-16.111c0.479-0.477,0.385-0.667,0-0.954
+ L23.106,7.51c-0.096-0.096-0.383-0.096-0.383,0.094v9.533H9.699c-0.287,0-0.479,0.191-0.479,0.382v12.679
+ c0,0.382,0.191,0.477,0.575,0.477h12.928L22.628,40.302z"/>
+ <path fill="#1F52DB" d="M22.637,40.274c0,0.287,0.288,0.287,0.479,0.19L38.99,24.381c0.478-0.476,0.382-0.666,0-0.952
+ L23.115,7.538c-0.095-0.096-0.382-0.096-0.382,0.094v9.517H9.729c-0.287,0-0.478,0.191-0.478,0.381v12.657
+ c0,0.381,0.191,0.477,0.574,0.477h12.909L22.637,40.274z"/>
+ <path fill="#2053DC" d="M22.647,40.249c0,0.285,0.287,0.285,0.478,0.189l15.85-16.058c0.477-0.475,0.382-0.665,0-0.95
+ L23.125,7.563c-0.096-0.095-0.382-0.095-0.382,0.095v9.501H9.757c-0.286,0-0.478,0.19-0.478,0.381v12.636
+ c0,0.381,0.191,0.475,0.573,0.475h12.89L22.647,40.249z"/>
+ <path fill="#2154DC" d="M22.656,40.222c0,0.285,0.287,0.285,0.477,0.19L38.96,24.38c0.477-0.475,0.381-0.664,0-0.949L23.133,7.59
+ c-0.096-0.095-0.382-0.095-0.382,0.095v9.486H9.786c-0.286,0-0.477,0.19-0.477,0.38v12.617c0,0.379,0.191,0.474,0.572,0.474
+ h12.871L22.656,40.222z"/>
+ <path fill="#2255DD" d="M22.667,40.194c0,0.285,0.286,0.285,0.477,0.189l15.802-16.004c0.476-0.474,0.382-0.663,0-0.947
+ L23.143,7.618c-0.096-0.095-0.381-0.095-0.381,0.094v9.471H9.814c-0.285,0-0.476,0.189-0.476,0.379v12.596
+ c0,0.379,0.191,0.473,0.572,0.473h12.851L22.667,40.194z"/>
+ <path fill="#2356DD" d="M22.675,40.169c0,0.284,0.286,0.284,0.476,0.189l15.779-15.979c0.475-0.473,0.381-0.662,0-0.945
+ L23.151,7.645c-0.095-0.094-0.38-0.094-0.38,0.094v9.455H9.843c-0.285,0-0.475,0.189-0.475,0.378v12.574
+ c0,0.379,0.19,0.474,0.571,0.474h12.832L22.675,40.169z"/>
+ <path fill="#2457DE" d="M22.686,40.144c0,0.282,0.285,0.282,0.475,0.188l15.756-15.953c0.474-0.472,0.379-0.66,0-0.944
+ L23.159,7.671c-0.095-0.094-0.379-0.094-0.379,0.094v9.439H9.873c-0.285,0-0.475,0.189-0.475,0.378v12.554
+ c0,0.378,0.19,0.472,0.569,0.472H22.78L22.686,40.144z"/>
+ <path fill="#2558DE" d="M22.694,40.115c0,0.282,0.285,0.282,0.474,0.188l15.733-15.925c0.473-0.471,0.379-0.66,0-0.942
+ L23.168,7.698c-0.095-0.094-0.379-0.094-0.379,0.094v9.424H9.9c-0.284,0-0.474,0.189-0.474,0.377v12.535
+ c0,0.376,0.189,0.471,0.568,0.471h12.794L22.694,40.115z"/>
+ <path fill="#2659DF" d="M22.705,40.089c0,0.283,0.284,0.283,0.473,0.188l15.708-15.899c0.474-0.471,0.38-0.659,0-0.941
+ L23.177,7.726c-0.095-0.094-0.379-0.094-0.379,0.094v9.408H9.929c-0.284,0-0.473,0.188-0.473,0.377v12.514
+ c0,0.376,0.189,0.469,0.568,0.469h12.775L22.705,40.089z"/>
+ <path fill="#275ADF" d="M22.714,40.063c0,0.281,0.284,0.281,0.473,0.188l15.685-15.874c0.473-0.47,0.379-0.658,0-0.939
+ L23.188,7.752c-0.095-0.094-0.378-0.094-0.378,0.094v9.392H9.958c-0.283,0-0.472,0.188-0.472,0.376v12.492
+ c0,0.375,0.189,0.47,0.567,0.47H22.81L22.714,40.063z"/>
+ <path fill="#285BE0" d="M22.724,40.036c0,0.281,0.283,0.281,0.472,0.188l15.662-15.847c0.472-0.469,0.378-0.656,0-0.938
+ L23.195,7.779c-0.095-0.094-0.377-0.094-0.377,0.094v9.376H9.986c-0.283,0-0.472,0.188-0.472,0.375v12.472
+ c0,0.375,0.189,0.467,0.566,0.467h12.737L22.724,40.036z"/>
+ <path fill="#295CE0" d="M22.732,40.009c0,0.281,0.283,0.281,0.471,0.188l15.639-15.82c0.471-0.468,0.377-0.655,0-0.936
+ L23.205,7.807c-0.094-0.094-0.377-0.094-0.377,0.093v9.361H10.016c-0.283,0-0.471,0.188-0.471,0.375v12.451
+ c0,0.374,0.188,0.468,0.565,0.468h12.718L22.732,40.009z"/>
+ <path fill="#2A5DE1" d="M22.742,39.981c0,0.28,0.283,0.28,0.47,0.188l15.615-15.793c0.471-0.468,0.377-0.654,0-0.935L23.212,7.833
+ c-0.094-0.094-0.376-0.094-0.376,0.093v9.345H10.044c-0.282,0-0.471,0.188-0.471,0.375v12.431c0,0.374,0.188,0.467,0.565,0.467
+ h12.699L22.742,39.981z"/>
+ <path fill="#2B5EE1" d="M22.752,39.956c0,0.279,0.282,0.279,0.469,0.188l15.592-15.768c0.469-0.467,0.376-0.653,0-0.933
+ L23.223,7.86c-0.094-0.093-0.375-0.093-0.375,0.093v9.331H10.072c-0.282,0-0.47,0.187-0.47,0.373v12.41
+ c0,0.373,0.188,0.466,0.563,0.466h12.68L22.752,39.956z"/>
+ <path fill="#2C5FE2" d="M22.761,39.929c0,0.28,0.282,0.28,0.469,0.188l15.567-15.742c0.47-0.466,0.377-0.652,0-0.932L23.231,7.887
+ c-0.094-0.093-0.375-0.093-0.375,0.092v9.315H10.102c-0.281,0-0.469,0.187-0.469,0.373v12.388c0,0.372,0.188,0.465,0.563,0.465
+ h12.661L22.761,39.929z"/>
+ <path fill="#2D60E2" d="M22.771,39.901c0,0.279,0.281,0.279,0.469,0.187l15.544-15.714c0.469-0.465,0.375-0.65,0-0.93
+ L23.239,7.914c-0.094-0.093-0.375-0.093-0.375,0.093v9.299H10.129c-0.28,0-0.468,0.186-0.468,0.373v12.367
+ c0,0.372,0.188,0.465,0.562,0.465h12.642L22.771,39.901z"/>
+ <path fill="#2E61E3" d="M22.781,39.876c0,0.277,0.281,0.277,0.468,0.186l15.521-15.688c0.468-0.464,0.375-0.649,0-0.928
+ L23.25,7.94c-0.094-0.093-0.375-0.093-0.375,0.092v9.284H10.158c-0.28,0-0.467,0.186-0.467,0.372v12.347
+ c0,0.372,0.188,0.464,0.561,0.464h12.623L22.781,39.876z"/>
+ <path fill="#2F62E3" d="M22.792,39.851c0,0.277,0.28,0.277,0.467,0.186l15.499-15.663c0.466-0.464,0.373-0.649,0-0.927
+ l-15.5-15.479c-0.093-0.092-0.374-0.092-0.374,0.092v9.268H10.188c-0.28,0-0.467,0.186-0.467,0.372v12.325
+ c0,0.371,0.187,0.463,0.56,0.463h12.604L22.792,39.851z"/>
+ <path fill="#3063E4" d="M22.799,39.821c0,0.279,0.281,0.279,0.467,0.187l15.475-15.636c0.465-0.463,0.373-0.648,0-0.925
+ L23.267,7.995c-0.093-0.092-0.373-0.092-0.373,0.092v9.252H10.215c-0.279,0-0.466,0.185-0.466,0.371v12.305
+ c0,0.369,0.187,0.461,0.56,0.461h12.584L22.799,39.821z"/>
+ <path fill="#3164E4" d="M22.81,39.796c0,0.277,0.28,0.277,0.466,0.186l15.451-15.61c0.465-0.462,0.372-0.646,0-0.924L23.275,8.021
+ c-0.094-0.092-0.373-0.092-0.373,0.092v9.237H10.245c-0.279,0-0.465,0.185-0.465,0.37v12.285c0,0.369,0.187,0.461,0.559,0.461
+ h12.565L22.81,39.796z"/>
+ <path fill="#3265E5" d="M22.819,39.771c0,0.276,0.279,0.276,0.465,0.185l15.428-15.583c0.465-0.461,0.373-0.646,0-0.922
+ L23.284,8.048c-0.093-0.092-0.372-0.092-0.372,0.092v9.221H10.273c-0.279,0-0.464,0.185-0.464,0.37v12.265
+ c0,0.369,0.186,0.46,0.558,0.46h12.546L22.819,39.771z"/>
+ <path fill="#3366E5" d="M22.83,39.743c0,0.275,0.278,0.275,0.464,0.185l15.404-15.557c0.464-0.46,0.371-0.645,0-0.921
+ L23.293,8.076c-0.093-0.092-0.372-0.092-0.372,0.092v9.206h-12.62c-0.278,0-0.464,0.184-0.464,0.369v12.243
+ c0,0.369,0.186,0.461,0.557,0.461h12.527L22.83,39.743z"/>
+ <path fill="#3366E6" d="M22.838,39.716c0,0.276,0.278,0.276,0.464,0.186l15.38-15.532c0.463-0.459,0.371-0.643,0-0.918
+ L23.302,8.103c-0.093-0.092-0.371-0.092-0.371,0.091v9.19H10.331c-0.278,0-0.463,0.185-0.463,0.368v12.222
+ c0,0.368,0.186,0.459,0.556,0.459h12.508L22.838,39.716z"/>
+ <path fill="#3467E6" d="M22.849,39.688c0,0.275,0.278,0.275,0.463,0.185l15.357-15.504c0.461-0.458,0.369-0.642,0-0.917
+ L23.312,8.129C23.217,8.038,22.94,8.038,22.94,8.22v9.174H10.358c-0.277,0-0.462,0.184-0.462,0.368v12.203
+ c0,0.366,0.185,0.458,0.555,0.458H22.94L22.849,39.688z"/>
+ <path fill="#3568E7" d="M22.857,39.663c0,0.275,0.277,0.275,0.462,0.184l15.333-15.478c0.461-0.458,0.37-0.641,0-0.916
+ L23.319,8.156c-0.093-0.092-0.37-0.092-0.37,0.091v9.159H10.387c-0.277,0-0.461,0.184-0.461,0.367v12.182
+ c0,0.366,0.185,0.457,0.554,0.457h12.47L22.857,39.663z"/>
+ <path fill="#3669E7" d="M22.867,39.637c0,0.274,0.277,0.274,0.461,0.183l15.31-15.452c0.461-0.458,0.368-0.64,0-0.915
+ l-15.31-15.27c-0.092-0.091-0.369-0.091-0.369,0.091v9.143H10.417c-0.277,0-0.461,0.184-0.461,0.366v12.16
+ c0,0.365,0.184,0.457,0.553,0.457h12.451L22.867,39.637z"/>
+ <path fill="#376AE8" d="M22.877,39.608c0,0.274,0.276,0.274,0.46,0.184l15.287-15.425c0.461-0.457,0.369-0.639,0-0.913
+ L23.337,8.21c-0.092-0.091-0.368-0.091-0.368,0.091v9.127H10.445c-0.276,0-0.46,0.183-0.46,0.366v12.14
+ c0,0.365,0.184,0.455,0.552,0.455h12.432L22.877,39.608z"/>
+ <path fill="#386BE8" d="M22.886,39.583c0,0.273,0.276,0.273,0.46,0.184l15.263-15.4c0.459-0.456,0.368-0.638,0-0.911L23.347,8.237
+ c-0.092-0.091-0.368-0.091-0.368,0.091v9.112H10.474c-0.275,0-0.459,0.183-0.459,0.365v12.119c0,0.363,0.184,0.454,0.552,0.454
+ h12.413L22.886,39.583z"/>
+ <path fill="#396CE9" d="M22.896,39.558c0,0.272,0.276,0.272,0.459,0.182l15.239-15.374c0.459-0.455,0.367-0.637,0-0.91
+ L23.355,8.265c-0.092-0.091-0.368-0.091-0.368,0.09v9.097H10.502c-0.275,0-0.459,0.183-0.459,0.364v12.099
+ c0,0.364,0.184,0.454,0.551,0.454h12.394L22.896,39.558z"/>
+ <path fill="#3A6DE9" d="M22.905,39.528c0,0.273,0.276,0.273,0.459,0.184l15.217-15.348c0.457-0.454,0.366-0.635,0-0.908
+ L23.364,8.292c-0.092-0.091-0.367-0.091-0.367,0.09v9.081H10.531c-0.275,0-0.458,0.182-0.458,0.364v12.079
+ c0,0.361,0.184,0.453,0.55,0.453h12.374L22.905,39.528z"/>
+ <path fill="#3B6EEA" d="M22.916,39.503c0,0.271,0.275,0.271,0.458,0.182l15.193-15.32c0.456-0.453,0.366-0.634,0-0.906
+ L23.374,8.318c-0.092-0.091-0.366-0.091-0.366,0.09v9.065H10.56c-0.274,0-0.458,0.182-0.458,0.363v12.057
+ c0,0.362,0.183,0.453,0.549,0.453h12.355L22.916,39.503z"/>
+ <path fill="#3C6FEA" d="M22.924,39.478c0,0.271,0.274,0.271,0.457,0.181l15.17-15.294c0.455-0.453,0.365-0.633,0-0.905
+ L23.381,8.344c-0.092-0.09-0.366-0.09-0.366,0.09v9.05H10.588c-0.274,0-0.457,0.181-0.457,0.363v12.036
+ c0,0.361,0.183,0.451,0.548,0.451h12.336L22.924,39.478z"/>
+ <path fill="#3D70EB" d="M22.935,39.45c0,0.271,0.274,0.271,0.456,0.181l15.146-15.269c0.455-0.452,0.365-0.632,0-0.904
+ L23.391,8.373c-0.091-0.09-0.365-0.09-0.365,0.09v9.034H10.617c-0.274,0-0.456,0.181-0.456,0.362v12.017
+ c0,0.36,0.182,0.45,0.547,0.45h12.317L22.935,39.45z"/>
+ <path fill="#3E71EB" d="M22.943,39.424c0,0.271,0.274,0.271,0.456,0.181l15.123-15.243c0.455-0.451,0.363-0.631,0-0.902
+ L23.399,8.398c-0.091-0.09-0.365-0.09-0.365,0.09v9.019h-12.39c-0.273,0-0.455,0.181-0.455,0.361v11.994
+ c0,0.361,0.182,0.451,0.546,0.451h12.298L22.943,39.424z"/>
+ <path fill="#3F72EC" d="M22.954,39.397c0,0.271,0.273,0.271,0.455,0.181l15.099-15.217c0.455-0.45,0.365-0.63,0-0.9L23.408,8.425
+ c-0.091-0.09-0.364-0.09-0.364,0.089v9.003h-12.37c-0.272,0-0.455,0.18-0.455,0.361v11.974c0,0.359,0.182,0.449,0.546,0.449
+ h12.279L22.954,39.397z"/>
+ <path fill="#4073EC" d="M22.962,39.37c0,0.27,0.273,0.27,0.455,0.18l15.076-15.188c0.453-0.45,0.363-0.629,0-0.898L23.417,8.453
+ c-0.091-0.09-0.363-0.09-0.363,0.089v8.988H10.704c-0.272,0-0.454,0.18-0.454,0.36v11.954c0,0.358,0.182,0.448,0.545,0.448h12.26
+ L22.962,39.37z"/>
+ <path fill="#4174ED" d="M22.973,39.344c0,0.271,0.272,0.271,0.454,0.181L38.479,24.36c0.452-0.449,0.362-0.628,0-0.897
+ L23.426,8.48c-0.091-0.09-0.363-0.09-0.363,0.089v8.972H10.731c-0.272,0-0.453,0.18-0.453,0.359v11.933
+ c0,0.357,0.181,0.447,0.544,0.447h12.241L22.973,39.344z"/>
+ <path fill="#4275ED" d="M22.982,39.315c0,0.271,0.272,0.271,0.453,0.181l15.028-15.137c0.453-0.448,0.363-0.626,0-0.896
+ L23.436,8.506c-0.091-0.09-0.362-0.09-0.362,0.089v8.957H10.76c-0.271,0-0.453,0.18-0.453,0.358v11.913
+ c0,0.357,0.181,0.445,0.543,0.445h12.222L22.982,39.315z"/>
+ <path fill="#4376EE" d="M22.991,39.29c0,0.27,0.272,0.27,0.453,0.179l15.005-15.109c0.451-0.447,0.362-0.625,0-0.894L23.444,8.534
+ c-0.091-0.089-0.362-0.089-0.362,0.089v8.94H10.79c-0.271,0-0.452,0.18-0.452,0.358v11.893c0,0.355,0.181,0.444,0.542,0.444
+ h12.203L22.991,39.29z"/>
+ <path fill="#4477EE" d="M23.001,39.265c0,0.268,0.271,0.268,0.452,0.178l14.981-15.083c0.449-0.446,0.361-0.625,0-0.893
+ L23.454,8.561c-0.091-0.089-0.361-0.089-0.361,0.089v8.925H10.817c-0.271,0-0.451,0.179-0.451,0.357v11.87
+ c0,0.356,0.181,0.445,0.542,0.445h12.184L23.001,39.265z"/>
+ <path fill="#4578EF" d="M23.01,39.237c0,0.268,0.271,0.268,0.451,0.178l14.959-15.058c0.449-0.445,0.359-0.624,0-0.891
+ L23.461,8.587c-0.09-0.089-0.361-0.089-0.361,0.089v8.91H10.847c-0.27,0-0.45,0.179-0.45,0.356v11.851
+ c0,0.354,0.18,0.444,0.541,0.444h12.165L23.01,39.237z"/>
+ <path fill="#4679EF" d="M23.021,39.21c0,0.268,0.271,0.268,0.45,0.18l14.935-15.032c0.449-0.445,0.36-0.623,0-0.889L23.47,8.614
+ c-0.09-0.089-0.36-0.089-0.36,0.089v8.894H10.875c-0.27,0-0.45,0.179-0.45,0.356v11.83c0,0.354,0.18,0.444,0.54,0.444H23.11
+ L23.021,39.21z"/>
+ <path fill="#477AF0" d="M23.03,39.185c0,0.267,0.27,0.267,0.449,0.178l14.912-15.005c0.447-0.444,0.359-0.622,0-0.888
+ L23.479,8.642c-0.09-0.089-0.359-0.089-0.359,0.088v8.878H10.903c-0.27,0-0.449,0.178-0.449,0.356v11.809
+ c0,0.354,0.18,0.441,0.539,0.441h12.127L23.03,39.185z"/>
+ <path fill="#487BF0" d="M23.041,39.157c0,0.266,0.269,0.266,0.448,0.177l14.89-14.979c0.446-0.443,0.357-0.62,0-0.886
+ L23.488,8.668c-0.09-0.089-0.359-0.089-0.359,0.088v8.863H10.933c-0.269,0-0.448,0.177-0.448,0.354v11.788
+ c0,0.354,0.179,0.441,0.538,0.441h12.107L23.041,39.157z"/>
+ <path fill="#497CF1" d="M23.049,39.13c0,0.268,0.269,0.268,0.448,0.178l14.865-14.952c0.446-0.442,0.357-0.619,0-0.885
+ L23.498,8.695c-0.09-0.088-0.358-0.088-0.358,0.088v8.848H10.961c-0.269,0-0.448,0.177-0.448,0.354v11.767
+ c0,0.354,0.179,0.44,0.538,0.44H23.14L23.049,39.13z"/>
+ <path fill="#4A7DF1" d="M23.06,39.104c0,0.266,0.269,0.266,0.447,0.176l14.841-14.925c0.446-0.442,0.356-0.618,0-0.883
+ L23.506,8.723c-0.09-0.088-0.358-0.088-0.358,0.088v8.832H10.989c-0.268,0-0.447,0.177-0.447,0.354v11.747
+ c0,0.354,0.179,0.439,0.537,0.439h12.069L23.06,39.104z"/>
+ <path fill="#4B7EF2" d="M23.068,39.077c0,0.265,0.269,0.265,0.447,0.177l14.817-14.899c0.445-0.441,0.357-0.617,0-0.882
+ L23.516,8.75c-0.09-0.088-0.357-0.088-0.357,0.088v8.816h-12.14c-0.268,0-0.446,0.177-0.446,0.354v11.726
+ c0,0.353,0.179,0.439,0.536,0.439h12.05L23.068,39.077z"/>
+ <path fill="#4C7FF2" d="M23.079,39.051c0,0.265,0.268,0.265,0.446,0.177l14.794-14.874c0.444-0.44,0.356-0.616,0-0.88
+ L23.523,8.775c-0.089-0.088-0.357-0.088-0.357,0.088v8.8h-12.12c-0.268,0-0.446,0.176-0.446,0.353v11.705
+ c0,0.353,0.178,0.439,0.535,0.439h12.031L23.079,39.051z"/>
+ <path fill="#4D80F3" d="M23.087,39.024c0,0.264,0.268,0.264,0.445,0.176l14.771-14.848c0.443-0.439,0.355-0.615,0-0.878
+ L23.532,8.803c-0.089-0.088-0.356-0.088-0.356,0.087v8.785H11.075c-0.267,0-0.445,0.176-0.445,0.352v11.685
+ c0,0.352,0.178,0.438,0.534,0.438h12.012L23.087,39.024z"/>
+ <path fill="#4E81F3" d="M23.098,38.997c0,0.264,0.267,0.264,0.445,0.176l14.748-14.82c0.442-0.438,0.354-0.614,0-0.877
+ L23.542,8.831c-0.089-0.088-0.356-0.088-0.356,0.087v8.769H11.104c-0.266,0-0.444,0.176-0.444,0.352v11.665
+ c0,0.35,0.178,0.437,0.533,0.437h11.993L23.098,38.997z"/>
+ <path fill="#4F82F4" d="M23.107,38.972c0,0.262,0.267,0.262,0.444,0.174l14.723-14.794c0.441-0.438,0.355-0.613,0-0.875
+ L23.55,8.856c-0.089-0.087-0.355-0.087-0.355,0.087v8.754H11.132c-0.266,0-0.443,0.176-0.443,0.351V29.69
+ c0,0.351,0.177,0.438,0.532,0.438h11.974L23.107,38.972z"/>
+ <path fill="#5083F4" d="M23.116,38.944c0,0.262,0.266,0.262,0.443,0.175l14.699-14.769c0.443-0.437,0.354-0.611,0-0.874
+ L23.56,8.883c-0.089-0.087-0.354-0.087-0.354,0.087v8.738H11.162c-0.266,0-0.443,0.175-0.443,0.35v11.622
+ c0,0.35,0.177,0.437,0.531,0.437h11.955L23.116,38.944z"/>
+ <path fill="#5184F5" d="M23.126,38.918c0,0.263,0.266,0.263,0.442,0.174l14.677-14.741c0.441-0.436,0.354-0.61,0-0.872
+ L23.568,8.911c-0.089-0.087-0.354-0.087-0.354,0.087v8.723H11.19c-0.265,0-0.442,0.175-0.442,0.35v11.603
+ c0,0.348,0.177,0.436,0.531,0.436h11.936L23.126,38.918z"/>
+ <path fill="#5285F5" d="M23.135,38.892c0,0.262,0.266,0.262,0.442,0.174L38.23,24.35c0.44-0.436,0.354-0.609,0-0.871L23.578,8.938
+ c-0.088-0.087-0.354-0.087-0.354,0.087v8.707H11.218c-0.265,0-0.441,0.175-0.441,0.349v11.581c0,0.348,0.177,0.434,0.53,0.434
+ h11.917L23.135,38.892z"/>
+ <path fill="#5386F6" d="M23.146,38.864c0,0.261,0.265,0.261,0.441,0.174l14.629-14.689c0.44-0.435,0.354-0.608,0-0.869
+ L23.586,8.964c-0.088-0.087-0.353-0.087-0.353,0.086v8.691H11.248c-0.264,0-0.441,0.174-0.441,0.348v11.562
+ c0,0.347,0.177,0.433,0.529,0.433h11.898L23.146,38.864z"/>
+ <path fill="#5487F6" d="M23.154,38.838c0,0.261,0.264,0.261,0.44,0.174l14.608-14.663c0.438-0.434,0.352-0.607,0-0.867
+ L23.595,8.992c-0.088-0.087-0.353-0.087-0.353,0.086v8.676H11.276c-0.264,0-0.44,0.174-0.44,0.348v11.54
+ c0,0.346,0.176,0.433,0.528,0.433h11.878L23.154,38.838z"/>
+ <path fill="#5588F7" d="M23.165,38.812c0,0.26,0.264,0.26,0.44,0.174l14.583-14.637c0.438-0.433,0.353-0.606,0-0.866L23.604,9.019
+ c-0.088-0.086-0.352-0.086-0.352,0.086v8.661H11.304c-0.263,0-0.439,0.173-0.439,0.347v11.52c0,0.346,0.176,0.432,0.527,0.432
+ h11.859L23.165,38.812z"/>
+ <path fill="#5689F7" d="M23.173,38.784c0,0.26,0.264,0.26,0.439,0.173l14.561-14.609c0.438-0.433,0.351-0.605,0-0.865
+ L23.612,9.045c-0.088-0.086-0.351-0.086-0.351,0.086v8.645H11.333c-0.263,0-0.438,0.173-0.438,0.346v11.499
+ c0,0.345,0.175,0.431,0.526,0.431h11.84L23.173,38.784z"/>
+ <path fill="#578AF8" d="M23.184,38.758c0,0.259,0.263,0.259,0.438,0.173l14.537-14.584c0.437-0.432,0.351-0.604,0-0.863
+ L23.622,9.072c-0.088-0.086-0.351-0.086-0.351,0.086v8.629H11.362c-0.263,0-0.438,0.173-0.438,0.346V29.61
+ c0,0.346,0.175,0.432,0.525,0.432h11.821L23.184,38.758z"/>
+ <path fill="#588BF8" d="M23.192,38.731c0,0.258,0.263,0.258,0.438,0.172l14.513-14.558c0.436-0.431,0.35-0.603,0-0.861L23.63,9.1
+ c-0.087-0.086-0.35-0.086-0.35,0.086v8.614h-11.89c-0.262,0-0.437,0.173-0.437,0.345v11.456c0,0.344,0.175,0.43,0.524,0.43H23.28
+ L23.192,38.731z"/>
+ <path fill="#598CF9" d="M23.203,38.704c0,0.259,0.262,0.259,0.437,0.173l14.488-14.532c0.437-0.43,0.351-0.602,0-0.86L23.64,9.126
+ c-0.088-0.086-0.35-0.086-0.35,0.085v8.598h-11.87c-0.262,0-0.437,0.172-0.437,0.344v11.438c0,0.344,0.175,0.428,0.524,0.428
+ h11.784L23.203,38.704z"/>
+ <path fill="#5A8DF9" d="M23.212,38.678c0,0.259,0.262,0.259,0.436,0.173l14.466-14.506c0.436-0.429,0.35-0.6,0-0.858L23.648,9.153
+ c-0.088-0.086-0.349-0.086-0.349,0.085v8.583H11.448c-0.262,0-0.436,0.172-0.436,0.344v11.416c0,0.343,0.174,0.428,0.523,0.428
+ h11.764L23.212,38.678z"/>
+ <path fill="#5B8EFA" d="M23.222,38.651c0,0.257,0.262,0.257,0.436,0.17L38.1,24.343c0.434-0.428,0.349-0.599,0-0.856L23.657,9.181
+ c-0.087-0.085-0.349-0.085-0.349,0.085v8.567H11.477c-0.261,0-0.435,0.171-0.435,0.343v11.394c0,0.343,0.174,0.428,0.522,0.428
+ h11.745L23.222,38.651z"/>
+ <path fill="#5C8FFA" d="M23.231,38.625c0,0.256,0.261,0.256,0.435,0.171l14.418-14.453c0.435-0.428,0.349-0.598,0-0.855
+ L23.667,9.208c-0.087-0.085-0.348-0.085-0.348,0.085v8.551H11.505c-0.261,0-0.434,0.172-0.434,0.343v11.375
+ c0,0.34,0.173,0.426,0.521,0.426h11.726L23.231,38.625z"/>
+ <path fill="#5D90FB" d="M23.24,38.599c0,0.256,0.261,0.256,0.434,0.17L38.07,24.342c0.433-0.427,0.349-0.598,0-0.854L23.674,9.233
+ c-0.087-0.085-0.347-0.085-0.347,0.085v8.536H11.534c-0.26,0-0.434,0.171-0.434,0.342V29.55c0,0.342,0.173,0.426,0.52,0.426
+ h11.707L23.24,38.599z"/>
+ <path fill="#5E91FB" d="M23.25,38.571c0,0.256,0.26,0.256,0.434,0.171l14.371-14.401c0.432-0.426,0.347-0.596,0-0.852
+ L23.685,9.261c-0.087-0.085-0.347-0.085-0.347,0.084v8.521H11.562c-0.259,0-0.433,0.171-0.433,0.342V29.54
+ c0,0.34,0.173,0.424,0.52,0.424h11.688L23.25,38.571z"/>
+ <path fill="#5F92FC" d="M23.26,38.545c0,0.255,0.26,0.255,0.433,0.17l14.349-14.374c0.432-0.425,0.347-0.595,0-0.85L23.692,9.289
+ c-0.087-0.085-0.346-0.085-0.346,0.084v8.504H11.591c-0.259,0-0.432,0.171-0.432,0.341V29.53c0,0.339,0.173,0.423,0.519,0.423
+ h11.669L23.26,38.545z"/>
+ <path fill="#6093FC" d="M23.27,38.519c0,0.254,0.259,0.254,0.432,0.17l14.326-14.347c0.431-0.425,0.345-0.594,0-0.849
+ L23.702,9.314c-0.087-0.085-0.346-0.085-0.346,0.084v8.489H11.621c-0.259,0-0.432,0.17-0.432,0.34v11.291
+ c0,0.34,0.173,0.424,0.518,0.424h11.649L23.27,38.519z"/>
+ <path fill="#6194FD" d="M23.279,38.491c0,0.255,0.259,0.255,0.431,0.17l14.302-14.322c0.429-0.424,0.345-0.593,0-0.847
+ L23.71,9.341c-0.086-0.084-0.345-0.084-0.345,0.084v8.473H11.648c-0.259,0-0.431,0.17-0.431,0.34v11.271
+ c0,0.338,0.172,0.422,0.517,0.422h11.63L23.279,38.491z"/>
+ <path fill="#6295FD" d="M23.29,38.465c0,0.254,0.258,0.254,0.43,0.169l14.28-14.294c0.428-0.423,0.344-0.592,0-0.846L23.719,9.369
+ c-0.086-0.084-0.344-0.084-0.344,0.084v8.458H11.677c-0.258,0-0.43,0.17-0.43,0.339v11.25c0,0.338,0.172,0.422,0.516,0.422h11.612
+ L23.29,38.465z"/>
+ <path fill="#6396FE" d="M23.298,38.438c0,0.254,0.258,0.254,0.43,0.17l14.255-14.269c0.428-0.422,0.344-0.591,0-0.844
+ l-14.255-14.1c-0.086-0.084-0.344-0.084-0.344,0.084v8.442H11.707c-0.258,0-0.429,0.169-0.429,0.338v11.228
+ c0,0.338,0.171,0.422,0.515,0.422h11.592L23.298,38.438z"/>
+ <path fill="#6497FE" d="M23.309,38.412c0,0.253,0.257,0.253,0.429,0.168l14.23-14.242c0.428-0.422,0.344-0.59,0-0.843
+ L23.737,9.422c-0.086-0.084-0.344-0.084-0.344,0.083v8.427H11.734c-0.257,0-0.429,0.169-0.429,0.338v11.209
+ c0,0.336,0.171,0.418,0.514,0.418h11.573L23.309,38.412z"/>
+ <path fill="#6598FF" d="M23.317,38.385c0,0.253,0.257,0.253,0.429,0.169l14.208-14.216c0.428-0.42,0.344-0.588,0-0.841
+ L23.747,9.45c-0.086-0.084-0.343-0.084-0.343,0.083v8.411h-11.64c-0.257,0-0.428,0.169-0.428,0.337v11.188
+ c0,0.336,0.171,0.419,0.514,0.419h11.554L23.317,38.385z"/>
+ <path fill="#6699FF" d="M23.328,38.358c0,0.252,0.257,0.252,0.428,0.168l14.185-14.19c0.426-0.42,0.342-0.587,0-0.839
+ L23.754,9.477c-0.086-0.084-0.342-0.084-0.342,0.083v8.396h-11.62c-0.256,0-0.427,0.168-0.427,0.336v11.167
+ c0,0.335,0.171,0.418,0.513,0.418h11.535L23.328,38.358z"/>
+ </g>
+
+ <linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="210.7969" y1="-239.4214" x2="210.7969" y2="-268.5771" gradientTransform="matrix(1 0 0 -1 -186 -230)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#6699FF"/>
+ </linearGradient>
+ <path fill="url(#XMLID_10_)" d="M23.328,38.358c0,0.252,0.257,0.252,0.428,0.168l14.185-14.19c0.426-0.42,0.342-0.587,0-0.839
+ L23.754,9.477c-0.086-0.084-0.342-0.084-0.342,0.083v8.396h-11.62c-0.256,0-0.427,0.168-0.427,0.336v11.167
+ c0,0.335,0.171,0.418,0.513,0.418h11.535L23.328,38.358z"/>
+</g>
+<g id="crop_x0020_marks">
+ <path fill="none" d="M48.06,47.999h-48v-48h48V47.999z"/>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/colorsvg/note.svg b/utils/bcmregtool/elfio/doc/images/colorsvg/note.svg
new file mode 100644
index 0000000..e94c610
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/colorsvg/note.svg
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="25.5" height="25.5" viewBox="0 0 25.5 25.5"
+ overflow="visible" enable-background="new 0 0 25.5 25.5" xml:space="preserve">
+<g id="Layer_x0020_1">
+ <g>
+ <path fill="#1F60A9" d="M25.5,12.7c0,7-5.7,12.7-12.7,12.7C5.7,25.5,0,19.8,0,12.7C0,5.6,5.7,0,12.7,0s12.7,5.7,12.7,12.7H25.5z"
+ />
+ <path fill="#2060AA" d="M25.473,12.7c0,6.983-5.688,12.671-12.672,12.671C5.718,25.471,0.03,19.783,0.03,12.7
+ S5.718,0.029,12.701,0.029c6.984,0,12.671,5.687,12.671,12.671H25.473z"/>
+ <path fill="#2160AB" d="M25.443,12.7c0,6.968-5.674,12.642-12.643,12.642C5.734,25.439,0.061,19.768,0.061,12.7
+ c0-7.068,5.674-12.642,12.642-12.642c6.968,0,12.641,5.674,12.641,12.642H25.443z"/>
+ <path fill="#2160AC" d="M25.415,12.7c0,6.95-5.661,12.612-12.612,12.612C5.752,25.412,0.091,19.751,0.091,12.7
+ c0-7.051,5.661-12.612,12.612-12.612S25.316,5.749,25.316,12.7H25.415z"/>
+ <path fill="#2260AD" d="M25.387,12.7c0,6.936-5.648,12.583-12.583,12.583C5.769,25.383,0.121,19.734,0.121,12.7
+ c0-7.035,5.648-12.583,12.583-12.583c6.937,0,12.583,5.648,12.583,12.583H25.387z"/>
+ <path fill="#2360AE" d="M25.357,12.701c0,6.919-5.635,12.554-12.553,12.554C5.787,25.354,0.152,19.719,0.152,12.701
+ c0-7.019,5.635-12.554,12.554-12.554S25.26,5.782,25.26,12.701H25.357z"/>
+ <path fill="#2460AF" d="M25.33,12.7c0,6.903-5.622,12.524-12.525,12.524C5.803,25.323,0.181,19.702,0.181,12.7
+ S5.803,0.175,12.706,0.175c6.903,0,12.524,5.621,12.524,12.525H25.33z"/>
+ <path fill="#2560B0" d="M25.302,12.701c0,6.887-5.608,12.496-12.496,12.496C5.82,25.294,0.212,19.686,0.212,12.701
+ c0-6.986,5.608-12.496,12.496-12.496c6.888,0,12.496,5.608,12.496,12.496H25.302z"/>
+ <path fill="#2661B1" d="M25.273,12.7c0,6.87-5.597,12.467-12.467,12.467C5.837,25.266,0.242,19.67,0.242,12.7
+ c0-6.969,5.595-12.467,12.467-12.467c6.871,0,12.467,5.596,12.467,12.467H25.273z"/>
+ <path fill="#2661B2" d="M25.245,12.7c0,6.854-5.583,12.438-12.438,12.438C5.854,25.234,0.272,19.652,0.272,12.7
+ S5.854,0.262,12.709,0.262c6.855,0,12.438,5.583,12.438,12.438H25.245z"/>
+ <path fill="#2761B3" d="M25.216,12.7c0,6.839-5.567,12.407-12.408,12.407C5.872,25.205,0.303,19.637,0.303,12.7
+ c0-6.937,5.569-12.408,12.408-12.408S25.12,5.861,25.12,12.7H25.216z"/>
+ <path fill="#2861B4" d="M25.188,12.7c0,6.823-5.557,12.38-12.378,12.38C5.889,25.177,0.333,19.62,0.333,12.7
+ c0-6.92,5.556-12.379,12.379-12.379c6.823,0,12.38,5.556,12.38,12.379H25.188z"/>
+ <path fill="#2961B5" d="M25.16,12.7c0,6.807-5.543,12.35-12.351,12.35C5.906,25.146,0.363,19.604,0.363,12.7
+ c0-6.904,5.543-12.35,12.35-12.35s12.35,5.543,12.35,12.35H25.16z"/>
+ <path fill="#2A61B6" d="M25.131,12.7c0,6.792-5.529,12.321-12.32,12.321C5.923,25.117,0.393,19.588,0.393,12.7
+ c0-6.888,5.53-12.32,12.321-12.32s12.32,5.53,12.32,12.32H25.131z"/>
+ <path fill="#2A61B7" d="M25.104,12.7c0,6.774-5.518,12.292-12.292,12.292C5.94,25.088,0.424,19.57,0.424,12.7
+ c0-6.872,5.517-12.292,12.291-12.292c6.773,0,12.292,5.517,12.292,12.292H25.104z"/>
+ <path fill="#2B61B8" d="M25.075,12.7c0,6.759-5.505,12.263-12.263,12.263C5.958,25.059,0.455,19.555,0.455,12.7
+ c0-6.855,5.503-12.262,12.262-12.262c6.76,0,12.262,5.504,12.262,12.262H25.075z"/>
+ <path fill="#2C61B9" d="M25.046,12.7c0,6.743-5.489,12.233-12.232,12.233C5.975,25.029,0.484,19.539,0.484,12.7
+ c0-6.839,5.491-12.233,12.233-12.233c6.743,0,12.233,5.491,12.233,12.233H25.046z"/>
+ <path fill="#2D61BA" d="M25.018,12.7c0,6.727-5.478,12.204-12.204,12.204C5.992,25,0.514,19.521,0.514,12.7
+ c0-6.822,5.478-12.204,12.204-12.204S24.922,5.973,24.922,12.7H25.018z"/>
+ <path fill="#2E61BB" d="M24.988,12.7c0,6.711-5.463,12.175-12.173,12.175C6.009,24.971,0.544,19.506,0.544,12.7
+ c0-6.807,5.464-12.175,12.175-12.175S24.895,5.99,24.895,12.7H24.988z"/>
+ <path fill="#2F61BC" d="M24.962,12.701c0,6.693-5.45,12.145-12.146,12.145C6.026,24.941,0.575,19.49,0.575,12.701
+ c0-6.79,5.451-12.146,12.146-12.146c6.695,0,12.146,5.452,12.146,12.146H24.962z"/>
+ <path fill="#2F61BD" d="M24.934,12.7c0,6.678-5.438,12.116-12.117,12.116C6.043,24.911,0.605,19.475,0.605,12.7
+ S6.043,0.584,12.722,0.584c6.678,0,12.116,5.438,12.116,12.116H24.934z"/>
+ <path fill="#3061BE" d="M24.904,12.7c0,6.661-5.426,12.087-12.087,12.087C6.06,24.882,0.635,19.457,0.635,12.7
+ c0-6.757,5.425-12.087,12.087-12.087c6.661,0,12.086,5.425,12.086,12.087H24.904z"/>
+ <path fill="#3162BF" d="M24.876,12.7c0,6.646-5.412,12.059-12.058,12.059C6.078,24.854,0.666,19.439,0.666,12.7
+ c0-6.741,5.412-12.058,12.058-12.058S24.783,6.054,24.783,12.7H24.876z"/>
+ <path fill="#3262C0" d="M24.85,12.701c0,6.63-5.399,12.027-12.03,12.027C6.095,24.823,0.696,19.425,0.696,12.701
+ c0-6.725,5.399-12.029,12.029-12.029c6.628,0,12.028,5.399,12.028,12.029H24.85z"/>
+ <path fill="#3362C1" d="M24.818,12.7c0,6.614-5.385,11.999-12,11.999C6.112,24.794,0.727,19.408,0.727,12.7s5.385-12,12-12
+ c6.614,0,12,5.386,12,12H24.818z"/>
+ <path fill="#3362C2" d="M24.791,12.7c0,6.598-5.373,11.97-11.971,11.97C6.129,24.764,0.756,19.393,0.756,12.7
+ S6.129,0.73,12.727,0.73c6.597,0,11.968,5.372,11.968,11.97H24.791z"/>
+ <path fill="#3462C3" d="M24.764,12.7c0,6.582-5.359,11.94-11.942,11.94C6.146,24.734,0.787,19.375,0.787,12.7
+ c0-6.676,5.359-11.941,11.941-11.941c6.583,0,11.941,5.36,11.941,11.941H24.764z"/>
+ <path fill="#3562C4" d="M24.734,12.7c0,6.565-5.348,11.911-11.913,11.911C6.164,24.705,0.817,19.359,0.817,12.7
+ S6.164,0.788,12.729,0.788c6.566,0,11.912,5.347,11.912,11.912H24.734z"/>
+ <path fill="#3662C5" d="M24.706,12.7c0,6.55-5.333,11.883-11.883,11.883C6.181,24.676,0.847,19.343,0.847,12.7
+ c0-6.643,5.333-11.883,11.883-11.883c6.549,0,11.881,5.333,11.881,11.883H24.706z"/>
+ <path fill="#3762C6" d="M24.678,12.7c0,6.534-5.32,11.854-11.854,11.854C6.198,24.646,0.877,19.326,0.877,12.7
+ S6.198,0.846,12.731,0.846c6.535,0,11.853,5.32,11.853,11.854H24.678z"/>
+ <path fill="#3762C7" d="M24.648,12.7c0,6.518-5.308,11.823-11.824,11.823C6.215,24.617,0.908,19.311,0.908,12.7
+ c0-6.611,5.307-11.824,11.824-11.824S24.557,6.183,24.557,12.7H24.648z"/>
+ <path fill="#3862C8" d="M24.621,12.7c0,6.502-5.294,11.795-11.795,11.795C6.232,24.588,0.938,19.294,0.938,12.7
+ c0-6.594,5.293-11.795,11.795-11.795c6.501,0,11.794,5.294,11.794,11.795H24.621z"/>
+ <path fill="#3962C9" d="M24.593,12.7c0,6.485-5.28,11.766-11.766,11.766C6.249,24.559,0.968,19.277,0.968,12.7
+ c0-6.578,5.281-11.766,11.766-11.766S24.5,6.215,24.5,12.7H24.593z"/>
+ <path fill="#3A62CA" d="M24.564,12.7c0,6.469-5.27,11.737-11.737,11.737C6.266,24.527,0.999,19.261,0.999,12.7
+ c0-6.561,5.267-11.737,11.736-11.737c6.469,0,11.738,5.268,11.738,11.736L24.564,12.7L24.564,12.7z"/>
+ <path fill="#3B62CB" d="M24.536,12.7c0,6.452-5.255,11.707-11.708,11.707C6.284,24.5,1.029,19.245,1.029,12.7
+ c0-6.545,5.255-11.707,11.707-11.707s11.708,5.255,11.708,11.708L24.536,12.7L24.536,12.7z"/>
+ <path fill="#3C62CC" d="M24.508,12.701c0,6.438-5.24,11.678-11.678,11.678c-6.529,0.092-11.77-5.15-11.77-11.678
+ c0-6.528,5.241-11.679,11.678-11.679S24.416,6.263,24.416,12.7L24.508,12.701L24.508,12.701z"/>
+ <path fill="#3C62CD" d="M24.479,12.7c0,6.421-5.229,11.649-11.648,11.649C6.318,24.439,1.09,19.212,1.09,12.7
+ c0-6.513,5.228-11.649,11.649-11.649c6.42,0,11.65,5.228,11.65,11.649H24.479z"/>
+ <path fill="#3D63CE" d="M24.45,12.7c0,6.403-5.216,11.618-11.62,11.618C6.335,24.41,1.12,19.195,1.12,12.7
+ c0-6.497,5.215-11.62,11.62-11.62c6.404,0,11.619,5.215,11.619,11.62H24.45z"/>
+ <path fill="#3E63CF" d="M24.423,12.7c0,6.389-5.202,11.591-11.591,11.591C6.353,24.382,1.15,19.18,1.15,12.7
+ c0-6.48,5.203-11.591,11.591-11.591c6.388,0,11.59,5.203,11.59,11.591H24.423z"/>
+ <path fill="#3F63D0" d="M24.395,12.701c0,6.373-5.188,11.561-11.562,11.561C6.37,24.354,1.18,19.164,1.18,12.701
+ c0-6.464,5.189-11.562,11.562-11.562c6.371,0,11.562,5.189,11.562,11.562H24.395z"/>
+ <path fill="#4063D1" d="M24.365,12.7c0,6.356-5.176,11.532-11.532,11.532C6.387,24.322,1.21,19.146,1.21,12.7
+ c0-6.447,5.177-11.533,11.533-11.533c6.354,0,11.532,5.176,11.532,11.533H24.365z"/>
+ <path fill="#4063D2" d="M24.337,12.7c0,6.341-5.163,11.503-11.503,11.503C6.403,24.293,1.24,19.13,1.24,12.7
+ c0-6.431,5.163-11.503,11.503-11.503c6.34,0,11.504,5.163,11.504,11.503H24.337z"/>
+ <path fill="#4163D3" d="M24.311,12.7c0,6.323-5.15,11.474-11.476,11.474C6.42,24.264,1.271,19.114,1.271,12.7
+ c0-6.415,5.149-11.474,11.474-11.474c6.323,0,11.474,5.15,11.474,11.474H24.311z"/>
+ <path fill="#4263D4" d="M24.281,12.701c0,6.308-5.137,11.445-11.445,11.445C6.438,24.234,1.301,19.1,1.301,12.701
+ c0-6.399,5.137-11.445,11.445-11.445c6.307,0,11.445,5.136,11.445,11.445H24.281z"/>
+ <path fill="#4363D4" d="M24.253,12.7c0,6.292-5.124,11.416-11.416,11.416C6.455,24.205,1.332,19.082,1.332,12.7
+ c0-6.382,5.123-11.415,11.415-11.415S24.163,6.408,24.163,12.7H24.253z"/>
+ <path fill="#4463D5" d="M24.225,12.7c0,6.276-5.111,11.387-11.387,11.387C6.472,24.176,1.362,19.064,1.362,12.7
+ c0-6.366,5.11-11.386,11.386-11.386c6.275,0,11.387,5.11,11.387,11.386H24.225z"/>
+ <path fill="#4563D6" d="M24.195,12.7c0,6.26-5.098,11.356-11.357,11.356C6.49,24.146,1.392,19.049,1.392,12.7
+ c0-6.35,5.098-11.357,11.357-11.357S24.105,6.441,24.105,12.7H24.195z"/>
+ <path fill="#4563D7" d="M24.167,12.7c0,6.243-5.084,11.327-11.328,11.327C6.506,24.116,1.422,19.033,1.422,12.7
+ S6.506,1.372,12.75,1.372S24.078,6.456,24.078,12.7H24.167z"/>
+ <path fill="#4663D8" d="M24.139,12.7c0,6.228-5.07,11.299-11.299,11.299C6.523,24.087,1.453,19.018,1.453,12.7
+ S6.523,1.401,12.751,1.401c6.228,0,11.298,5.071,11.298,11.299H24.139z"/>
+ <path fill="#4763D9" d="M24.109,12.7c0,6.212-5.058,11.271-11.27,11.271C6.541,24.059,1.483,19,1.483,12.7
+ c0-6.3,5.058-11.27,11.27-11.27S24.023,6.488,24.023,12.7H24.109z"/>
+ <path fill="#4863DA" d="M24.082,12.7c0,6.194-5.045,11.239-11.24,11.239C6.558,24.027,1.513,18.982,1.513,12.7
+ c0-6.284,5.045-11.24,11.24-11.24c6.195,0,11.241,5.045,11.241,11.24H24.082z"/>
+ <path fill="#4964DB" d="M24.055,12.7c0,6.18-5.033,11.211-11.212,11.211c-6.268,0.088-11.3-4.943-11.3-11.211
+ c0-6.268,5.032-11.211,11.211-11.211c6.18,0,11.212,5.032,11.212,11.211H24.055z"/>
+ <path fill="#4964DC" d="M24.025,12.7c0,6.164-5.02,11.182-11.183,11.182C6.592,23.971,1.574,18.951,1.574,12.7
+ S6.593,1.518,12.756,1.518S23.938,6.537,23.938,12.7H24.025z"/>
+ <path fill="#4A64DD" d="M23.997,12.7c0,6.147-5.006,11.153-11.153,11.153C6.609,23.939,1.604,18.936,1.604,12.7
+ S6.609,1.547,12.757,1.547c6.146,0,11.152,5.006,11.152,11.153H23.997z"/>
+ <path fill="#4B64DE" d="M23.969,12.7c0,6.131-4.992,11.124-11.124,11.124C6.626,23.91,1.634,18.918,1.634,12.7
+ c0-6.219,4.992-11.124,11.124-11.124c6.131,0,11.124,4.992,11.124,11.124H23.969z"/>
+ <path fill="#4C64DF" d="M23.939,12.7c0,6.114-4.979,11.095-11.094,11.095C6.644,23.882,1.665,18.902,1.665,12.7
+ c0-6.203,4.979-11.094,11.094-11.094c6.115,0,11.095,4.979,11.095,11.094H23.939z"/>
+ <path fill="#4D64E0" d="M23.912,12.7c0,6.1-4.967,11.065-11.065,11.065C6.661,23.852,1.695,18.886,1.695,12.7
+ c0-6.186,4.966-11.065,11.065-11.065c6.098,0,11.065,4.966,11.065,11.065H23.912z"/>
+ <path fill="#4E64E1" d="M23.884,12.7c0,6.083-4.952,11.036-11.036,11.036C6.678,23.822,1.725,18.869,1.725,12.7
+ c0-6.17,4.954-11.036,11.036-11.036c6.083,0,11.036,4.954,11.036,11.036H23.884z"/>
+ <path fill="#4E64E2" d="M23.855,12.7c0,6.067-4.94,11.007-11.007,11.007C6.695,23.793,1.755,18.854,1.755,12.7
+ c0-6.154,4.94-11.007,11.007-11.007c6.066,0,11.005,4.94,11.005,11.007H23.855z"/>
+ <path fill="#4F64E3" d="M23.827,12.7c0,6.051-4.929,10.978-10.978,10.978C6.712,23.764,1.786,18.837,1.786,12.7
+ c0-6.137,4.927-10.978,10.978-10.978c6.05,0,10.977,4.927,10.977,10.978H23.827z"/>
+ <path fill="#5064E4" d="M23.799,12.7c0,6.034-4.914,10.948-10.949,10.948C6.729,23.734,1.816,18.82,1.816,12.7
+ c0-6.121,4.914-10.948,10.948-10.948c6.034,0,10.949,4.914,10.949,10.948H23.799z"/>
+ <path fill="#5164E5" d="M23.771,12.7c0,6.019-4.901,10.919-10.919,10.919C6.747,23.705,1.846,18.805,1.846,12.7
+ c0-6.105,4.9-10.919,10.919-10.919c6.018,0,10.918,4.9,10.918,10.919H23.771z"/>
+ <path fill="#5264E6" d="M23.742,12.7c0,6.003-4.889,10.89-10.891,10.89C6.764,23.675,1.876,18.788,1.876,12.7
+ c0-6.088,4.888-10.89,10.89-10.89c6.001,0,10.89,4.888,10.89,10.89H23.742z"/>
+ <path fill="#5264E7" d="M23.714,12.7c0,5.985-4.875,10.86-10.861,10.86C6.781,23.646,1.906,18.771,1.906,12.7
+ c0-6.072,4.875-10.861,10.861-10.861c5.985,0,10.86,4.875,10.86,10.861H23.714z"/>
+ <path fill="#5364E8" d="M23.686,12.7c0,5.971-4.861,10.832-10.832,10.832C6.798,23.616,1.937,18.755,1.937,12.7
+ c0-6.056,4.862-10.832,10.832-10.832C18.738,1.869,23.6,6.73,23.6,12.7H23.686z"/>
+ <path fill="#5464E9" d="M23.657,12.7c0,5.954-4.849,10.803-10.803,10.803C6.815,23.587,1.967,18.739,1.967,12.7
+ c0-6.04,4.849-10.802,10.803-10.802c5.955,0,10.802,4.848,10.802,10.802H23.657z"/>
+ <path fill="#5565EA" d="M23.629,12.7c0,5.938-4.836,10.772-10.774,10.772C6.833,23.559,1.998,18.723,1.998,12.7
+ c0-6.023,4.835-10.773,10.773-10.773S23.544,6.762,23.544,12.7H23.629z"/>
+ <path fill="#5665EB" d="M23.602,12.7c0,5.922-4.824,10.743-10.746,10.743C6.85,23.527,2.027,18.706,2.027,12.7
+ c0-6.006,4.822-10.744,10.744-10.744c5.922,0,10.745,4.822,10.745,10.744H23.602z"/>
+ <path fill="#5665EC" d="M23.572,12.7c0,5.905-4.811,10.715-10.715,10.715C6.867,23.499,2.058,18.689,2.058,12.7
+ c0-5.99,4.809-10.715,10.714-10.715S23.486,6.794,23.486,12.7H23.572z"/>
+ <path fill="#5765ED" d="M23.544,12.7c0,5.89-4.797,10.686-10.687,10.686C6.884,23.471,2.088,18.674,2.088,12.7
+ c0-5.974,4.796-10.686,10.686-10.686c5.889,0,10.686,4.796,10.686,10.686H23.544z"/>
+ <path fill="#5865EE" d="M23.516,12.7c0,5.874-4.783,10.655-10.657,10.655C6.901,23.439,2.118,18.657,2.118,12.7
+ c0-5.958,4.783-10.657,10.657-10.657c5.874,0,10.657,4.784,10.657,10.657H23.516z"/>
+ <path fill="#5965EF" d="M23.486,12.7c0,5.858-4.771,10.627-10.627,10.627C6.918,23.41,2.148,18.641,2.148,12.7
+ c0-5.941,4.77-10.627,10.627-10.627S23.402,6.843,23.402,12.7H23.486z"/>
+ <path fill="#5A65F0" d="M23.459,12.7c0,5.842-4.758,10.598-10.599,10.598C6.936,23.381,2.179,18.625,2.179,12.7
+ c0-5.925,4.757-10.598,10.598-10.598c5.841,0,10.598,4.757,10.598,10.598H23.459z"/>
+ <path fill="#5B65F1" d="M23.432,12.7c0,5.825-4.744,10.569-10.571,10.569C6.953,23.352,2.209,18.607,2.209,12.7
+ c0-5.909,4.744-10.569,10.569-10.569c5.826,0,10.57,4.744,10.57,10.569H23.432z"/>
+ <path fill="#5B65F2" d="M23.4,12.7c0,5.81-4.729,10.54-10.54,10.54C6.97,23.322,2.239,18.592,2.239,12.7
+ c0-5.892,4.73-10.54,10.54-10.54c5.809,0,10.54,4.73,10.54,10.54H23.4z"/>
+ <path fill="#5C65F3" d="M23.373,12.7c0,5.794-4.719,10.511-10.511,10.511C6.987,23.293,2.27,18.576,2.27,12.7
+ S6.987,2.189,12.78,2.189c5.793,0,10.511,4.717,10.511,10.511H23.373z"/>
+ <path fill="#5D65F4" d="M23.346,12.7c0,5.776-4.705,10.481-10.482,10.481C7.004,23.264,2.3,18.561,2.3,12.7
+ S7.004,2.219,12.781,2.219c5.775,0,10.48,4.704,10.48,10.481H23.346z"/>
+ <path fill="#5E65F5" d="M23.316,12.7c0,5.762-4.691,10.452-10.453,10.452C7.021,23.232,2.33,18.543,2.33,12.7
+ c0-5.843,4.691-10.452,10.452-10.452c5.761,0,10.452,4.691,10.452,10.452H23.316z"/>
+ <path fill="#5F65F6" d="M23.288,12.7c0,5.745-4.679,10.423-10.423,10.423C7.039,23.204,2.36,18.525,2.36,12.7
+ c0-5.827,4.678-10.423,10.423-10.423c5.744,0,10.423,4.678,10.423,10.423H23.288z"/>
+ <path fill="#5F65F7" d="M23.26,12.7c0,5.729-4.664,10.394-10.394,10.394C7.056,23.175,2.391,18.511,2.391,12.7
+ c0-5.811,4.665-10.393,10.394-10.393c5.729,0,10.393,4.665,10.393,10.394L23.26,12.7L23.26,12.7z"/>
+ <path fill="#6066F8" d="M23.23,12.7c0,5.713-4.651,10.364-10.364,10.364C7.073,23.146,2.421,18.494,2.421,12.7
+ S7.073,2.335,12.786,2.335c5.712,0,10.364,4.652,10.364,10.365H23.23z"/>
+ <path fill="#6166F9" d="M23.203,12.7c0,5.696-4.639,10.335-10.335,10.335C7.09,23.116,2.451,18.479,2.451,12.7
+ S7.09,2.365,12.786,2.365S23.121,7.004,23.121,12.7H23.203z"/>
+ <path fill="#6266FA" d="M23.175,12.7c0,5.681-4.626,10.306-10.307,10.306C7.107,23.087,2.481,18.462,2.481,12.7
+ c0-5.762,4.626-10.306,10.307-10.306c5.68,0,10.306,4.625,10.306,10.306H23.175z"/>
+ <path fill="#6366FB" d="M23.146,12.7c0,5.665-4.613,10.276-10.277,10.276C7.124,23.059,2.512,18.445,2.512,12.7
+ c0-5.746,4.612-10.277,10.277-10.277S23.064,7.036,23.064,12.7H23.146z"/>
+ <path fill="#6466FC" d="M23.118,12.7c0,5.647-4.601,10.248-10.248,10.248C7.142,23.027,2.542,18.43,2.542,12.7
+ c0-5.729,4.6-10.248,10.248-10.248c5.647,0,10.247,4.6,10.247,10.248H23.118z"/>
+ <path fill="#6466FD" d="M23.09,12.7c0,5.633-4.587,10.219-10.219,10.219C7.159,22.998,2.572,18.412,2.572,12.7
+ c0-5.713,4.586-10.219,10.219-10.219c5.632,0,10.219,4.586,10.219,10.219H23.09z"/>
+ <path fill="#6566FE" d="M23.062,12.7c0,5.616-4.574,10.188-10.19,10.188C7.176,22.969,2.603,18.396,2.603,12.7
+ S7.176,2.511,12.792,2.511c5.615,0,10.188,4.573,10.188,10.189H23.062z"/>
+ <path fill="#6666FF" d="M23.033,12.7c0,5.601-4.561,10.159-10.161,10.159c-5.68,0.08-10.24-4.479-10.24-10.159
+ c0-5.68,4.56-10.16,10.16-10.16c5.601,0,10.16,4.56,10.16,10.16H23.033z"/>
+ </g>
+
+ <linearGradient id="XMLID_12_" gradientUnits="userSpaceOnUse" x1="198.625" y1="-253.916" x2="198.625" y2="-262.334" gradientTransform="matrix(1 0 0 -1 -186 -252.5)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#6666FF"/>
+ </linearGradient>
+ <ellipse fill="url(#XMLID_12_)" cx="12.625" cy="5.625" rx="7.542" ry="4.209"/>
+ <g>
+ <path fill="#FFFFFF" d="M14.1,19.2c0,0.2,0,0.3-0.3,0.3H12c-0.2,0-0.3-0.1-0.3-0.3v-7.1h-1.4c-0.2,0-0.3-0.1-0.3-0.3v-1.2
+ c0-0.2,0-0.3,0.3-0.3h3.5c0.2,0,0.3,0.1,0.3,0.3v8.5V19.2z M13,9.2c-0.8,0-1.5-0.7-1.5-1.5c0-0.8,0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5
+ C14.5,8.5,13.8,9.2,13,9.2z"/>
+ </g>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/colorsvg/prev.svg b/utils/bcmregtool/elfio/doc/images/colorsvg/prev.svg
new file mode 100644
index 0000000..7ceddec
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/colorsvg/prev.svg
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Previous" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<g>
+ <path fill="#FFFFFF" stroke="#FFFFFF" stroke-width="7.5901" stroke-linejoin="round" d="M25.659,6.898c0-0.301-0.3-0.301-0.5-0.2
+ l-16.6,16.9c-0.5,0.5-0.4,0.7,0,1l16.6,16.7c0.103,0.101,0.399,0.101,0.399-0.1v-10h13.601c0.301,0,0.5-0.2,0.5-0.4v-13.3
+ c0-0.4-0.199-0.5-0.601-0.5h-13.5L25.659,6.898z"/>
+ <g>
+ <path fill="#0033CC" d="M25.659,6.898c0-0.301-0.3-0.301-0.5-0.2l-16.6,16.9c-0.5,0.5-0.4,0.7,0,1l16.6,16.7
+ c0.103,0.101,0.399,0.101,0.399-0.1v-10h13.601c0.301,0,0.5-0.2,0.5-0.4v-13.3c0-0.4-0.199-0.5-0.601-0.5h-13.5L25.659,6.898z"/>
+ <path fill="#0134CC" d="M25.648,6.925c0-0.3-0.299-0.3-0.498-0.2L8.575,23.6c-0.499,0.499-0.4,0.698,0,1L25.15,41.271
+ c0.101,0.102,0.398,0.102,0.398-0.1v-9.984h13.58c0.303,0,0.5-0.197,0.5-0.397V17.508c0-0.4-0.197-0.499-0.6-0.499H25.55
+ L25.648,6.925z"/>
+ <path fill="#0235CD" d="M25.641,6.953c0-0.3-0.3-0.3-0.498-0.2L8.588,23.601c-0.499,0.498-0.399,0.697,0,0.997l16.553,16.647
+ c0.101,0.101,0.398,0.101,0.398-0.101v-9.971h13.562c0.299,0,0.498-0.197,0.498-0.398V17.519c0-0.399-0.199-0.499-0.6-0.499H25.54
+ L25.641,6.953z"/>
+ <path fill="#0336CD" d="M25.63,6.979c0-0.299-0.299-0.299-0.498-0.199L8.603,23.601c-0.498,0.498-0.399,0.696,0,0.997
+ l16.529,16.62c0.101,0.101,0.397,0.101,0.397-0.099v-9.954h13.544c0.299,0,0.495-0.199,0.495-0.397v-13.24
+ c0-0.399-0.196-0.498-0.598-0.498H25.532L25.63,6.979z"/>
+ <path fill="#0437CE" d="M25.622,7.005c0-0.299-0.299-0.299-0.498-0.199L8.619,23.602c-0.498,0.497-0.398,0.695,0,0.994
+ l16.505,16.598c0.101,0.1,0.396,0.1,0.396-0.102v-9.938h13.521c0.301,0,0.498-0.197,0.498-0.396V17.54
+ c0-0.397-0.197-0.497-0.598-0.497h-13.42L25.622,7.005z"/>
+ <path fill="#0538CE" d="M25.611,7.033c0-0.298-0.299-0.298-0.498-0.199L8.633,23.602c-0.497,0.496-0.398,0.694,0,0.994
+ l16.48,16.568c0.101,0.1,0.398,0.1,0.398-0.1v-9.924h13.502c0.299,0,0.498-0.197,0.498-0.396V17.548
+ c0-0.397-0.199-0.496-0.598-0.496h-13.4L25.611,7.033z"/>
+ <path fill="#0639CF" d="M25.602,7.06c0-0.298-0.297-0.298-0.496-0.199L8.646,23.603c-0.496,0.496-0.396,0.693,0,0.99
+ l16.458,16.546c0.101,0.101,0.396,0.101,0.396-0.1v-9.907h13.482c0.301,0,0.496-0.196,0.496-0.396V17.56
+ c0-0.396-0.195-0.495-0.595-0.495H25.503L25.602,7.06z"/>
+ <path fill="#073ACF" d="M25.592,7.085c0-0.298-0.298-0.298-0.494-0.199L8.662,23.603c-0.495,0.495-0.396,0.692,0,0.989
+ l16.436,16.518c0.1,0.102,0.396,0.102,0.396-0.098V31.12h13.465c0.297,0,0.494-0.197,0.494-0.396V17.569
+ c0-0.396-0.197-0.495-0.595-0.495H25.493L25.592,7.085z"/>
+ <path fill="#083BD0" d="M25.583,7.111c0-0.297-0.297-0.297-0.494-0.198L8.677,23.604c-0.494,0.494-0.396,0.691,0,0.987
+ l16.412,16.493c0.101,0.1,0.396,0.1,0.396-0.1v-9.877h13.447c0.297,0,0.493-0.195,0.493-0.396V17.58
+ c0-0.396-0.196-0.494-0.594-0.494H25.484L25.583,7.111z"/>
+ <path fill="#093CD0" d="M25.573,7.139c0-0.296-0.296-0.296-0.494-0.197L8.69,23.604c-0.493,0.494-0.395,0.69,0,0.985l16.389,16.47
+ c0.103,0.099,0.396,0.099,0.396-0.101V31.1h13.428c0.298,0,0.494-0.197,0.494-0.396V17.589c0-0.395-0.196-0.493-0.594-0.493
+ H25.475L25.573,7.139z"/>
+ <path fill="#0A3DD1" d="M25.562,7.165c0-0.296-0.295-0.296-0.492-0.197L8.706,23.604c-0.493,0.492-0.395,0.688,0,0.983
+ l16.366,16.44c0.1,0.098,0.396,0.098,0.396-0.101v-9.845h13.405c0.297,0,0.494-0.196,0.494-0.396V17.596
+ c0-0.395-0.197-0.492-0.592-0.492H25.464L25.562,7.165z"/>
+ <path fill="#0B3ED1" d="M25.555,7.191c0-0.295-0.296-0.295-0.492-0.197L8.72,23.605c-0.492,0.491-0.394,0.688,0,0.982
+ l16.342,16.414c0.1,0.099,0.395,0.099,0.395-0.099v-9.828h13.391c0.295,0,0.49-0.197,0.49-0.395V17.609
+ c0-0.393-0.195-0.491-0.59-0.491H25.456L25.555,7.191z"/>
+ <path fill="#0C3FD2" d="M25.544,7.219c0-0.295-0.295-0.295-0.491-0.196L8.734,23.606c-0.491,0.49-0.394,0.687,0,0.98
+ l16.318,16.389c0.099,0.101,0.394,0.101,0.394-0.098v-9.812h13.369c0.297,0,0.492-0.194,0.492-0.394V17.62
+ c0-0.393-0.195-0.49-0.591-0.49H25.445L25.544,7.219z"/>
+ <path fill="#0D40D2" d="M25.534,7.245c0-0.294-0.293-0.294-0.49-0.196L8.749,23.606c-0.491,0.489-0.394,0.685,0,0.979
+ l16.295,16.362c0.099,0.098,0.394,0.098,0.394-0.098v-9.798h13.35c0.295,0,0.49-0.196,0.49-0.395V17.628
+ c0-0.392-0.195-0.489-0.588-0.489H25.438L25.534,7.245z"/>
+ <path fill="#0E41D3" d="M25.525,7.271c0-0.294-0.295-0.294-0.489-0.196L8.764,23.607c-0.49,0.489-0.393,0.685,0,0.979
+ l16.271,16.335c0.102,0.101,0.395,0.101,0.395-0.097v-9.782h13.33c0.295,0,0.488-0.194,0.488-0.394V17.64
+ c0-0.392-0.193-0.489-0.588-0.489H25.428L25.525,7.271z"/>
+ <path fill="#0F42D3" d="M25.516,7.298c0-0.293-0.293-0.293-0.488-0.195L8.778,23.607c-0.489,0.489-0.392,0.684,0,0.978
+ l16.248,16.312c0.101,0.099,0.394,0.099,0.394-0.099v-9.767H38.73c0.293,0,0.49-0.195,0.49-0.393V17.65
+ c0-0.391-0.197-0.488-0.589-0.488H25.417L25.516,7.298z"/>
+ <path fill="#1043D4" d="M25.505,7.325c0-0.293-0.293-0.293-0.487-0.195L8.792,23.608c-0.488,0.488-0.391,0.683,0,0.976
+ l16.224,16.283c0.101,0.098,0.394,0.098,0.394-0.098v-9.752H38.7c0.295,0,0.489-0.192,0.489-0.39V17.661
+ c0-0.391-0.194-0.487-0.586-0.487H25.409L25.505,7.325z"/>
+ <path fill="#1144D4" d="M25.497,7.352c0-0.292-0.293-0.292-0.487-0.194L8.808,23.608c-0.488,0.487-0.391,0.682,0,0.974
+ L25.009,40.84c0.099,0.1,0.392,0.1,0.392-0.097v-9.734h13.272c0.293,0,0.488-0.194,0.488-0.39V17.67
+ c0-0.39-0.195-0.487-0.586-0.487H25.398L25.497,7.352z"/>
+ <path fill="#1245D5" d="M25.486,7.378c0-0.292-0.293-0.292-0.487-0.195L8.822,23.609c-0.487,0.486-0.39,0.68,0,0.973l16.177,16.23
+ c0.099,0.099,0.392,0.099,0.392-0.099v-9.72h13.254c0.293,0,0.485-0.194,0.485-0.391V17.681c0-0.389-0.192-0.486-0.584-0.486
+ H25.391L25.486,7.378z"/>
+ <path fill="#1346D5" d="M25.479,7.406c0-0.292-0.293-0.292-0.486-0.195L8.837,23.61c-0.487,0.485-0.39,0.679,0,0.971
+ l16.154,16.206c0.098,0.097,0.389,0.097,0.389-0.098v-9.705h13.236c0.291,0,0.485-0.192,0.485-0.389V17.69
+ c0-0.388-0.194-0.485-0.584-0.485H25.38L25.479,7.406z"/>
+ <path fill="#1447D6" d="M25.468,7.432c0-0.292-0.292-0.292-0.485-0.194L8.852,23.611c-0.485,0.484-0.389,0.678,0,0.969
+ l16.13,16.18c0.1,0.098,0.389,0.098,0.389-0.096v-9.688h13.217c0.291,0,0.486-0.192,0.486-0.39V17.702
+ c0-0.388-0.195-0.484-0.584-0.484H25.37L25.468,7.432z"/>
+ <path fill="#1548D6" d="M25.458,7.458c0-0.291-0.291-0.291-0.485-0.194L8.866,23.611c-0.484,0.483-0.388,0.677,0,0.968
+ L24.973,40.73c0.1,0.099,0.389,0.099,0.389-0.097v-9.673h13.197c0.291,0,0.483-0.193,0.483-0.388V17.71
+ c0-0.387-0.192-0.483-0.582-0.483H25.359L25.458,7.458z"/>
+ <path fill="#1649D7" d="M25.448,7.484c0-0.291-0.289-0.291-0.484-0.194L8.88,23.613c-0.484,0.482-0.388,0.675,0,0.965
+ l16.083,16.128c0.098,0.099,0.389,0.099,0.389-0.097v-9.657h13.178c0.291,0,0.484-0.192,0.484-0.388V17.722
+ c0-0.387-0.193-0.482-0.582-0.482h-13.08L25.448,7.484z"/>
+ <path fill="#174AD7" d="M25.439,7.512c0-0.29-0.291-0.29-0.483-0.193L8.895,23.614c-0.483,0.482-0.387,0.675,0,0.963l16.06,16.104
+ c0.1,0.096,0.391,0.096,0.391-0.098v-9.645H38.5c0.291,0,0.484-0.191,0.484-0.385V17.731c0-0.386-0.193-0.481-0.58-0.481H25.343
+ L25.439,7.512z"/>
+ <path fill="#184BD8" d="M25.43,7.539c0-0.29-0.289-0.29-0.482-0.193L8.91,23.614c-0.482,0.482-0.387,0.674,0,0.962L24.947,40.65
+ c0.098,0.098,0.387,0.098,0.387-0.096V30.93h13.141c0.291,0,0.48-0.193,0.48-0.388v-12.8c0-0.385-0.189-0.481-0.578-0.481H25.333
+ L25.43,7.539z"/>
+ <path fill="#194CD8" d="M25.419,7.564c0-0.289-0.289-0.289-0.481-0.192L8.923,23.614c-0.481,0.481-0.386,0.673,0,0.961
+ l16.015,16.05c0.097,0.098,0.386,0.098,0.386-0.098v-9.608h13.118c0.291,0,0.482-0.19,0.482-0.386V17.751
+ c0-0.385-0.191-0.48-0.578-0.48H25.323L25.419,7.564z"/>
+ <path fill="#1A4DD9" d="M25.411,7.59c0-0.288-0.289-0.288-0.479-0.192L8.938,23.615c-0.481,0.48-0.385,0.671,0,0.96L24.93,40.598
+ c0.096,0.096,0.385,0.096,0.385-0.096v-9.595h13.102c0.289,0,0.48-0.192,0.48-0.386V17.762c0-0.384-0.191-0.479-0.578-0.479
+ H25.314L25.411,7.59z"/>
+ <path fill="#1B4ED9" d="M25.4,7.618c0-0.288-0.289-0.288-0.479-0.191L8.954,23.616c-0.481,0.479-0.385,0.67,0,0.958L24.919,40.57
+ c0.099,0.097,0.386,0.097,0.386-0.096v-9.58h13.082c0.288,0,0.479-0.189,0.479-0.383V17.771c0-0.383-0.191-0.479-0.576-0.479
+ H25.305L25.4,7.618z"/>
+ <path fill="#1C4FDA" d="M25.393,7.645c0-0.287-0.289-0.287-0.48-0.191L8.968,23.617c-0.48,0.479-0.384,0.669,0,0.958
+ l15.941,15.971c0.099,0.097,0.385,0.097,0.385-0.095v-9.562h13.062c0.289,0,0.48-0.193,0.48-0.384V17.782
+ c0-0.383-0.191-0.478-0.577-0.478H25.294L25.393,7.645z"/>
+ <path fill="#1D50DA" d="M25.38,7.67c0-0.287-0.286-0.287-0.479-0.19L8.981,23.617c-0.479,0.478-0.384,0.667,0,0.955L24.9,40.518
+ c0.097,0.096,0.384,0.096,0.384-0.098v-9.548h13.043c0.289,0,0.479-0.188,0.479-0.383V17.792c0-0.382-0.19-0.477-0.576-0.477
+ H25.286L25.38,7.67z"/>
+ <path fill="#1E51DB" d="M25.372,7.698c0-0.287-0.287-0.287-0.479-0.191L8.997,23.618c-0.479,0.477-0.383,0.667,0,0.954
+ L24.893,40.49c0.098,0.095,0.385,0.095,0.385-0.096v-9.533H38.3c0.287,0,0.479-0.189,0.479-0.381V17.803
+ c0-0.382-0.191-0.476-0.574-0.476h-12.93L25.372,7.698z"/>
+ <path fill="#1F52DB" d="M25.361,7.725c0-0.286-0.284-0.286-0.479-0.19L9.012,23.619c-0.478,0.475-0.383,0.666,0,0.951
+ l15.872,15.895c0.097,0.096,0.384,0.096,0.384-0.095v-9.519h13.004c0.287,0,0.479-0.189,0.479-0.381V17.812
+ c0-0.381-0.19-0.476-0.574-0.476H25.268L25.361,7.725z"/>
+ <path fill="#2053DC" d="M25.354,7.75c0-0.286-0.287-0.286-0.479-0.19L9.025,23.619c-0.477,0.475-0.382,0.665,0,0.951
+ l15.849,15.867c0.099,0.095,0.385,0.095,0.385-0.098v-9.501h12.982c0.286,0,0.479-0.188,0.479-0.381V17.823
+ c0-0.38-0.188-0.475-0.574-0.475h-12.89L25.354,7.75z"/>
+ <path fill="#2154DC" d="M25.343,7.777c0-0.286-0.286-0.286-0.477-0.19L9.04,23.619c-0.476,0.475-0.381,0.664,0,0.949L24.867,40.41
+ c0.096,0.095,0.383,0.095,0.383-0.094V30.83h12.965c0.287,0,0.479-0.189,0.479-0.38V17.832c0-0.379-0.188-0.474-0.569-0.474
+ H25.249L25.343,7.777z"/>
+ <path fill="#2255DD" d="M25.333,7.805c0-0.285-0.285-0.285-0.478-0.19L9.056,23.62c-0.476,0.474-0.381,0.663,0,0.948
+ l15.801,15.812c0.098,0.096,0.383,0.096,0.383-0.095v-9.472h12.945c0.285,0,0.477-0.188,0.477-0.381V17.842
+ c0-0.378-0.188-0.473-0.569-0.473H25.238L25.333,7.805z"/>
+ <path fill="#2356DD" d="M25.325,7.832c0-0.284-0.285-0.284-0.478-0.189L9.069,23.621c-0.475,0.473-0.381,0.662,0,0.945
+ l15.779,15.791c0.096,0.094,0.381,0.094,0.381-0.098v-9.451h12.929c0.284,0,0.477-0.189,0.477-0.379V17.853
+ c0-0.378-0.188-0.472-0.569-0.472H25.229L25.325,7.832z"/>
+ <path fill="#2457DE" d="M25.314,7.857c0-0.284-0.285-0.284-0.477-0.189L9.084,23.622c-0.474,0.472-0.38,0.66,0,0.944L24.838,40.33
+ c0.098,0.094,0.381,0.094,0.381-0.094v-9.439h12.908c0.285,0,0.475-0.189,0.475-0.378V17.863c0-0.378-0.188-0.471-0.567-0.471
+ H25.221L25.314,7.857z"/>
+ <path fill="#2558DE" d="M25.305,7.883c0-0.283-0.283-0.283-0.474-0.188L9.099,23.622c-0.473,0.471-0.379,0.659,0,0.942
+ L24.831,40.3c0.095,0.097,0.379,0.097,0.379-0.094v-9.424H38.1c0.284,0,0.475-0.188,0.475-0.38V17.873
+ c0-0.377-0.188-0.47-0.568-0.47H25.21L25.305,7.883z"/>
+ <path fill="#2659DF" d="M25.294,7.911c0-0.283-0.282-0.283-0.474-0.188l-15.708,15.9c-0.473,0.47-0.378,0.658,0,0.941
+ L24.82,40.275c0.097,0.094,0.38,0.094,0.38-0.094v-9.408h12.868c0.285,0,0.476-0.188,0.476-0.377V17.882
+ c0-0.376-0.188-0.469-0.567-0.469H25.2L25.294,7.911z"/>
+ <path fill="#275ADF" d="M25.286,7.938c0-0.282-0.283-0.282-0.474-0.188L9.127,23.624c-0.472,0.469-0.378,0.657,0,0.938
+ L24.812,40.25c0.097,0.094,0.379,0.094,0.379-0.093v-9.394h12.851c0.283,0,0.476-0.188,0.476-0.379V17.894
+ c0-0.375-0.188-0.469-0.566-0.469h-12.76L25.286,7.938z"/>
+ <path fill="#285BE0" d="M25.275,7.963c0-0.282-0.282-0.282-0.473-0.188L9.143,23.624c-0.471,0.469-0.377,0.656,0,0.938
+ l15.662,15.658c0.096,0.094,0.379,0.094,0.379-0.094V30.75h12.83c0.282,0,0.473-0.188,0.473-0.376V17.902
+ c0-0.375-0.188-0.468-0.564-0.468h-12.74L25.275,7.963z"/>
+ <path fill="#295CE0" d="M25.268,7.991c0-0.281-0.283-0.281-0.474-0.188L9.158,23.624c-0.471,0.468-0.377,0.655,0,0.937
+ l15.638,15.633c0.095,0.096,0.377,0.096,0.377-0.092V30.74h12.812c0.283,0,0.473-0.188,0.473-0.375V17.914
+ c0-0.375-0.188-0.467-0.564-0.467H25.171L25.268,7.991z"/>
+ <path fill="#2A5DE1" d="M25.257,8.018c0-0.281-0.282-0.281-0.471-0.188L9.171,23.625c-0.47,0.467-0.377,0.654,0,0.936
+ l15.615,15.605c0.094,0.093,0.377,0.093,0.377-0.093v-9.347h12.793c0.28,0,0.471-0.188,0.471-0.375V17.923
+ c0-0.374-0.188-0.467-0.563-0.467h-12.7L25.257,8.018z"/>
+ <path fill="#2B5EE1" d="M25.247,8.043c0-0.28-0.28-0.28-0.472-0.187L9.187,23.625c-0.469,0.467-0.376,0.653,0,0.934l15.59,15.582
+ c0.096,0.092,0.377,0.092,0.377-0.094v-9.33h12.773c0.28,0,0.471-0.188,0.471-0.373v-12.41c0-0.373-0.188-0.466-0.562-0.466
+ H25.152L25.247,8.043z"/>
+ <path fill="#2C5FE2" d="M25.238,8.07c0-0.28-0.282-0.28-0.471-0.186L9.201,23.625c-0.468,0.466-0.375,0.652,0,0.932L24.77,40.114
+ c0.096,0.093,0.375,0.093,0.375-0.095v-9.312h12.754c0.281,0,0.471-0.188,0.471-0.373V17.943c0-0.373-0.188-0.465-0.562-0.465
+ H25.145L25.238,8.07z"/>
+ <path fill="#2D60E2" d="M25.229,8.097c0-0.28-0.279-0.28-0.469-0.187L9.214,23.626c-0.468,0.465-0.375,0.651,0,0.931L24.76,40.086
+ c0.094,0.094,0.374,0.094,0.374-0.093v-9.3H37.87c0.278,0,0.469-0.188,0.469-0.371V17.954c0-0.372-0.188-0.464-0.562-0.464H25.134
+ L25.229,8.097z"/>
+ <path fill="#2E61E3" d="M25.219,8.124c0-0.279-0.281-0.279-0.468-0.186L9.229,23.627c-0.467,0.464-0.375,0.649,0,0.928
+ l15.522,15.506c0.095,0.094,0.373,0.094,0.373-0.094v-9.281h12.718c0.28,0,0.467-0.188,0.467-0.373v-12.35
+ c0-0.371-0.187-0.463-0.562-0.463H25.124L25.219,8.124z"/>
+ <path fill="#2F62E3" d="M25.208,8.15c0-0.279-0.278-0.279-0.467-0.186L9.245,23.628c-0.466,0.463-0.374,0.648,0,0.927
+ l15.499,15.479c0.094,0.093,0.373,0.093,0.373-0.095v-9.268h12.695c0.28,0,0.469-0.186,0.469-0.371V17.975
+ c0-0.371-0.188-0.463-0.562-0.463H25.116L25.208,8.15z"/>
+ <path fill="#3063E4" d="M25.2,8.177c0-0.278-0.279-0.278-0.468-0.185L9.259,23.628c-0.465,0.462-0.373,0.647,0,0.925l15.476,15.45
+ c0.094,0.093,0.373,0.093,0.373-0.092V30.66h12.678c0.279,0,0.467-0.188,0.467-0.371V17.984c0-0.37-0.188-0.462-0.561-0.462
+ H25.105L25.2,8.177z"/>
+ <path fill="#3164E4" d="M25.189,8.204c0-0.277-0.278-0.277-0.465-0.185L9.273,23.629c-0.465,0.462-0.373,0.646,0,0.924
+ l15.452,15.426c0.092,0.092,0.371,0.092,0.371-0.092v-9.238h12.658c0.279,0,0.467-0.187,0.467-0.371V17.995
+ c0-0.37-0.188-0.461-0.561-0.461H25.098L25.189,8.204z"/>
+ <path fill="#3265E5" d="M25.182,8.229c0-0.277-0.279-0.277-0.466-0.185L9.289,23.629c-0.464,0.461-0.372,0.645,0,0.921
+ l15.428,15.4c0.094,0.093,0.372,0.093,0.372-0.093v-9.217h12.64c0.276,0,0.465-0.188,0.465-0.369V18.004
+ c0-0.369-0.188-0.46-0.559-0.46H25.087L25.182,8.229z"/>
+ <path fill="#3366E5" d="M25.171,8.256c0-0.276-0.278-0.276-0.465-0.184L9.304,23.63c-0.463,0.46-0.372,0.644,0,0.92l15.404,15.373
+ c0.093,0.093,0.371,0.093,0.371-0.092v-9.205h12.619c0.276,0,0.465-0.185,0.465-0.369V18.015c0-0.368-0.188-0.459-0.56-0.459
+ H25.079L25.171,8.256z"/>
+ <path fill="#3366E6" d="M25.161,8.284c0-0.276-0.276-0.276-0.463-0.184L9.317,23.631c-0.462,0.459-0.371,0.643,0,0.919
+ l15.381,15.347c0.094,0.095,0.37,0.095,0.37-0.09v-9.188h12.601c0.279,0,0.466-0.187,0.466-0.368V18.024
+ c0-0.367-0.187-0.458-0.558-0.458H25.068L25.161,8.284z"/>
+ <path fill="#3467E6" d="M25.15,8.311c0-0.276-0.276-0.276-0.463-0.184L9.332,23.631c-0.462,0.459-0.371,0.642,0,0.917
+ L24.688,39.87c0.096,0.091,0.371,0.091,0.371-0.093v-9.174h12.582c0.276,0,0.463-0.187,0.463-0.369V18.035
+ c0-0.367-0.187-0.458-0.558-0.458H25.059L25.15,8.311z"/>
+ <path fill="#3568E7" d="M25.143,8.336c0-0.275-0.277-0.275-0.463-0.183L9.347,23.632c-0.461,0.458-0.37,0.641,0,0.917
+ L24.68,39.846c0.094,0.092,0.37,0.092,0.37-0.093v-9.157h12.562c0.277,0,0.463-0.186,0.463-0.367V18.044
+ c0-0.366-0.186-0.457-0.555-0.457H25.05L25.143,8.336z"/>
+ <path fill="#3669E7" d="M25.133,8.364c0-0.275-0.277-0.275-0.462-0.183L9.361,23.632c-0.461,0.458-0.369,0.64,0,0.916
+ l15.31,15.271c0.095,0.093,0.369,0.093,0.369-0.09v-9.146h12.543c0.276,0,0.463-0.185,0.463-0.367V18.055
+ c0-0.365-0.187-0.456-0.555-0.456H25.04L25.133,8.364z"/>
+ <path fill="#376AE8" d="M25.122,8.39c0-0.274-0.274-0.274-0.461-0.183L9.375,23.633c-0.459,0.457-0.368,0.639,0,0.914
+ L24.663,39.79c0.092,0.091,0.366,0.091,0.366-0.091V30.57h12.525c0.275,0,0.461-0.184,0.461-0.364V18.064
+ c0-0.365-0.186-0.455-0.555-0.455H25.029L25.122,8.39z"/>
+ <path fill="#386BE8" d="M25.113,8.417c0-0.274-0.276-0.274-0.461-0.183L9.39,23.634c-0.459,0.456-0.368,0.638,0,0.912
+ l15.262,15.218c0.095,0.09,0.369,0.09,0.369-0.091v-9.112h12.504c0.275,0,0.461-0.184,0.461-0.365v-12.12
+ c0-0.364-0.186-0.455-0.553-0.455H25.021L25.113,8.417z"/>
+ <path fill="#396CE9" d="M25.104,8.442c0-0.273-0.273-0.273-0.459-0.182L9.405,23.636c-0.458,0.455-0.368,0.636,0,0.909
+ l15.24,15.189c0.092,0.093,0.367,0.093,0.367-0.09v-9.097h12.485c0.274,0,0.459-0.183,0.459-0.364v-12.1
+ c0-0.363-0.185-0.454-0.552-0.454H25.012L25.104,8.442z"/>
+ <path fill="#3A6DE9" d="M25.094,8.47c0-0.273-0.273-0.273-0.457-0.182L9.419,23.636c-0.458,0.455-0.367,0.636,0,0.908
+ l15.216,15.165c0.092,0.091,0.367,0.091,0.367-0.09v-9.081h12.466c0.274,0,0.459-0.185,0.459-0.364V18.096
+ c0-0.363-0.185-0.453-0.552-0.453H25.003L25.094,8.47z"/>
+ <path fill="#3B6EEA" d="M25.085,8.497c0-0.272-0.274-0.272-0.459-0.181L9.435,23.637c-0.457,0.453-0.366,0.634,0,0.906
+ l15.193,15.141c0.093,0.09,0.365,0.09,0.365-0.092v-9.064h12.446c0.271,0,0.457-0.182,0.457-0.361v-12.06
+ c0-0.362-0.186-0.452-0.549-0.452H24.993L25.085,8.497z"/>
+ <path fill="#3C6FEA" d="M25.075,8.522c0-0.272-0.272-0.272-0.457-0.181L9.449,23.637c-0.457,0.453-0.366,0.633,0,0.905
+ l15.169,15.112c0.092,0.091,0.362,0.091,0.362-0.09v-9.051h12.431c0.272,0,0.457-0.183,0.457-0.363V18.116
+ c0-0.362-0.185-0.452-0.55-0.452H24.982L25.075,8.522z"/>
+ <path fill="#3D70EB" d="M25.064,8.549c0-0.271-0.272-0.271-0.455-0.181L9.462,23.638c-0.455,0.452-0.365,0.632,0,0.903
+ l15.147,15.087c0.093,0.093,0.363,0.093,0.363-0.089v-9.035h12.409c0.272,0,0.456-0.181,0.456-0.359v-12.02
+ c0-0.361-0.184-0.451-0.549-0.451H24.975L25.064,8.549z"/>
+ <path fill="#3E71EB" d="M25.057,8.577c0-0.271-0.273-0.271-0.455-0.181L9.478,23.639c-0.455,0.451-0.364,0.631,0,0.901
+ l15.124,15.062c0.09,0.09,0.362,0.09,0.362-0.09v-9.021h12.392c0.272,0,0.455-0.183,0.455-0.361V18.136
+ c0-0.36-0.183-0.45-0.547-0.45h-12.3L25.057,8.577z"/>
+ <path fill="#3F72EC" d="M25.046,8.603c0-0.27-0.272-0.27-0.455-0.18L9.493,23.639c-0.454,0.45-0.364,0.63,0,0.9l15.099,15.035
+ c0.092,0.09,0.364,0.09,0.364-0.09V30.48h12.369c0.272,0,0.454-0.183,0.454-0.359V18.146c0-0.36-0.182-0.449-0.547-0.449H24.956
+ L25.046,8.603z"/>
+ <path fill="#4073EC" d="M25.038,8.629c0-0.27-0.272-0.27-0.455-0.18L9.506,23.64c-0.453,0.45-0.363,0.629,0,0.898l15.075,15.01
+ c0.092,0.091,0.362,0.091,0.362-0.09v-8.985h12.353c0.272,0,0.455-0.183,0.455-0.361V18.157c0-0.359-0.183-0.448-0.545-0.448
+ H24.945L25.038,8.629z"/>
+ <path fill="#4174ED" d="M25.027,8.656c0-0.269-0.272-0.269-0.454-0.179L9.521,23.641c-0.453,0.449-0.363,0.627,0,0.896
+ L24.573,39.52c0.092,0.09,0.362,0.09,0.362-0.09v-8.972h12.332c0.271,0,0.453-0.181,0.453-0.36V18.166
+ c0-0.358-0.182-0.447-0.544-0.447H24.938L25.027,8.656z"/>
+ <path fill="#4275ED" d="M25.018,8.683c0-0.269-0.271-0.269-0.453-0.179L9.537,23.641c-0.452,0.448-0.362,0.626,0,0.896
+ l15.027,14.957c0.092,0.09,0.362,0.09,0.362-0.09v-8.955h12.312c0.271,0,0.453-0.18,0.453-0.359V18.177
+ c0-0.358-0.182-0.447-0.543-0.447H24.927L25.018,8.683z"/>
+ <path fill="#4376EE" d="M25.008,8.709c0-0.269-0.271-0.269-0.451-0.179L9.551,23.642c-0.451,0.447-0.361,0.625,0,0.895
+ l15.006,14.932c0.09,0.09,0.36,0.09,0.36-0.089v-8.94H37.21c0.271,0,0.453-0.18,0.453-0.356V18.187
+ c0-0.357-0.183-0.446-0.543-0.446H24.917L25.008,8.709z"/>
+ <path fill="#4477EE" d="M24.997,8.735c0-0.268-0.271-0.268-0.45-0.179L9.564,23.642c-0.45,0.446-0.361,0.625,0,0.893
+ l14.982,14.904c0.091,0.09,0.36,0.09,0.36-0.088v-8.928H37.18c0.271,0,0.451-0.179,0.451-0.355V18.197
+ c0-0.356-0.181-0.445-0.542-0.445h-12.18L24.997,8.735z"/>
+ <path fill="#4578EF" d="M24.988,8.763c0-0.268-0.271-0.268-0.449-0.178L9.58,23.643c-0.449,0.445-0.36,0.623,0,0.891l14.958,14.88
+ c0.09,0.089,0.358,0.089,0.358-0.089v-8.909h12.256c0.271,0,0.451-0.18,0.451-0.357V18.207c0-0.356-0.182-0.444-0.541-0.444
+ H24.898L24.988,8.763z"/>
+ <path fill="#4679EF" d="M24.979,8.79c0-0.267-0.271-0.267-0.449-0.178L9.595,23.644c-0.449,0.445-0.36,0.622,0,0.891
+ l14.934,14.851c0.091,0.091,0.359,0.091,0.359-0.088v-8.896h12.234c0.271,0,0.451-0.18,0.451-0.355V18.216
+ c0-0.355-0.184-0.443-0.541-0.443H24.891L24.979,8.79z"/>
+ <path fill="#477AF0" d="M24.971,8.815c0-0.267-0.271-0.267-0.451-0.178L9.608,23.644c-0.448,0.444-0.359,0.621,0,0.889
+ L24.52,39.357c0.09,0.09,0.36,0.09,0.36-0.088v-8.879h12.218c0.27,0,0.448-0.18,0.448-0.354V18.228
+ c0-0.355-0.183-0.443-0.541-0.443H24.88L24.971,8.815z"/>
+ <path fill="#487BF0" d="M24.96,8.842c0-0.266-0.271-0.266-0.448-0.177L9.624,23.645c-0.448,0.443-0.359,0.62,0,0.888
+ l14.888,14.801c0.09,0.088,0.358,0.088,0.358-0.088v-8.863h12.196c0.271,0,0.449-0.178,0.449-0.355v-11.79
+ c0-0.354-0.182-0.442-0.539-0.442H24.87L24.96,8.842z"/>
+ <path fill="#497CF1" d="M24.95,8.87c0-0.266-0.269-0.266-0.447-0.177L9.638,23.645c-0.447,0.442-0.358,0.619,0,0.886
+ l14.865,14.773c0.09,0.09,0.356,0.09,0.356-0.09v-8.846H37.04c0.271,0,0.446-0.18,0.446-0.354V18.248
+ c0-0.353-0.18-0.441-0.536-0.441H24.859L24.95,8.87z"/>
+ <path fill="#4A7DF1" d="M24.939,8.896c0-0.265-0.268-0.265-0.446-0.177L9.652,23.646c-0.446,0.442-0.357,0.618,0,0.883
+ l14.841,14.75c0.089,0.088,0.358,0.088,0.358-0.088v-8.832H37.01c0.27,0,0.448-0.178,0.448-0.354V18.257
+ c0-0.353-0.183-0.44-0.537-0.44H24.852L24.939,8.896z"/>
+ <path fill="#4B7EF2" d="M24.932,8.922c0-0.265-0.269-0.265-0.447-0.177L9.667,23.646c-0.445,0.441-0.357,0.617,0,0.881
+ l14.818,14.724c0.089,0.088,0.357,0.088,0.357-0.088V30.35h12.141c0.268,0,0.447-0.18,0.447-0.354V18.268
+ c0-0.353-0.181-0.44-0.537-0.44H24.842L24.932,8.922z"/>
+ <path fill="#4C7FF2" d="M24.921,8.949c0-0.264-0.269-0.264-0.445-0.176L9.682,23.646c-0.444,0.44-0.356,0.616,0,0.879
+ l14.794,14.697c0.088,0.088,0.355,0.088,0.355-0.089v-8.801h12.121c0.269,0,0.444-0.177,0.444-0.354V18.277
+ c0-0.352-0.18-0.438-0.535-0.438h-12.03L24.921,8.949z"/>
+ <path fill="#4D80F3" d="M24.913,8.976c0-0.264-0.269-0.264-0.444-0.176L9.697,23.647c-0.444,0.439-0.356,0.615,0,0.878
+ l14.771,14.672c0.091,0.088,0.355,0.088,0.355-0.088v-8.784h12.102c0.269,0,0.445-0.179,0.445-0.354V18.288
+ c0-0.351-0.181-0.438-0.535-0.438H24.823L24.913,8.976z"/>
+ <path fill="#4E81F3" d="M24.902,9.002c0-0.264-0.268-0.264-0.444-0.176L9.71,23.647c-0.443,0.439-0.355,0.614,0,0.876
+ L24.458,39.17c0.089,0.088,0.354,0.088,0.354-0.087v-8.771h12.082c0.268,0,0.444-0.176,0.444-0.354V18.297
+ c0-0.35-0.178-0.437-0.532-0.437H24.812L24.902,9.002z"/>
+ <path fill="#4F82F4" d="M24.895,9.028c0-0.263-0.269-0.263-0.444-0.175L9.726,23.648c-0.442,0.438-0.354,0.612,0,0.875
+ L24.45,39.145c0.089,0.088,0.354,0.088,0.354-0.086v-8.754h12.062c0.267,0,0.442-0.178,0.442-0.354V18.308
+ c0-0.349-0.18-0.436-0.533-0.436H24.805L24.895,9.028z"/>
+ <path fill="#5083F4" d="M24.884,9.056c0-0.262-0.268-0.262-0.443-0.175L9.74,23.649c-0.441,0.437-0.354,0.611,0,0.875l14.7,14.595
+ c0.089,0.087,0.354,0.087,0.354-0.087v-8.737h12.045c0.267,0,0.44-0.176,0.44-0.353V18.317c0-0.349-0.178-0.436-0.53-0.436H24.794
+ L24.884,9.056z"/>
+ <path fill="#5184F5" d="M24.874,9.082c0-0.262-0.269-0.262-0.442-0.175L9.754,23.649c-0.441,0.437-0.354,0.61,0,0.873
+ l14.677,14.566c0.088,0.088,0.354,0.088,0.354-0.086v-8.723h12.025c0.266,0,0.44-0.176,0.44-0.35V18.329
+ c0-0.348-0.176-0.435-0.53-0.435H24.786L24.874,9.082z"/>
+ <path fill="#5285F5" d="M24.863,9.108c0-0.262-0.264-0.262-0.44-0.174L9.769,23.65c-0.44,0.436-0.353,0.609,0,0.872l14.654,14.541
+ c0.089,0.086,0.353,0.086,0.353-0.086V30.27h12.008c0.264,0,0.439-0.176,0.439-0.351V18.338c0-0.348-0.177-0.434-0.529-0.434
+ H24.775L24.863,9.108z"/>
+ <path fill="#5386F6" d="M24.854,9.136c0-0.261-0.266-0.261-0.44-0.174l-14.63,14.69c-0.439,0.435-0.353,0.608,0,0.87l14.63,14.517
+ c0.089,0.087,0.353,0.087,0.353-0.086V30.26H36.75c0.266,0,0.439-0.175,0.439-0.349V18.349c0-0.347-0.176-0.433-0.527-0.433
+ H24.768L24.854,9.136z"/>
+ <path fill="#5487F6" d="M24.846,9.163c0-0.261-0.265-0.261-0.441-0.174L9.798,23.651c-0.439,0.434-0.352,0.607,0,0.867
+ l14.606,14.49c0.088,0.086,0.352,0.086,0.352-0.086v-8.676h11.967c0.264,0,0.439-0.176,0.439-0.35V18.358
+ c0-0.346-0.178-0.432-0.527-0.432H24.757L24.846,9.163z"/>
+ <path fill="#5588F7" d="M24.835,9.188c0-0.26-0.265-0.26-0.439-0.173L9.812,23.652c-0.438,0.433-0.352,0.606,0,0.866L24.395,38.98
+ c0.088,0.088,0.352,0.088,0.352-0.086v-8.66h11.946c0.265,0,0.439-0.174,0.439-0.348V18.369c0-0.346-0.178-0.432-0.527-0.432
+ H24.747L24.835,9.188z"/>
+ <path fill="#5689F7" d="M24.827,9.215c0-0.26-0.265-0.26-0.438-0.173L9.828,23.653c-0.437,0.432-0.351,0.604,0,0.865l14.56,14.438
+ c0.088,0.086,0.352,0.086,0.352-0.086v-8.646h11.928c0.266,0,0.438-0.176,0.438-0.349v-11.5c0-0.345-0.176-0.431-0.525-0.431
+ H24.74L24.827,9.215z"/>
+ <path fill="#578AF8" d="M24.816,9.242c0-0.259-0.264-0.259-0.438-0.172L9.842,23.653c-0.437,0.432-0.35,0.604,0,0.863
+ l14.537,14.41c0.088,0.086,0.35,0.086,0.35-0.086v-8.629h11.91c0.262,0,0.438-0.173,0.438-0.346V18.389
+ c0-0.344-0.176-0.43-0.524-0.43H24.729L24.816,9.242z"/>
+ <path fill="#588BF8" d="M24.807,9.269c0-0.259-0.262-0.259-0.437-0.172L9.856,23.655c-0.436,0.431-0.35,0.603,0,0.863
+ L24.37,38.898c0.088,0.086,0.349,0.086,0.349-0.084v-8.612h11.891c0.264,0,0.438-0.175,0.438-0.347V18.398
+ c0-0.344-0.176-0.429-0.524-0.429H24.719L24.807,9.269z"/>
+ <path fill="#598CF9" d="M24.796,9.294c0-0.258-0.261-0.258-0.438-0.172L9.872,23.655c-0.435,0.43-0.349,0.602,0,0.861
+ L24.36,38.872c0.088,0.086,0.35,0.086,0.35-0.085v-8.602h11.871c0.263,0,0.438-0.172,0.438-0.344V18.41
+ c0-0.343-0.177-0.429-0.522-0.429H24.71L24.796,9.294z"/>
+ <path fill="#5A8DF9" d="M24.788,9.322c0-0.258-0.263-0.258-0.437-0.172L9.886,23.656c-0.435,0.429-0.349,0.6,0,0.857
+ l14.466,14.334c0.088,0.086,0.349,0.086,0.349-0.088v-8.58h11.854c0.262,0,0.438-0.174,0.438-0.346V18.418
+ c0-0.342-0.177-0.427-0.522-0.427H24.7L24.788,9.322z"/>
+ <path fill="#5B8EFA" d="M24.777,9.349c0-0.257-0.262-0.257-0.436-0.171L9.9,23.657c-0.434,0.428-0.348,0.6,0,0.856L24.342,38.82
+ c0.087,0.086,0.348,0.086,0.348-0.084v-8.567h11.834c0.261,0,0.437-0.172,0.437-0.344V18.43c0-0.342-0.176-0.427-0.522-0.427
+ H24.689L24.777,9.349z"/>
+ <path fill="#5C8FFA" d="M24.77,9.375c0-0.257-0.262-0.257-0.436-0.171L9.915,23.657c-0.433,0.428-0.348,0.599,0,0.854
+ l14.419,14.281c0.087,0.086,0.348,0.086,0.348-0.085v-8.551h11.812c0.262,0,0.438-0.174,0.438-0.346V18.439
+ c0-0.341-0.176-0.426-0.521-0.426H24.682L24.77,9.375z"/>
+ <path fill="#5D90FB" d="M24.759,9.401c0-0.256-0.26-0.256-0.434-0.17L9.93,23.658c-0.432,0.427-0.347,0.597,0,0.855l14.396,14.254
+ c0.087,0.086,0.347,0.086,0.347-0.084v-8.537h11.794c0.26,0,0.436-0.172,0.436-0.342V18.45c0-0.341-0.176-0.425-0.521-0.425
+ h-11.71L24.759,9.401z"/>
+ <path fill="#5E91FB" d="M24.749,9.429c0-0.256-0.26-0.256-0.435-0.17l-14.371,14.4c-0.432,0.426-0.346,0.596,0,0.852L24.315,38.74
+ c0.087,0.085,0.346,0.085,0.346-0.086v-8.521h11.774c0.26,0,0.435-0.172,0.435-0.342V18.459c0-0.34-0.175-0.424-0.521-0.424
+ H24.663L24.749,9.429z"/>
+ <path fill="#5F92FC" d="M24.741,9.455c0-0.255-0.261-0.255-0.434-0.17L9.958,23.659c-0.431,0.425-0.346,0.595,0,0.851
+ l14.349,14.202c0.087,0.085,0.345,0.085,0.345-0.084v-8.505h11.757c0.258,0,0.434-0.171,0.434-0.341V18.47
+ c0-0.339-0.176-0.423-0.521-0.423h-11.67L24.741,9.455z"/>
+ <path fill="#6093FC" d="M24.73,9.481c0-0.255-0.259-0.255-0.433-0.17L9.974,23.66c-0.43,0.425-0.345,0.594,0,0.849l14.325,14.179
+ c0.087,0.084,0.346,0.084,0.346-0.084v-8.489H36.38c0.259,0,0.433-0.171,0.433-0.341V18.479c0-0.339-0.174-0.423-0.521-0.423
+ H24.645L24.73,9.481z"/>
+ <path fill="#6194FD" d="M24.721,9.507c0-0.254-0.259-0.254-0.431-0.169L9.988,23.661c-0.43,0.424-0.345,0.593,0,0.847
+ l14.302,14.15c0.086,0.085,0.344,0.085,0.344-0.084V30.1h11.718c0.258,0,0.432-0.17,0.432-0.342v-11.27
+ c0-0.338-0.174-0.422-0.518-0.422H24.634L24.721,9.507z"/>
+ <path fill="#6295FD" d="M24.71,9.535c0-0.254-0.257-0.254-0.429-0.169L10.002,23.661c-0.429,0.423-0.344,0.592,0,0.846
+ L24.28,38.631c0.086,0.085,0.343,0.085,0.343-0.083V30.09H36.32c0.258,0,0.432-0.17,0.432-0.34V18.5
+ c0-0.337-0.174-0.421-0.52-0.421H24.623L24.71,9.535z"/>
+ <path fill="#6396FE" d="M24.702,9.561c0-0.253-0.259-0.253-0.43-0.169l-14.256,14.27c-0.428,0.422-0.343,0.591,0,0.844
+ l14.255,14.1c0.086,0.084,0.342,0.084,0.342-0.084V30.08h11.681c0.258,0,0.431-0.17,0.431-0.338v-11.23
+ c0-0.337-0.173-0.42-0.517-0.42H24.616L24.702,9.561z"/>
+ <path fill="#6497FE" d="M24.691,9.587c0-0.253-0.257-0.253-0.429-0.168l-14.23,14.243c-0.427,0.422-0.343,0.59,0,0.843
+ l14.231,14.072c0.086,0.084,0.342,0.084,0.342-0.083v-8.428h11.66c0.258,0,0.43-0.17,0.43-0.338V18.521
+ c0-0.336-0.172-0.42-0.516-0.42H24.605L24.691,9.587z"/>
+ <path fill="#6598FF" d="M24.684,9.615c0-0.252-0.258-0.252-0.43-0.168L10.045,23.663c-0.426,0.42-0.342,0.588,0,0.841
+ l14.208,14.047c0.086,0.084,0.343,0.084,0.343-0.084v-8.41h11.641c0.257,0,0.429-0.168,0.429-0.336V18.531
+ c0-0.335-0.172-0.418-0.515-0.418H24.598L24.684,9.615z"/>
+ <path fill="#6699FF" d="M24.673,9.642c0-0.252-0.257-0.252-0.428-0.168L10.06,23.664c-0.426,0.42-0.342,0.587,0,0.839
+ l14.185,14.021c0.086,0.084,0.342,0.084,0.342-0.084v-8.396h11.621c0.256,0,0.429-0.169,0.429-0.337V18.541
+ c0-0.335-0.173-0.418-0.515-0.418H24.587L24.673,9.642z"/>
+ </g>
+
+ <linearGradient id="XMLID_16_" gradientUnits="userSpaceOnUse" x1="-1112.2041" y1="1225.4229" x2="-1112.2041" y2="1254.5781" gradientTransform="matrix(-1 0 0 1 -1089 -1216)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#6699FF"/>
+ </linearGradient>
+ <path fill="url(#XMLID_16_)" d="M24.673,9.642c0-0.252-0.257-0.252-0.428-0.168L10.06,23.664c-0.426,0.42-0.342,0.587,0,0.839
+ l14.185,14.021c0.086,0.084,0.342,0.084,0.342-0.084v-8.396h11.621c0.256,0,0.429-0.169,0.429-0.337V18.541
+ c0-0.335-0.173-0.418-0.515-0.418H24.587L24.673,9.642z"/>
+</g>
+<g id="crop_x0020_marks">
+ <path fill="none" d="M-0.06,0.001h48v48h-48V0.001z"/>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/colorsvg/tip.svg b/utils/bcmregtool/elfio/doc/images/colorsvg/tip.svg
new file mode 100644
index 0000000..7ec92e3
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/colorsvg/tip.svg
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Tip" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<g>
+ <path stroke="#FFFFFF" stroke-width="5.6139" d="M9.525,18.6c0,8,6.5,14.4,14.4,14.4c8.001,0,14.399-6.5,14.399-14.4
+ c0-8-6.5-14.4-14.399-14.4C15.925,4.2,9.525,10.7,9.525,18.6z M12.825,18.6c0-6.2,5-11.2,11.2-11.2c6.2,0,11.2,5,11.2,11.2
+ c0,6.2-5,11.2-11.2,11.2C17.825,29.8,12.825,24.8,12.825,18.6z"/>
+ <path stroke="#FFFFFF" stroke-width="5.6139" d="M28.125,37.9l-7.6,0.8c-0.9,0.1-1.5,0.899-1.4,1.8s0.9,1.5,1.8,1.4l7.601-0.801
+ c0.9-0.102,1.5-0.899,1.4-1.802C29.824,38.4,29.025,37.8,28.125,37.9z"/>
+ <path stroke="#FFFFFF" stroke-width="5.6139" d="M28.125,34.8l-7.6,0.8c-0.9,0.101-1.5,0.9-1.4,1.801c0.1,0.897,0.9,1.5,1.8,1.397
+ l7.601-0.8c0.9-0.102,1.5-0.898,1.4-1.8C29.824,35.3,29.025,34.7,28.125,34.8z"/>
+ <path stroke="#FFFFFF" stroke-width="5.6139" d="M28.125,31.6l-7.6,0.801c-0.9,0.1-1.5,0.897-1.4,1.8c0.1,0.899,0.9,1.5,1.8,1.399
+ l7.601-0.802c0.9-0.1,1.5-0.897,1.4-1.8C29.824,32.1,29.025,31.5,28.125,31.6z"/>
+ <path stroke="#FFFFFF" stroke-width="5.6139" d="M23.125,41.3v0.9c0,0.899,0.7,1.6,1.6,1.6c0.9,0,1.6-0.7,1.6-1.6v-0.9h-3.299
+ H23.125z"/>
+ <path fill="#FFFFFF" d="M35.926,18.7c0,6.6-5.4,12-12.001,12c-6.6,0-12-5.4-12-12c0-6.6,5.4-12,12-12
+ C30.525,6.7,35.926,12.1,35.926,18.7z"/>
+ <g>
+ <path fill="#FFFF00" d="M9.625,18.6c0,8,6.5,14.4,14.4,14.4c8,0,14.401-6.5,14.401-14.4c0-8-6.5-14.4-14.401-14.4
+ C16.025,4.2,9.625,10.7,9.625,18.6z"/>
+ <path fill="#FFFF01" d="M9.647,18.6c0-7.889,6.391-14.379,14.379-14.379c7.89,0,14.378,6.391,14.378,14.379
+ c0,7.889-6.391,14.378-14.378,14.378C16.137,32.979,9.647,26.588,9.647,18.6z"/>
+ <path fill="#FFFF02" d="M9.668,18.6c0-7.878,6.382-14.358,14.358-14.358c7.878,0,14.359,6.382,14.359,14.358
+ c0,7.876-6.383,14.358-14.359,14.358C16.149,32.958,9.668,26.576,9.668,18.6z"/>
+ <path fill="#FFFF03" d="M9.69,18.6c0-7.867,6.373-14.337,14.337-14.337c7.868,0,14.338,6.373,14.338,14.337
+ c0,7.867-6.373,14.337-14.338,14.337C16.16,32.938,9.69,26.564,9.69,18.6z"/>
+ <path fill="#FFFF04" d="M9.712,18.6c0-7.855,6.363-14.316,14.316-14.316c7.855,0,14.316,6.363,14.316,14.316
+ c0,7.856-6.363,14.316-14.316,14.316C16.172,32.916,9.712,26.553,9.712,18.6z"/>
+ <path fill="#FFFF05" d="M9.733,18.6c0-7.844,6.354-14.295,14.295-14.295c7.847,0,14.296,6.354,14.296,14.295
+ c0,7.843-6.354,14.294-14.296,14.294C16.184,32.896,9.733,26.541,9.733,18.6z"/>
+ <path fill="#FFFF06" d="M9.754,18.6c0-7.833,6.345-14.274,14.274-14.274c7.833,0,14.275,6.345,14.275,14.274
+ c0,7.833-6.346,14.274-14.275,14.274C16.196,32.874,9.754,26.529,9.754,18.6z"/>
+ <path fill="#FFFF07" d="M9.776,18.6c0-7.822,6.336-14.253,14.254-14.253c7.822,0,14.253,6.335,14.253,14.253
+ c0,7.823-6.336,14.253-14.253,14.253C16.208,32.854,9.776,26.518,9.776,18.6z"/>
+ <path fill="#FFFF08" d="M9.798,18.6c0-7.811,6.326-14.232,14.232-14.232c7.812,0,14.234,6.326,14.234,14.232
+ c0,7.811-6.328,14.233-14.234,14.233C16.219,32.833,9.798,26.506,9.798,18.6z"/>
+ <path fill="#FFFF09" d="M9.819,18.6c0-7.8,6.317-14.211,14.211-14.211c7.8,0,14.212,6.317,14.212,14.211
+ c0,7.8-6.318,14.21-14.212,14.21C16.231,32.812,9.819,26.494,9.819,18.6z"/>
+ <path fill="#FFFF0A" d="M9.84,18.6c0-7.789,6.309-14.191,14.191-14.191c7.79,0,14.192,6.309,14.192,14.191
+ c0,7.789-6.309,14.191-14.192,14.191C16.243,32.791,9.84,26.482,9.84,18.6z"/>
+ <path fill="#FFFF0B" d="M9.862,18.6c0-7.778,6.299-14.17,14.17-14.17c7.779,0,14.169,6.299,14.169,14.17
+ c0,7.778-6.299,14.169-14.169,14.169C16.254,32.77,9.862,26.471,9.862,18.6z"/>
+ <path fill="#FFFF0C" d="M9.884,18.6c0-7.767,6.29-14.149,14.149-14.149c7.768,0,14.149,6.29,14.149,14.149
+ c0,7.767-6.291,14.149-14.149,14.149C16.266,32.749,9.884,26.459,9.884,18.6z"/>
+ <path fill="#FFFF0D" d="M9.905,18.6c0-7.756,6.281-14.128,14.128-14.128c7.756,0,14.129,6.281,14.129,14.128
+ c0,7.755-6.281,14.128-14.129,14.128C16.278,32.729,9.905,26.447,9.905,18.6z"/>
+ <path fill="#FFFF0E" d="M9.927,18.6c0-7.745,6.272-14.107,14.107-14.107c7.746,0,14.107,6.272,14.107,14.107
+ c0,7.746-6.27,14.107-14.107,14.107C16.29,32.707,9.927,26.436,9.927,18.6z"/>
+ <path fill="#FFFF0F" d="M9.949,18.6c0-7.733,6.263-14.086,14.086-14.086c7.733,0,14.088,6.262,14.088,14.086
+ c0,7.733-6.266,14.085-14.088,14.085C16.302,32.688,9.949,26.423,9.949,18.6z"/>
+ <path fill="#FFFF10" d="M9.97,18.6c0-7.722,6.253-14.065,14.065-14.065c7.723,0,14.067,6.253,14.067,14.065
+ c0,7.722-6.254,14.066-14.067,14.066C16.313,32.666,9.97,26.411,9.97,18.6z"/>
+ <path fill="#FFFF11" d="M9.992,18.6c0-7.711,6.244-14.044,14.044-14.044c7.712,0,14.044,6.245,14.044,14.044
+ c0,7.71-6.244,14.044-14.044,14.044C16.325,32.645,9.992,26.398,9.992,18.6z"/>
+ <path fill="#FFFF12" d="M10.013,18.6c0-7.7,6.235-14.023,14.023-14.023c7.7,0,14.024,6.235,14.024,14.023
+ c0,7.7-6.236,14.023-14.024,14.023C16.337,32.623,10.013,26.389,10.013,18.6z"/>
+ <path fill="#FFFF13" d="M10.035,18.6c0-7.688,6.226-14.002,14.002-14.002c7.689,0,14.004,6.226,14.004,14.002
+ c0,7.689-6.229,14.001-14.004,14.001C16.348,32.604,10.035,26.376,10.035,18.6z"/>
+ <path fill="#FFFF14" d="M10.057,18.6c0-7.678,6.217-13.981,13.981-13.981c7.679,0,13.981,6.217,13.981,13.981
+ c0,7.677-6.217,13.981-13.981,13.981C16.36,32.581,10.057,26.364,10.057,18.6z"/>
+ <path fill="#FFFF15" d="M10.078,18.6c0-7.667,6.208-13.961,13.961-13.961C31.707,4.639,38,10.847,38,18.6
+ c0,7.667-6.209,13.96-13.961,13.96C16.372,32.561,10.078,26.354,10.078,18.6z"/>
+ <path fill="#FFFF16" d="M10.1,18.6c0-7.655,6.198-13.94,13.939-13.94c7.656,0,13.941,6.199,13.941,13.94
+ c0,7.656-6.201,13.94-13.941,13.94C16.384,32.54,10.1,26.341,10.1,18.6z"/>
+ <path fill="#FFFF17" d="M10.121,18.6c0-7.644,6.189-13.919,13.919-13.919c7.646,0,13.919,6.189,13.919,13.919
+ c0,7.644-6.189,13.917-13.919,13.917C16.396,32.52,10.121,26.329,10.121,18.6z"/>
+ <path fill="#FFFF18" d="M10.143,18.6c0-7.633,6.181-13.898,13.898-13.898c7.633,0,13.898,6.18,13.898,13.898
+ c0,7.632-6.182,13.898-13.898,13.898C16.408,32.498,10.143,26.316,10.143,18.6z"/>
+ <path fill="#FFFF19" d="M10.164,18.6c0-7.622,6.171-13.877,13.877-13.877c7.623,0,13.877,6.171,13.877,13.877
+ c0,7.623-6.172,13.876-13.877,13.876C16.419,32.479,10.164,26.307,10.164,18.6z"/>
+ <path fill="#FFFF1A" d="M10.186,18.6c0-7.611,6.162-13.856,13.856-13.856c7.61,0,13.856,6.162,13.856,13.856
+ c0,7.611-6.162,13.856-13.856,13.856C16.431,32.456,10.186,26.294,10.186,18.6z"/>
+ <path fill="#FFFF1B" d="M10.208,18.6c0-7.6,6.153-13.835,13.835-13.835c7.602,0,13.836,6.153,13.836,13.835
+ c0,7.6-6.152,13.835-13.836,13.835C16.443,32.436,10.208,26.282,10.208,18.6z"/>
+ <path fill="#FFFF1C" d="M10.229,18.6c0-7.589,6.144-13.814,13.814-13.814c7.59,0,13.814,6.144,13.814,13.814
+ c0,7.587-6.145,13.814-13.814,13.814C16.454,32.414,10.229,26.271,10.229,18.6z"/>
+ <path fill="#FFFF1D" d="M10.251,18.6c0-7.578,6.135-13.793,13.793-13.793c7.579,0,13.794,6.135,13.794,13.793
+ c0,7.578-6.137,13.792-13.794,13.792C16.466,32.395,10.251,26.259,10.251,18.6z"/>
+ <path fill="#FFFF1E" d="M10.272,18.6c0-7.566,6.125-13.772,13.772-13.772c7.567,0,13.772,6.125,13.772,13.772
+ c0,7.567-6.125,13.773-13.772,13.773C16.478,32.373,10.272,26.247,10.272,18.6z"/>
+ <path fill="#FFFF1F" d="M10.294,18.6c0-7.556,6.116-13.752,13.751-13.752c7.557,0,13.752,6.117,13.752,13.752
+ c0,7.554-6.117,13.751-13.752,13.751C16.49,32.352,10.294,26.234,10.294,18.6z"/>
+ <path fill="#FFFF20" d="M10.315,18.6c0-7.544,6.107-13.731,13.731-13.731c7.544,0,13.731,6.107,13.731,13.731
+ c0,7.544-6.107,13.731-13.731,13.731C16.502,32.331,10.315,26.225,10.315,18.6z"/>
+ <path fill="#FFFF21" d="M10.337,18.6c0-7.533,6.098-13.71,13.709-13.71c7.534,0,13.71,6.098,13.71,13.71
+ c0,7.534-6.1,13.708-13.71,13.708C16.513,32.311,10.337,26.212,10.337,18.6z"/>
+ <path fill="#FFFF22" d="M10.358,18.6c0-7.522,6.088-13.688,13.689-13.688c7.521,0,13.689,6.088,13.689,13.688
+ c0,7.522-6.09,13.689-13.689,13.689C16.525,32.289,10.358,26.199,10.358,18.6z"/>
+ <path fill="#FFFF23" d="M10.38,18.6c0-7.511,6.08-13.668,13.668-13.668c7.511,0,13.669,6.08,13.669,13.668
+ c0,7.511-6.08,13.667-13.669,13.667C16.537,32.268,10.38,26.188,10.38,18.6z"/>
+ <path fill="#FFFF24" d="M10.401,18.6c0-7.5,6.071-13.647,13.647-13.647c7.501,0,13.647,6.07,13.647,13.647
+ c0,7.5-6.07,13.647-13.647,13.647C16.549,32.247,10.401,26.176,10.401,18.6z"/>
+ <path fill="#FFFF25" d="M10.423,18.6c0-7.489,6.062-13.626,13.626-13.626c7.49,0,13.627,6.061,13.627,13.626
+ c0,7.489-6.062,13.625-13.627,13.625C16.56,32.227,10.423,26.164,10.423,18.6z"/>
+ <path fill="#FFFF26" d="M10.445,18.6c0-7.478,6.052-13.605,13.605-13.605c7.478,0,13.606,6.052,13.606,13.605
+ c0,7.478-6.053,13.605-13.606,13.605C16.572,32.205,10.445,26.152,10.445,18.6z"/>
+ <path fill="#FFFF27" d="M10.466,18.6c0-7.467,6.043-13.584,13.584-13.584c7.468,0,13.585,6.043,13.585,13.584
+ c0,7.466-6.043,13.583-13.585,13.583C16.584,32.186,10.466,26.141,10.466,18.6z"/>
+ <path fill="#FFFF28" d="M10.488,18.6c0-7.456,6.034-13.563,13.563-13.563c7.457,0,13.562,6.034,13.562,13.563
+ c0,7.457-6.033,13.563-13.562,13.563C16.596,32.163,10.488,26.129,10.488,18.6z"/>
+ <path fill="#FFFF29" d="M10.509,18.6c0-7.445,6.025-13.542,13.542-13.542c7.445,0,13.543,6.024,13.543,13.542
+ c0,7.444-6.025,13.542-13.543,13.542C16.608,32.143,10.509,26.117,10.509,18.6z"/>
+ <path fill="#FFFF2A" d="M10.531,18.6c0-7.434,6.016-13.522,13.521-13.522c7.435,0,13.521,6.016,13.521,13.522
+ c0,7.433-6.016,13.521-13.521,13.521C16.619,32.121,10.531,26.105,10.531,18.6z"/>
+ <path fill="#FFFF2B" d="M10.552,18.6c0-7.422,6.006-13.501,13.501-13.501c7.422,0,13.502,6.007,13.502,13.501
+ c0,7.421-6.008,13.5-13.502,13.5C16.631,32.102,10.552,26.094,10.552,18.6z"/>
+ <path fill="#FFFF2C" d="M10.574,18.6c0-7.411,5.997-13.479,13.479-13.479c7.412,0,13.48,5.997,13.48,13.479
+ c0,7.411-5.998,13.48-13.48,13.48C16.643,32.08,10.574,26.082,10.574,18.6z"/>
+ <path fill="#FFFF2D" d="M10.596,18.6c0-7.4,5.988-13.458,13.458-13.458c7.401,0,13.46,5.988,13.46,13.458
+ c0,7.4-5.988,13.458-13.46,13.458C16.654,32.059,10.596,26.07,10.596,18.6z"/>
+ <path fill="#FFFF2E" d="M10.617,18.6c0-7.389,5.979-13.438,13.438-13.438c7.389,0,13.438,5.979,13.438,13.438
+ c0,7.389-5.979,13.438-13.438,13.438C16.666,32.038,10.617,26.059,10.617,18.6z"/>
+ <path fill="#FFFF2F" d="M10.639,18.6c0-7.377,5.97-13.417,13.417-13.417c7.377,0,13.417,5.97,13.417,13.417
+ c0,7.376-5.971,13.417-13.417,13.417C16.678,32.018,10.639,26.047,10.639,18.6z"/>
+ <path fill="#FFFF30" d="M10.66,18.6c0-7.366,5.96-13.396,13.396-13.396c7.368,0,13.395,5.961,13.395,13.396
+ c0,7.367-5.961,13.396-13.395,13.396C16.69,31.996,10.66,26.035,10.66,18.6z"/>
+ <path fill="#FFFF31" d="M10.682,18.6c0-7.355,5.951-13.375,13.375-13.375c7.355,0,13.375,5.952,13.375,13.375
+ c0,7.355-5.951,13.375-13.375,13.375C16.701,31.977,10.682,26.023,10.682,18.6z"/>
+ <path fill="#FFFF32" d="M10.703,18.6c0-7.344,5.943-13.354,13.354-13.354c7.343,0,13.355,5.943,13.355,13.354
+ c0,7.343-5.943,13.354-13.355,13.354C16.713,31.954,10.703,26.012,10.703,18.6z"/>
+ <path fill="#FFFF33" d="M10.725,18.6c0-7.333,5.933-13.333,13.333-13.333c7.334,0,13.334,5.934,13.334,13.333
+ c0,7.333-5.934,13.333-13.334,13.333C16.725,31.934,10.725,26,10.725,18.6z"/>
+ <path fill="#FFFF34" d="M10.747,18.6c0-7.322,5.924-13.312,13.312-13.312c7.322,0,13.312,5.924,13.312,13.312
+ c0,7.322-5.926,13.312-13.312,13.312C16.737,31.912,10.747,25.988,10.747,18.6z"/>
+ <path fill="#FFFF35" d="M10.768,18.6c0-7.311,5.915-13.292,13.292-13.292c7.311,0,13.292,5.915,13.292,13.292
+ c0,7.311-5.914,13.292-13.292,13.292C16.749,31.893,10.768,25.977,10.768,18.6z"/>
+ <path fill="#FFFF36" d="M10.79,18.6c0-7.3,5.906-13.271,13.271-13.271c7.3,0,13.271,5.906,13.271,13.271
+ c0,7.298-5.904,13.27-13.271,13.27C16.76,31.87,10.79,25.964,10.79,18.6z"/>
+ <path fill="#FFFF37" d="M10.811,18.6c0-7.289,5.897-13.25,13.25-13.25c7.289,0,13.25,5.896,13.25,13.25
+ c0,7.289-5.896,13.25-13.25,13.25C16.772,31.85,10.811,25.952,10.811,18.6z"/>
+ <path fill="#FFFF38" d="M10.833,18.6c0-7.278,5.888-13.229,13.229-13.229c7.278,0,13.229,5.887,13.229,13.229
+ c0,7.278-5.889,13.228-13.229,13.228C16.784,31.828,10.833,25.939,10.833,18.6z"/>
+ <path fill="#FFFF39" d="M10.854,18.6c0-7.267,5.878-13.208,13.208-13.208c7.268,0,13.208,5.878,13.208,13.208
+ c0,7.266-5.877,13.208-13.208,13.208C16.796,31.809,10.854,25.93,10.854,18.6z"/>
+ <path fill="#FFFF3A" d="M10.876,18.6c0-7.255,5.869-13.187,13.187-13.187c7.255,0,13.187,5.869,13.187,13.187
+ c0,7.255-5.869,13.187-13.187,13.187C16.807,31.787,10.876,25.917,10.876,18.6z"/>
+ <path fill="#FFFF3B" d="M10.898,18.6c0-7.245,5.86-13.166,13.166-13.166c7.245,0,13.167,5.86,13.167,13.166
+ c0,7.244-5.859,13.166-13.167,13.166C16.819,31.766,10.898,25.904,10.898,18.6z"/>
+ <path fill="#FFFF3C" d="M10.92,18.6c0-7.233,5.851-13.145,13.145-13.145c7.234,0,13.146,5.851,13.146,13.145
+ c0,7.233-5.854,13.145-13.146,13.145C16.831,31.745,10.92,25.895,10.92,18.6z"/>
+ <path fill="#FFFF3D" d="M10.941,18.6c0-7.222,5.842-13.125,13.124-13.125c7.222,0,13.125,5.842,13.125,13.125
+ c0,7.222-5.842,13.125-13.125,13.125C16.843,31.725,10.941,25.882,10.941,18.6z"/>
+ <path fill="#FFFF3E" d="M10.963,18.6c0-7.211,5.833-13.104,13.103-13.104c7.211,0,13.104,5.833,13.104,13.104
+ c0,7.21-5.832,13.103-13.104,13.103C16.855,31.703,10.963,25.87,10.963,18.6z"/>
+ <path fill="#FFFF3F" d="M10.984,18.6c0-7.2,5.823-13.082,13.083-13.082c7.201,0,13.083,5.823,13.083,13.082
+ c0,7.2-5.824,13.083-13.083,13.083C16.866,31.684,10.984,25.857,10.984,18.6z"/>
+ <path fill="#FFFF40" d="M11.005,18.6c0-7.189,5.815-13.062,13.062-13.062c7.189,0,13.062,5.814,13.062,13.062
+ c0,7.189-5.812,13.061-13.062,13.061C16.878,31.661,11.005,25.848,11.005,18.6z"/>
+ <path fill="#FFFF41" d="M11.027,18.6c0-7.178,5.805-13.041,13.041-13.041c7.178,0,13.042,5.805,13.042,13.041
+ c0,7.177-5.805,13.041-13.042,13.041C16.889,31.641,11.027,25.835,11.027,18.6z"/>
+ <path fill="#FFFF42" d="M11.048,18.6c0-7.167,5.796-13.02,13.02-13.02c7.167,0,13.02,5.796,13.02,13.02
+ c0,7.167-5.797,13.02-13.02,13.02C16.901,31.62,11.048,25.823,11.048,18.6z"/>
+ <path fill="#FFFF43" d="M11.07,18.6c0-7.156,5.787-12.999,12.998-12.999c7.157,0,13,5.787,13,12.999c0,7.155-5.787,13-13,13
+ C16.913,31.6,11.07,25.812,11.07,18.6z"/>
+ <path fill="#FFFF44" d="M11.091,18.6c0-7.145,5.778-12.978,12.978-12.978c7.146,0,12.978,5.778,12.978,12.978
+ c0,7.144-5.777,12.978-12.978,12.978C16.925,31.578,11.091,25.8,11.091,18.6z"/>
+ <path fill="#FFFF45" d="M11.113,18.6c0-7.133,5.769-12.957,12.957-12.957c7.133,0,12.958,5.769,12.958,12.957
+ c0,7.132-5.77,12.957-12.958,12.957C16.937,31.557,11.113,25.788,11.113,18.6z"/>
+ <path fill="#FFFF46" d="M11.135,18.6c0-7.123,5.759-12.936,12.936-12.936c7.123,0,12.937,5.759,12.937,12.936
+ c0,7.123-5.76,12.936-12.937,12.936C16.949,31.536,11.135,25.775,11.135,18.6z"/>
+ <path fill="#FFFF47" d="M11.157,18.6c0-7.111,5.75-12.915,12.915-12.915c7.112,0,12.915,5.75,12.915,12.915
+ c0,7.111-5.75,12.916-12.915,12.916C16.96,31.516,11.157,25.766,11.157,18.6z"/>
+ <path fill="#FFFF48" d="M11.178,18.6c0-7.1,5.741-12.894,12.895-12.894c7.101,0,12.894,5.741,12.894,12.894
+ c0,7.099-5.74,12.894-12.894,12.894C16.972,31.494,11.178,25.752,11.178,18.6z"/>
+ <path fill="#FFFF49" d="M11.199,18.6c0-7.089,5.732-12.873,12.874-12.873c7.089,0,12.873,5.731,12.873,12.873
+ c0,7.087-5.73,12.873-12.873,12.873C16.984,31.473,11.199,25.74,11.199,18.6z"/>
+ <path fill="#FFFF4A" d="M11.221,18.6c0-7.078,5.723-12.852,12.852-12.852c7.078,0,12.853,5.722,12.853,12.852
+ c0,7.078-5.725,12.852-12.854,12.852C16.995,31.452,11.221,25.729,11.221,18.6z"/>
+ <path fill="#FFFF4B" d="M11.242,18.6c0-7.067,5.714-12.832,12.832-12.832c7.067,0,12.833,5.713,12.833,12.832
+ c0,7.066-5.715,12.832-12.833,12.832C17.007,31.432,11.242,25.717,11.242,18.6z"/>
+ <path fill="#FFFF4C" d="M11.264,18.6c0-7.056,5.705-12.811,12.811-12.811c7.056,0,12.812,5.704,12.812,12.811
+ c0,7.054-5.705,12.81-12.812,12.81C17.019,31.41,11.264,25.705,11.264,18.6z"/>
+ <path fill="#FFFF4D" d="M11.286,18.6c0-7.044,5.695-12.79,12.79-12.79c7.045,0,12.79,5.695,12.79,12.79
+ c0,7.044-5.693,12.791-12.79,12.791C17.031,31.391,11.286,25.693,11.286,18.6z"/>
+ <path fill="#FFFF4E" d="M11.307,18.6c0-7.033,5.686-12.769,12.769-12.769c7.034,0,12.77,5.686,12.77,12.769
+ c0,7.034-5.688,12.768-12.77,12.768C17.043,31.368,11.307,25.684,11.307,18.6z"/>
+ <path fill="#FFFF4F" d="M11.329,18.6c0-7.022,5.677-12.748,12.748-12.748c7.023,0,12.748,5.677,12.748,12.748
+ c0,7.022-5.678,12.748-12.748,12.748C17.054,31.348,11.329,25.67,11.329,18.6z"/>
+ <path fill="#FFFF50" d="M11.351,18.6c0-7.011,5.667-12.727,12.727-12.727c7.012,0,12.727,5.668,12.727,12.727
+ c0,7.011-5.668,12.727-12.727,12.727C17.066,31.327,11.351,25.658,11.351,18.6z"/>
+ <path fill="#FFFF51" d="M11.372,18.6c0-7,5.659-12.706,12.706-12.706c7,0,12.705,5.659,12.705,12.706
+ c0,7-5.658,12.707-12.705,12.707C17.078,31.307,11.372,25.646,11.372,18.6z"/>
+ <path fill="#FFFF52" d="M11.394,18.6c0-6.989,5.65-12.685,12.685-12.685c6.987,0,12.685,5.65,12.685,12.685
+ c0,6.989-5.648,12.685-12.685,12.685C17.09,31.285,11.394,25.635,11.394,18.6z"/>
+ <path fill="#FFFF53" d="M11.415,18.6c0-6.978,5.641-12.664,12.664-12.664c6.978,0,12.665,5.641,12.665,12.664
+ c0,6.978-5.641,12.664-12.665,12.664C17.102,31.264,11.415,25.623,11.415,18.6z"/>
+ <path fill="#FFFF54" d="M11.437,18.6c0-6.967,5.631-12.643,12.643-12.643c6.967,0,12.645,5.631,12.645,12.643
+ c0,6.966-5.633,12.643-12.645,12.643C17.113,31.243,11.437,25.611,11.437,18.6z"/>
+ <path fill="#FFFF55" d="M11.459,18.6c0-6.956,5.622-12.623,12.622-12.623c6.956,0,12.622,5.623,12.622,12.623
+ c0,6.957-5.621,12.623-12.622,12.623C17.125,31.223,11.459,25.6,11.459,18.6z"/>
+ <path fill="#FFFF56" d="M11.48,18.6c0-6.944,5.613-12.602,12.602-12.602c6.945,0,12.602,5.613,12.602,12.602
+ c0,6.944-5.613,12.601-12.602,12.601C17.137,31.201,11.48,25.588,11.48,18.6z"/>
+ <path fill="#FFFF57" d="M11.502,18.6c0-6.934,5.604-12.581,12.581-12.581c6.933,0,12.581,5.604,12.581,12.581
+ c0,6.933-5.604,12.582-12.581,12.582C17.149,31.182,11.502,25.576,11.502,18.6z"/>
+ <path fill="#FFFF58" d="M11.523,18.6c0-6.922,5.595-12.56,12.56-12.56c6.923,0,12.56,5.595,12.56,12.56
+ c0,6.921-5.594,12.559-12.56,12.559C17.16,31.159,11.523,25.564,11.523,18.6z"/>
+ <path fill="#FFFF59" d="M11.545,18.6c0-6.911,5.585-12.539,12.539-12.539c6.912,0,12.539,5.585,12.539,12.539
+ c0,6.911-5.586,12.539-12.539,12.539C17.172,31.139,11.545,25.553,11.545,18.6z"/>
+ <path fill="#FFFF5A" d="M11.566,18.6c0-6.9,5.577-12.518,12.518-12.518c6.9,0,12.518,5.576,12.518,12.518
+ c0,6.9-5.576,12.517-12.518,12.517C17.184,31.117,11.566,25.541,11.566,18.6z"/>
+ <path fill="#FFFF5B" d="M11.588,18.6c0-6.889,5.567-12.497,12.497-12.497c6.89,0,12.497,5.567,12.497,12.497
+ c0,6.889-5.566,12.498-12.497,12.498C17.195,31.098,11.588,25.529,11.588,18.6z"/>
+ <path fill="#FFFF5C" d="M11.609,18.6c0-6.878,5.558-12.476,12.476-12.476c6.878,0,12.476,5.559,12.476,12.476
+ c0,6.876-5.559,12.476-12.476,12.476C17.208,31.076,11.609,25.518,11.609,18.6z"/>
+ <path fill="#FFFF5D" d="M11.631,18.6c0-6.867,5.549-12.455,12.455-12.455c6.867,0,12.455,5.549,12.455,12.455
+ c0,6.867-5.549,12.455-12.455,12.455C17.219,31.055,11.631,25.506,11.631,18.6z"/>
+ <path fill="#FFFF5E" d="M11.652,18.6c0-6.855,5.54-12.434,12.434-12.434c6.855,0,12.434,5.54,12.434,12.434
+ c0,6.855-5.539,12.434-12.434,12.434C17.231,31.034,11.652,25.494,11.652,18.6z"/>
+ <path fill="#FFFF5F" d="M11.674,18.6c0-6.844,5.531-12.413,12.413-12.413c6.845,0,12.415,5.531,12.415,12.413
+ c0,6.843-5.531,12.414-12.415,12.414C17.243,31.014,11.674,25.482,11.674,18.6z"/>
+ <path fill="#FFFF60" d="M11.695,18.6c0-6.833,5.521-12.392,12.393-12.392c6.834,0,12.393,5.521,12.393,12.392
+ c0,6.833-5.521,12.392-12.393,12.392C17.254,30.992,11.695,25.471,11.695,18.6z"/>
+ <path fill="#FFFF61" d="M11.717,18.6c0-6.822,5.513-12.371,12.372-12.371c6.823,0,12.372,5.512,12.372,12.371
+ c0,6.822-5.514,12.371-12.372,12.371C17.266,30.971,11.717,25.459,11.717,18.6z"/>
+ <path fill="#FFFF62" d="M11.739,18.6c0-6.811,5.503-12.351,12.35-12.351c6.812,0,12.351,5.503,12.351,12.351
+ c0,6.811-5.504,12.35-12.351,12.35C17.278,30.95,11.739,25.447,11.739,18.6z"/>
+ <path fill="#FFFF63" d="M11.76,18.6c0-6.8,5.494-12.33,12.33-12.33c6.799,0,12.33,5.494,12.33,12.33
+ c0,6.798-5.494,12.33-12.33,12.33C17.29,30.93,11.76,25.436,11.76,18.6z"/>
+ <path fill="#FFFF64" d="M11.782,18.6c0-6.789,5.485-12.309,12.309-12.309c6.79,0,12.31,5.485,12.31,12.309
+ c0,6.789-5.484,12.308-12.31,12.308C17.301,30.908,11.782,25.423,11.782,18.6z"/>
+ <path fill="#FFFF65" d="M11.803,18.6c0-6.778,5.476-12.288,12.288-12.288c6.778,0,12.288,5.476,12.288,12.288
+ c0,6.778-5.477,12.289-12.288,12.289C17.313,30.889,11.803,25.411,11.803,18.6z"/>
+ <path fill="#FFFF66" d="M11.825,18.6c0-6.767,5.467-12.267,12.267-12.267c6.768,0,12.268,5.466,12.268,12.267
+ c0,6.766-5.467,12.266-12.268,12.266C17.325,30.866,11.825,25.398,11.825,18.6z"/>
+ <path fill="#FFFF67" d="M11.847,18.6c0-6.756,5.457-12.246,12.246-12.246c6.757,0,12.247,5.458,12.247,12.246
+ c0,6.755-5.459,12.246-12.247,12.246C17.337,30.846,11.847,25.389,11.847,18.6z"/>
+ <path fill="#FFFF68" d="M11.868,18.6c0-6.745,5.449-12.225,12.225-12.225c6.745,0,12.226,5.448,12.226,12.225
+ c0,6.746-5.449,12.224-12.226,12.224C17.348,30.824,11.868,25.376,11.868,18.6z"/>
+ <path fill="#FFFF69" d="M11.89,18.6c0-6.733,5.439-12.204,12.204-12.204c6.732,0,12.205,5.439,12.205,12.204
+ c0,6.733-5.439,12.205-12.205,12.205C17.36,30.805,11.89,25.364,11.89,18.6z"/>
+ <path fill="#FFFF6A" d="M11.911,18.6c0-6.723,5.43-12.183,12.183-12.183c6.723,0,12.184,5.43,12.184,12.183
+ c0,6.722-5.43,12.183-12.184,12.183C17.372,30.783,11.911,25.354,11.911,18.6z"/>
+ <path fill="#FFFF6B" d="M11.933,18.6c0-6.711,5.421-12.162,12.162-12.162c6.712,0,12.163,5.421,12.163,12.162
+ c0,6.71-5.422,12.162-12.163,12.162C17.384,30.762,11.933,25.341,11.933,18.6z"/>
+ <path fill="#FFFF6C" d="M11.954,18.6c0-6.7,5.412-12.141,12.142-12.141c6.701,0,12.141,5.412,12.141,12.141
+ c0,6.7-5.412,12.141-12.141,12.141C17.396,30.741,11.954,25.329,11.954,18.6z"/>
+ <path fill="#FFFF6D" d="M11.976,18.6c0-6.689,5.402-12.121,12.12-12.121c6.688,0,12.121,5.403,12.121,12.121
+ c0,6.689-5.402,12.121-12.121,12.121C17.407,30.721,11.976,25.316,11.976,18.6z"/>
+ <path fill="#FFFF6E" d="M11.998,18.6c0-6.678,5.393-12.099,12.099-12.099c6.679,0,12.099,5.393,12.099,12.099
+ c0,6.677-5.393,12.099-12.099,12.099C17.419,30.699,11.998,25.307,11.998,18.6z"/>
+ <path fill="#FFFF6F" d="M12.019,18.6c0-6.667,5.384-12.079,12.079-12.079c6.667,0,12.078,5.384,12.078,12.079
+ c0,6.667-5.383,12.078-12.078,12.078C17.431,30.678,12.019,25.294,12.019,18.6z"/>
+ <path fill="#FFFF70" d="M12.041,18.6c0-6.656,5.375-12.058,12.058-12.058c6.655,0,12.057,5.375,12.057,12.058
+ c0,6.655-5.375,12.057-12.057,12.057C17.442,30.657,12.041,25.282,12.041,18.6z"/>
+ <path fill="#FFFF71" d="M12.062,18.6c0-6.645,5.366-12.037,12.037-12.037c6.645,0,12.036,5.366,12.036,12.037
+ c0,6.644-5.365,12.037-12.036,12.037C17.454,30.637,12.062,25.271,12.062,18.6z"/>
+ <path fill="#FFFF72" d="M12.084,18.6c0-6.633,5.357-12.016,12.016-12.016c6.632,0,12.015,5.357,12.015,12.016
+ c0,6.632-5.355,12.015-12.015,12.015C17.466,30.615,12.084,25.259,12.084,18.6z"/>
+ <path fill="#FFFF73" d="M12.105,18.6c0-6.622,5.348-11.995,11.995-11.995c6.623,0,11.996,5.348,11.996,11.995
+ c0,6.623-5.35,11.996-11.996,11.996C17.478,30.596,12.105,25.247,12.105,18.6z"/>
+ <path fill="#FFFF74" d="M12.127,18.6c0-6.611,5.338-11.974,11.974-11.974c6.612,0,11.973,5.339,11.973,11.974
+ c0,6.611-5.338,11.973-11.973,11.973C17.49,30.573,12.127,25.234,12.127,18.6z"/>
+ <path fill="#FFFF75" d="M12.149,18.6c0-6.6,5.329-11.953,11.953-11.953c6.599,0,11.953,5.33,11.953,11.953
+ c0,6.6-5.328,11.953-11.953,11.953C17.502,30.553,12.149,25.225,12.149,18.6z"/>
+ <path fill="#FFFF76" d="M12.17,18.6c0-6.589,5.32-11.932,11.932-11.932c6.589,0,11.931,5.32,11.931,11.932
+ c0,6.587-5.318,11.932-11.931,11.932C17.513,30.532,12.17,25.212,12.17,18.6z"/>
+ <path fill="#FFFF77" d="M12.192,18.6c0-6.578,5.311-11.911,11.911-11.911c6.579,0,11.913,5.311,11.913,11.911
+ c0,6.578-5.312,11.911-11.913,11.911C17.525,30.511,12.192,25.2,12.192,18.6z"/>
+ <path fill="#FFFF78" d="M12.213,18.6c0-6.567,5.302-11.89,11.891-11.89c6.568,0,11.89,5.302,11.89,11.89
+ c0,6.567-5.303,11.89-11.89,11.89C17.537,30.49,12.213,25.188,12.213,18.6z"/>
+ <path fill="#FFFF79" d="M12.235,18.6c0-6.556,5.292-11.87,11.869-11.87c6.556,0,11.869,5.293,11.869,11.87
+ c0,6.554-5.293,11.869-11.869,11.869C17.548,30.469,12.235,25.176,12.235,18.6z"/>
+ <path fill="#FFFF7A" d="M12.256,18.6c0-6.544,5.284-11.849,11.848-11.849c6.544,0,11.847,5.284,11.847,11.849
+ c0,6.544-5.281,11.848-11.847,11.848C17.56,30.448,12.256,25.164,12.256,18.6z"/>
+ <path fill="#FFFF7B" d="M12.278,18.6c0-6.533,5.274-11.828,11.828-11.828c6.533,0,11.828,5.274,11.828,11.828
+ c0,6.533-5.275,11.828-11.828,11.828C17.572,30.428,12.278,25.152,12.278,18.6z"/>
+ <path fill="#FFFF7C" d="M12.299,18.6c0-6.522,5.266-11.807,11.807-11.807c6.523,0,11.808,5.265,11.808,11.807
+ c0,6.522-5.268,11.806-11.808,11.806C17.584,30.406,12.299,25.141,12.299,18.6z"/>
+ <path fill="#FFFF7D" d="M12.321,18.6c0-6.511,5.256-11.786,11.786-11.786c6.51,0,11.786,5.256,11.786,11.786
+ c0,6.511-5.256,11.786-11.786,11.786C17.595,30.386,12.321,25.129,12.321,18.6z"/>
+ <path fill="#FFFF7E" d="M12.342,18.6c0-6.5,5.247-11.765,11.765-11.765c6.5,0,11.764,5.247,11.764,11.765
+ c0,6.5-5.246,11.764-11.764,11.764C17.608,30.364,12.342,25.117,12.342,18.6z"/>
+ <path fill="#FFFF7F" d="M12.364,18.6c0-6.489,5.238-11.744,11.744-11.744c6.49,0,11.744,5.238,11.744,11.744
+ c0,6.489-5.238,11.744-11.744,11.744C17.619,30.344,12.364,25.105,12.364,18.6z"/>
+ <path fill="#FFFF80" d="M12.386,18.6c0-6.478,5.229-11.723,11.723-11.723c6.479,0,11.723,5.229,11.723,11.723
+ c0,6.477-5.229,11.722-11.723,11.722C17.631,30.322,12.386,25.094,12.386,18.6z"/>
+ <path fill="#FFFF81" d="M12.407,18.6c0-6.467,5.22-11.702,11.702-11.702c6.465,0,11.702,5.22,11.702,11.702
+ c0,6.466-5.219,11.702-11.702,11.702C17.643,30.302,12.407,25.082,12.407,18.6z"/>
+ <path fill="#FFFF82" d="M12.429,18.6c0-6.456,5.21-11.681,11.681-11.681c6.455,0,11.681,5.21,11.681,11.681
+ c0,6.457-5.209,11.681-11.681,11.681C17.654,30.281,12.429,25.07,12.429,18.6z"/>
+ <path fill="#FFFF83" d="M12.45,18.6c0-6.444,5.202-11.66,11.661-11.66c6.444,0,11.661,5.201,11.661,11.66
+ c0,6.444-5.203,11.66-11.661,11.66C17.666,30.26,12.45,25.059,12.45,18.6z"/>
+ <path fill="#FFFF84" d="M12.472,18.6c0-6.434,5.192-11.639,11.639-11.639c6.434,0,11.639,5.192,11.639,11.639
+ c0,6.433-5.191,11.639-11.639,11.639C17.678,30.239,12.472,25.047,12.472,18.6z"/>
+ <path fill="#FFFF85" d="M12.493,18.6c0-6.422,5.183-11.619,11.619-11.619c6.421,0,11.619,5.183,11.619,11.619
+ c0,6.421-5.184,11.618-11.619,11.618C17.69,30.218,12.493,25.035,12.493,18.6z"/>
+ <path fill="#FFFF86" d="M12.515,18.6c0-6.411,5.174-11.598,11.598-11.598c6.411,0,11.598,5.174,11.598,11.598
+ c0,6.411-5.174,11.597-11.598,11.597C17.701,30.197,12.515,25.023,12.515,18.6z"/>
+ <path fill="#FFFF87" d="M12.537,18.6c0-6.4,5.165-11.577,11.577-11.577c6.4,0,11.578,5.165,11.578,11.577
+ c0,6.4-5.166,11.577-11.578,11.577C17.713,30.177,12.537,25.012,12.537,18.6z"/>
+ <path fill="#FFFF88" d="M12.558,18.6c0-6.389,5.156-11.556,11.556-11.556c6.39,0,11.556,5.155,11.556,11.556
+ c0,6.388-5.156,11.554-11.556,11.554C17.725,30.154,12.558,25,12.558,18.6z"/>
+ <path fill="#FFFF89" d="M12.58,18.6c0-6.378,5.146-11.535,11.535-11.535c6.377,0,11.534,5.146,11.534,11.535
+ c0,6.376-5.145,11.535-11.534,11.535C17.737,30.135,12.58,24.988,12.58,18.6z"/>
+ <path fill="#FFFF8A" d="M12.601,18.6c0-6.367,5.138-11.514,11.514-11.514c6.368,0,11.514,5.137,11.514,11.514
+ c0,6.367-5.139,11.513-11.514,11.513C17.749,30.113,12.601,24.977,12.601,18.6z"/>
+ <path fill="#FFFF8B" d="M12.623,18.6c0-6.356,5.128-11.493,11.493-11.493c6.355,0,11.494,5.128,11.494,11.493
+ c0,6.355-5.129,11.493-11.494,11.493C17.76,30.093,12.623,24.965,12.623,18.6z"/>
+ <path fill="#FFFF8C" d="M12.645,18.6c0-6.345,5.119-11.472,11.472-11.472c6.344,0,11.473,5.119,11.473,11.472
+ c0,6.343-5.119,11.47-11.473,11.47C17.772,30.07,12.645,24.953,12.645,18.6z"/>
+ <path fill="#FFFF8D" d="M12.666,18.6c0-6.333,5.11-11.451,11.451-11.451c6.333,0,11.452,5.11,11.452,11.451
+ c0,6.333-5.109,11.451-11.452,11.451C17.784,30.051,12.666,24.941,12.666,18.6z"/>
+ <path fill="#FFFF8E" d="M12.688,18.6c0-6.322,5.101-11.43,11.43-11.43c6.322,0,11.431,5.101,11.431,11.43
+ c0,6.322-5.102,11.429-11.431,11.429C17.796,30.029,12.688,24.93,12.688,18.6z"/>
+ <path fill="#FFFF8F" d="M12.709,18.6c0-6.312,5.092-11.409,11.41-11.409c6.311,0,11.409,5.091,11.409,11.409
+ c0,6.311-5.092,11.409-11.409,11.409C17.807,30.009,12.709,24.917,12.709,18.6z"/>
+ <path fill="#FFFF90" d="M12.731,18.6c0-6.3,5.083-11.388,11.389-11.388c6.3,0,11.388,5.082,11.388,11.388
+ c0,6.298-5.082,11.388-11.388,11.388C17.819,29.988,12.731,24.904,12.731,18.6z"/>
+ <path fill="#FFFF91" d="M12.753,18.6c0-6.289,5.073-11.368,11.367-11.368c6.288,0,11.366,5.073,11.366,11.368
+ c0,6.289-5.072,11.367-11.366,11.367C17.831,29.967,12.753,24.895,12.753,18.6z"/>
+ <path fill="#FFFF92" d="M12.774,18.6c0-6.278,5.064-11.347,11.347-11.347c6.277,0,11.346,5.064,11.346,11.347
+ c0,6.278-5.062,11.345-11.346,11.345C17.842,29.945,12.774,24.882,12.774,18.6z"/>
+ <path fill="#FFFF93" d="M12.796,18.6c0-6.267,5.055-11.326,11.326-11.326c6.267,0,11.325,5.055,11.325,11.326
+ c0,6.266-5.055,11.326-11.325,11.326C17.854,29.926,12.796,24.87,12.796,18.6z"/>
+ <path fill="#FFFF94" d="M12.817,18.6c0-6.256,5.046-11.305,11.305-11.305c6.257,0,11.306,5.046,11.306,11.305
+ c0,6.255-5.047,11.304-11.306,11.304C17.866,29.904,12.817,24.857,12.817,18.6z"/>
+ <path fill="#FFFF95" d="M12.838,18.6c0-6.245,5.037-11.284,11.284-11.284c6.243,0,11.282,5.037,11.282,11.284
+ c0,6.246-5.035,11.284-11.282,11.284C17.878,29.884,12.838,24.848,12.838,18.6z"/>
+ <path fill="#FFFF96" d="M12.86,18.6c0-6.233,5.028-11.263,11.263-11.263c6.232,0,11.262,5.028,11.262,11.263
+ c0,6.233-5.027,11.261-11.262,11.261C17.89,29.861,12.86,24.835,12.86,18.6z"/>
+ <path fill="#FFFF97" d="M12.882,18.6c0-6.223,5.018-11.242,11.242-11.242c6.222,0,11.241,5.019,11.241,11.242
+ c0,6.222-5.018,11.242-11.241,11.242C17.901,29.842,12.882,24.823,12.882,18.6z"/>
+ <path fill="#FFFF98" d="M12.903,18.6c0-6.211,5.009-11.221,11.221-11.221S35.346,12.388,35.346,18.6
+ c0,6.21-5.01,11.22-11.222,11.22C17.913,29.82,12.903,24.812,12.903,18.6z"/>
+ <path fill="#FFFF99" d="M12.925,18.6c0-6.2,5-11.2,11.2-11.2c6.199,0,11.199,5,11.199,11.2c0,6.2-5,11.2-11.199,11.2
+ C17.925,29.8,12.925,24.8,12.925,18.6z"/>
+ </g>
+
+ <linearGradient id="XMLID_67_" gradientUnits="userSpaceOnUse" x1="396.2324" y1="753.8262" x2="396.2324" y2="763.584" gradientTransform="matrix(1 0 0 1 -372 -747)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#FFFF99"/>
+ </linearGradient>
+ <path fill="url(#XMLID_67_)" d="M15.358,11.705c0-2.701,3.961-4.879,8.875-4.879c4.912,0,8.875,2.178,8.875,4.879
+ s-3.963,4.879-8.875,4.879C19.32,16.583,15.358,14.405,15.358,11.705z"/>
+ <path fill="#666666" d="M23.125,41.3v0.9c0,0.899,0.7,1.6,1.6,1.6c0.9,0,1.6-0.7,1.6-1.6v-0.9h-3.299H23.125z"/>
+
+ <linearGradient id="XMLID_68_" gradientUnits="userSpaceOnUse" x1="396.625" y1="784.8896" x2="396.625" y2="788.9111" gradientTransform="matrix(1 0 0 1 -372 -747)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#000000"/>
+ </linearGradient>
+ <path fill="url(#XMLID_68_)" d="M28.225,37.9l-7.6,0.8c-0.9,0.1-1.5,0.899-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.801
+ c0.9-0.102,1.5-0.899,1.4-1.802C29.926,38.4,29.125,37.8,28.225,37.9z"/>
+
+ <linearGradient id="XMLID_69_" gradientUnits="userSpaceOnUse" x1="396.625" y1="781.6895" x2="396.625" y2="785.7109" gradientTransform="matrix(1 0 0 1 -372 -747)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#000000"/>
+ </linearGradient>
+ <path fill="url(#XMLID_69_)" d="M28.225,34.7l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8
+ c0.9-0.101,1.5-0.9,1.4-1.801C29.926,35.2,29.125,34.6,28.225,34.7z"/>
+
+ <linearGradient id="XMLID_70_" gradientUnits="userSpaceOnUse" x1="396.625" y1="778.5889" x2="396.625" y2="782.6104" gradientTransform="matrix(1 0 0 1 -372 -747)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#000000"/>
+ </linearGradient>
+ <path fill="url(#XMLID_70_)" d="M28.225,31.6l-7.6,0.801c-0.9,0.1-1.5,0.897-1.4,1.8c0.1,0.899,0.9,1.5,1.8,1.399l7.6-0.802
+ c0.9-0.1,1.5-0.897,1.4-1.8S29.125,31.5,28.225,31.6z"/>
+ <path fill="none" stroke="#000000" stroke-width="1.0944" d="M22.325,28.3l-3.5-10.7c0,0,6.601,3.9,10.5,0"/>
+</g>
+<g id="crop_x0020_marks">
+ <path fill="none" d="M47.975,48h-48V0h48V48z"/>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/colorsvg/up.svg b/utils/bcmregtool/elfio/doc/images/colorsvg/up.svg
new file mode 100644
index 0000000..8eca45f
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/colorsvg/up.svg
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Up" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<g>
+ <path fill="#FFFFFF" stroke="#FFFFFF" stroke-width="7.5901" stroke-linejoin="round" d="M41.104,25.661
+ c0.301,0,0.301-0.3,0.198-0.5l-16.899-16.6c-0.5-0.5-0.7-0.4-1,0l-16.7,16.6c-0.1,0.103-0.1,0.399,0.1,0.399h10v13.601
+ c0,0.301,0.2,0.5,0.4,0.5h13.299c0.398,0,0.5-0.199,0.5-0.601v-13.5L41.104,25.661z"/>
+ <g>
+ <path fill="#0033CC" d="M41.104,25.661c0.301,0,0.301-0.3,0.198-0.5l-16.899-16.6c-0.5-0.5-0.7-0.4-1,0l-16.7,16.6
+ c-0.1,0.103-0.1,0.399,0.1,0.399h10v13.601c0,0.301,0.2,0.5,0.4,0.5h13.299c0.398,0,0.5-0.199,0.5-0.601v-13.5L41.104,25.661z"/>
+ <path fill="#0134CC" d="M41.075,25.65c0.3,0,0.3-0.299,0.198-0.498L24.402,8.577c-0.499-0.499-0.699-0.4-0.998,0L6.73,25.152
+ c-0.1,0.101-0.1,0.397,0.099,0.397h9.984v13.581c0,0.303,0.2,0.499,0.4,0.499h13.279c0.398,0,0.499-0.196,0.499-0.601V25.55
+ L41.075,25.65z"/>
+ <path fill="#0235CD" d="M41.049,25.643c0.301,0,0.301-0.3,0.199-0.498L24.401,8.591c-0.498-0.498-0.697-0.399-0.996,0
+ L6.757,25.145c-0.1,0.101-0.1,0.397,0.099,0.397h9.969v13.562c0,0.301,0.199,0.5,0.399,0.5H30.48c0.397,0,0.498-0.199,0.498-0.601
+ V25.542L41.049,25.643z"/>
+ <path fill="#0336CD" d="M41.021,25.632c0.299,0,0.299-0.299,0.199-0.498L24.4,8.604c-0.498-0.498-0.696-0.399-0.995,0
+ L6.783,25.134c-0.099,0.101-0.099,0.398,0.099,0.398h9.953v13.543c0,0.299,0.199,0.495,0.398,0.495h13.24
+ c0.396,0,0.495-0.196,0.495-0.596v-13.44L41.021,25.632z"/>
+ <path fill="#0437CE" d="M40.995,25.622c0.299,0,0.299-0.299,0.198-0.496L24.4,8.62c-0.497-0.497-0.696-0.398-0.994,0L6.811,25.126
+ c-0.099,0.101-0.099,0.396,0.099,0.396h9.938v13.523c0,0.299,0.199,0.496,0.397,0.496h13.217c0.396,0,0.496-0.197,0.496-0.598
+ v-13.42L40.995,25.622z"/>
+ <path fill="#0538CE" d="M40.969,25.614c0.299,0,0.299-0.3,0.198-0.498L24.399,8.634c-0.496-0.496-0.694-0.397-0.992,0
+ L6.837,25.116c-0.099,0.102-0.099,0.397,0.099,0.397h9.922v13.504c0,0.299,0.199,0.496,0.398,0.496h13.195
+ c0.396,0,0.494-0.197,0.494-0.597V25.514L40.969,25.614z"/>
+ <path fill="#0639CF" d="M40.941,25.604c0.297,0,0.297-0.297,0.197-0.496L24.399,8.649c-0.496-0.496-0.693-0.397-0.99,0
+ L6.864,25.107c-0.099,0.101-0.099,0.396,0.099,0.396h9.906v13.483c0,0.3,0.199,0.496,0.397,0.496h13.173
+ c0.396,0,0.496-0.196,0.496-0.596V25.505L40.941,25.604z"/>
+ <path fill="#073ACF" d="M40.915,25.594c0.298,0,0.298-0.298,0.196-0.494L24.398,8.664c-0.495-0.495-0.692-0.397-0.989,0
+ L6.891,25.1c-0.099,0.101-0.099,0.396,0.098,0.396h9.892V38.96c0,0.298,0.198,0.494,0.396,0.494h13.155
+ c0.396,0,0.494-0.196,0.494-0.593V25.495L40.915,25.594z"/>
+ <path fill="#083BD0" d="M40.891,25.585c0.297,0,0.297-0.297,0.196-0.496l-16.69-16.41c-0.494-0.494-0.691-0.396-0.987,0
+ L6.918,25.089c-0.099,0.101-0.099,0.396,0.098,0.396h9.875V38.93c0,0.299,0.198,0.495,0.396,0.495h13.134
+ c0.396,0,0.494-0.196,0.494-0.595V25.486L40.891,25.585z"/>
+ <path fill="#093CD0" d="M40.859,25.575c0.3,0,0.3-0.296,0.199-0.494L24.397,8.692c-0.493-0.494-0.69-0.396-0.985,0L6.945,25.081
+ c-0.098,0.101-0.098,0.396,0.098,0.396h9.86v13.428c0,0.298,0.197,0.494,0.395,0.494h13.113c0.396,0,0.491-0.196,0.491-0.594
+ V25.477L40.859,25.575z"/>
+ <path fill="#0A3DD1" d="M40.835,25.564c0.296,0,0.296-0.295,0.197-0.491L24.396,8.707c-0.492-0.493-0.689-0.395-0.984,0
+ L6.972,25.073c-0.098,0.098-0.098,0.395,0.098,0.395h9.844v13.408c0,0.295,0.197,0.492,0.394,0.492h13.09
+ c0.396,0,0.492-0.197,0.492-0.593V25.465L40.835,25.564z"/>
+ <path fill="#0B3ED1" d="M40.811,25.557c0.295,0,0.295-0.296,0.195-0.492L24.396,8.723c-0.492-0.493-0.688-0.394-0.983,0
+ L6.999,25.062c-0.098,0.101-0.098,0.396,0.098,0.396h9.829v13.388c0,0.297,0.197,0.491,0.394,0.491h13.073
+ c0.395,0,0.489-0.194,0.489-0.59V25.458L40.811,25.557z"/>
+ <path fill="#0C3FD2" d="M40.782,25.546c0.295,0,0.295-0.295,0.194-0.491L24.395,8.736c-0.491-0.492-0.687-0.394-0.981,0
+ L7.026,25.055c-0.098,0.1-0.098,0.396,0.098,0.396h9.813v13.368c0,0.296,0.197,0.49,0.393,0.49h13.051
+ c0.395,0,0.49-0.194,0.49-0.588V25.448L40.782,25.546z"/>
+ <path fill="#0D40D2" d="M40.755,25.536c0.295,0,0.295-0.293,0.196-0.49L24.394,8.75c-0.489-0.491-0.685-0.393-0.979,0
+ L7.053,25.046c-0.098,0.099-0.098,0.394,0.098,0.394h9.797V38.79c0,0.297,0.196,0.492,0.392,0.492h13.03
+ c0.394,0,0.489-0.195,0.489-0.591V25.438L40.755,25.536z"/>
+ <path fill="#0E41D3" d="M40.729,25.527c0.293,0,0.293-0.295,0.195-0.489L24.394,8.766c-0.489-0.489-0.685-0.392-0.978,0
+ L7.08,25.038c-0.097,0.099-0.097,0.394,0.098,0.394h9.782V38.76c0,0.295,0.196,0.489,0.392,0.489h13.007
+ c0.394,0,0.488-0.194,0.488-0.588V25.43L40.729,25.527z"/>
+ <path fill="#0F42D3" d="M40.702,25.518c0.294,0,0.294-0.293,0.194-0.488L24.393,8.781c-0.488-0.489-0.683-0.392-0.976,0
+ L7.107,25.027c-0.097,0.101-0.097,0.394,0.098,0.394h9.766v13.312c0,0.295,0.195,0.49,0.391,0.49h12.99
+ c0.393,0,0.487-0.195,0.487-0.588V25.419L40.702,25.518z"/>
+ <path fill="#1043D4" d="M40.676,25.508c0.293,0,0.293-0.294,0.195-0.488L24.392,8.794c-0.487-0.488-0.682-0.392-0.975,0
+ L7.134,25.02c-0.097,0.101-0.097,0.394,0.097,0.394h9.75v13.293c0,0.293,0.196,0.485,0.391,0.485H30.34
+ c0.393,0,0.487-0.192,0.487-0.586V25.411L40.676,25.508z"/>
+ <path fill="#1144D4" d="M40.646,25.497c0.293,0,0.293-0.293,0.194-0.487l-16.45-16.2c-0.487-0.488-0.681-0.391-0.973,0L7.16,25.01
+ C7.063,25.107,7.063,25.4,7.257,25.4h9.735v13.271c0,0.294,0.195,0.487,0.39,0.487H30.33c0.389,0,0.484-0.193,0.484-0.586V25.4
+ L40.646,25.497z"/>
+ <path fill="#1245D5" d="M40.622,25.489c0.293,0,0.293-0.294,0.194-0.488L24.391,8.824c-0.486-0.487-0.68-0.39-0.972,0
+ L7.188,25.001c-0.097,0.099-0.097,0.392,0.096,0.392h9.72v13.254c0,0.293,0.195,0.486,0.389,0.486h12.925
+ c0.391,0,0.486-0.193,0.486-0.585V25.393L40.622,25.489z"/>
+ <path fill="#1346D5" d="M40.598,25.479c0.291,0,0.291-0.291,0.192-0.484L24.391,8.838c-0.485-0.486-0.679-0.39-0.97,0
+ L7.215,24.993c-0.097,0.099-0.097,0.39,0.096,0.39h9.704v13.235c0,0.291,0.195,0.485,0.389,0.485h12.907
+ c0.391,0,0.484-0.194,0.484-0.584V25.382L40.598,25.479z"/>
+ <path fill="#1447D6" d="M40.568,25.471c0.291,0,0.291-0.293,0.193-0.486L24.39,8.853c-0.484-0.485-0.678-0.389-0.968,0
+ L7.242,24.982c-0.097,0.1-0.097,0.391,0.096,0.391h9.688v13.215c0,0.293,0.194,0.486,0.388,0.486H30.3
+ c0.39,0,0.484-0.193,0.484-0.582v-13.12L40.568,25.471z"/>
+ <path fill="#1548D6" d="M40.542,25.46c0.291,0,0.291-0.291,0.192-0.485L24.389,8.868c-0.483-0.485-0.677-0.388-0.966,0
+ L7.269,24.975c-0.097,0.101-0.097,0.392,0.096,0.392h9.673v13.194c0,0.291,0.193,0.483,0.387,0.483h12.864
+ c0.387,0,0.482-0.192,0.482-0.582V25.361L40.542,25.46z"/>
+ <path fill="#1649D7" d="M40.518,25.45c0.291,0,0.291-0.291,0.191-0.483L24.389,8.881c-0.483-0.484-0.676-0.388-0.966,0
+ L7.295,24.966c-0.096,0.099-0.096,0.388,0.096,0.388h9.657v13.181c0,0.291,0.193,0.481,0.387,0.481h12.842
+ c0.388,0,0.48-0.19,0.48-0.582v-13.08L40.518,25.45z"/>
+ <path fill="#174AD7" d="M40.488,25.441c0.289,0,0.289-0.291,0.193-0.483L24.388,8.896c-0.482-0.483-0.675-0.388-0.964,0
+ L7.323,24.956c-0.096,0.099-0.096,0.39,0.096,0.39h9.642v13.155c0,0.291,0.193,0.483,0.386,0.483h12.825
+ c0.386,0,0.479-0.192,0.479-0.58V25.346L40.488,25.441z"/>
+ <path fill="#184BD8" d="M40.463,25.432c0.289,0,0.289-0.289,0.191-0.481L24.387,8.912c-0.481-0.482-0.673-0.387-0.962,0
+ L7.349,24.948c-0.096,0.098-0.096,0.387,0.096,0.387h9.626v13.14c0,0.291,0.193,0.483,0.386,0.483h12.802
+ c0.388,0,0.479-0.192,0.479-0.58V25.335L40.463,25.432z"/>
+ <path fill="#194CD8" d="M40.438,25.421c0.289,0,0.289-0.289,0.19-0.481L24.386,8.926c-0.48-0.481-0.672-0.386-0.96,0L7.376,24.938
+ c-0.096,0.1-0.096,0.389,0.096,0.389h9.61v13.117c0,0.291,0.192,0.482,0.385,0.482h12.782c0.385,0,0.479-0.191,0.479-0.578V25.325
+ L40.438,25.421z"/>
+ <path fill="#1A4DD9" d="M40.409,25.413c0.289,0,0.289-0.289,0.19-0.481L24.386,8.939c-0.48-0.481-0.671-0.385-0.959,0
+ L7.403,24.932c-0.096,0.096-0.096,0.385,0.096,0.385h9.595v13.103c0,0.289,0.192,0.479,0.384,0.479h12.76
+ c0.385,0,0.479-0.19,0.479-0.578V25.316L40.409,25.413z"/>
+ <path fill="#1B4ED9" d="M40.383,25.402c0.288,0,0.288-0.288,0.191-0.479L24.386,8.956c-0.479-0.481-0.67-0.385-0.958,0
+ L7.43,24.921c-0.095,0.099-0.095,0.386,0.096,0.386h9.579v13.082c0,0.288,0.192,0.479,0.384,0.479H30.23
+ c0.383,0,0.479-0.191,0.479-0.576V25.307L40.383,25.402z"/>
+ <path fill="#1C4FDA" d="M40.355,25.395c0.287,0,0.287-0.289,0.188-0.479L24.385,8.97c-0.479-0.48-0.669-0.384-0.956,0
+ L7.457,24.913c-0.096,0.097-0.096,0.385,0.095,0.385h9.563v13.062c0,0.289,0.192,0.479,0.383,0.479h12.72
+ c0.384,0,0.479-0.19,0.479-0.575V25.296L40.355,25.395z"/>
+ <path fill="#1D50DA" d="M40.329,25.383c0.287,0,0.287-0.287,0.19-0.479L24.384,8.983c-0.478-0.479-0.668-0.384-0.955,0
+ L7.484,24.902c-0.095,0.099-0.095,0.386,0.095,0.386h9.548v13.043c0,0.287,0.191,0.479,0.382,0.479h12.699
+ c0.383,0,0.478-0.191,0.478-0.576V25.288L40.329,25.383z"/>
+ <path fill="#1E51DB" d="M40.303,25.374c0.286,0,0.286-0.287,0.19-0.479L24.384,8.999c-0.477-0.479-0.667-0.383-0.953,0
+ L7.511,24.895c-0.095,0.099-0.095,0.385,0.094,0.385h9.533v13.022c0,0.287,0.191,0.479,0.382,0.479h12.678
+ c0.382,0,0.477-0.189,0.477-0.574v-12.93L40.303,25.374z"/>
+ <path fill="#1F52DB" d="M40.275,25.364c0.285,0,0.285-0.287,0.188-0.479L24.383,9.014c-0.476-0.478-0.666-0.383-0.951,0
+ L7.539,24.886c-0.095,0.097-0.095,0.384,0.094,0.384h9.517v13.004c0,0.287,0.191,0.479,0.381,0.479h12.658
+ c0.381,0,0.476-0.19,0.476-0.573V25.27L40.275,25.364z"/>
+ <path fill="#2053DC" d="M40.25,25.354c0.285,0,0.285-0.285,0.188-0.479L24.382,9.027c-0.475-0.477-0.665-0.382-0.95,0
+ L7.565,24.876c-0.095,0.097-0.095,0.383,0.094,0.383h9.501v12.984c0,0.286,0.19,0.479,0.381,0.479h12.637
+ c0.381,0,0.477-0.189,0.477-0.572V25.259L40.25,25.354z"/>
+ <path fill="#2154DC" d="M40.225,25.346c0.283,0,0.283-0.287,0.188-0.478L24.381,9.042c-0.474-0.476-0.664-0.381-0.948,0
+ L7.591,24.868c-0.094,0.096-0.094,0.383,0.095,0.383h9.486v12.965c0,0.287,0.19,0.478,0.38,0.478h12.616
+ c0.38,0,0.475-0.188,0.475-0.569V25.249L40.225,25.346z"/>
+ <path fill="#2255DD" d="M40.195,25.335c0.285,0,0.285-0.285,0.188-0.478L24.38,9.057c-0.474-0.475-0.663-0.381-0.947,0
+ L7.619,24.859c-0.094,0.097-0.094,0.382,0.094,0.382h9.471v12.946c0,0.285,0.189,0.476,0.379,0.476h12.596
+ c0.378,0,0.473-0.188,0.473-0.57V25.241L40.195,25.335z"/>
+ <path fill="#2356DD" d="M40.17,25.327c0.284,0,0.284-0.285,0.188-0.478L24.381,9.072c-0.473-0.475-0.662-0.38-0.945,0
+ l-15.79,15.78c-0.094,0.097-0.094,0.381,0.094,0.381h9.455V38.16c0,0.285,0.189,0.476,0.379,0.476h12.574
+ c0.377,0,0.473-0.188,0.473-0.569V25.23L40.17,25.327z"/>
+ <path fill="#2457DE" d="M40.145,25.316c0.282,0,0.282-0.284,0.188-0.478L24.38,9.085c-0.472-0.474-0.661-0.38-0.944,0
+ L7.673,24.841c-0.095,0.097-0.095,0.382,0.094,0.382h9.439V38.13c0,0.285,0.189,0.476,0.378,0.476h12.555
+ c0.379,0,0.473-0.188,0.473-0.569V25.223L40.145,25.316z"/>
+ <path fill="#2558DE" d="M40.116,25.307c0.282,0,0.282-0.285,0.188-0.476L24.379,9.101c-0.472-0.474-0.66-0.379-0.942,0
+ L7.699,24.831c-0.094,0.097-0.094,0.381,0.094,0.381h9.424v12.89c0,0.284,0.189,0.476,0.377,0.476h12.533
+ c0.378,0,0.473-0.188,0.473-0.568V25.212L40.116,25.307z"/>
+ <path fill="#2659DF" d="M40.09,25.298c0.283,0,0.283-0.284,0.188-0.475L24.379,9.116c-0.471-0.473-0.659-0.379-0.94,0
+ L7.727,24.823c-0.094,0.096-0.094,0.381,0.094,0.381h9.408v12.869c0,0.282,0.189,0.473,0.377,0.473h12.512
+ c0.376,0,0.47-0.188,0.47-0.567V25.204L40.09,25.298z"/>
+ <path fill="#275ADF" d="M40.062,25.288c0.28,0,0.28-0.283,0.188-0.474L24.378,9.13c-0.47-0.472-0.657-0.378-0.938,0L7.754,24.814
+ c-0.094,0.097-0.094,0.379,0.093,0.379h9.393v12.851c0,0.285,0.188,0.474,0.376,0.474h12.489c0.377,0,0.472-0.188,0.472-0.565
+ V25.193L40.062,25.288z"/>
+ <path fill="#285BE0" d="M40.037,25.277c0.279,0,0.279-0.282,0.188-0.471L24.377,9.145c-0.469-0.471-0.656-0.378-0.937,0
+ L7.781,24.807c-0.094,0.096-0.094,0.377,0.093,0.377h9.377v12.832c0,0.283,0.188,0.474,0.376,0.474H30.1
+ c0.375,0,0.467-0.188,0.467-0.566V25.184L40.037,25.277z"/>
+ <path fill="#295CE0" d="M40.01,25.27c0.281,0,0.281-0.283,0.188-0.474L24.376,9.159c-0.468-0.47-0.655-0.377-0.936,0L7.807,24.796
+ c-0.093,0.097-0.093,0.378,0.093,0.378h9.361v12.812c0,0.281,0.188,0.471,0.375,0.471h12.45c0.374,0,0.467-0.188,0.467-0.562
+ V25.174L40.01,25.27z"/>
+ <path fill="#2A5DE1" d="M39.982,25.259c0.281,0,0.281-0.282,0.188-0.471L24.376,9.174c-0.467-0.469-0.654-0.376-0.934,0
+ L7.834,24.788c-0.093,0.096-0.093,0.377,0.093,0.377h9.346v12.793c0,0.283,0.188,0.472,0.375,0.472h12.43
+ c0.373,0,0.467-0.188,0.467-0.563v-12.7L39.982,25.259z"/>
+ <path fill="#2B5EE1" d="M39.957,25.249c0.279,0,0.279-0.281,0.188-0.472L24.376,9.188c-0.466-0.469-0.652-0.376-0.933,0
+ L7.861,24.779c-0.093,0.095-0.093,0.375,0.093,0.375h9.33V37.93c0,0.282,0.188,0.471,0.374,0.471h12.408
+ c0.373,0,0.467-0.188,0.467-0.563v-12.68L39.957,25.249z"/>
+ <path fill="#2C5FE2" d="M39.932,25.239c0.278,0,0.278-0.281,0.188-0.47L24.375,9.203c-0.465-0.468-0.652-0.375-0.931,0
+ L7.888,24.771c-0.093,0.096-0.093,0.375,0.092,0.375h9.314V37.9c0,0.281,0.187,0.47,0.374,0.47h12.389
+ c0.373,0,0.465-0.188,0.465-0.562V25.146L39.932,25.239z"/>
+ <path fill="#2D60E2" d="M39.902,25.229c0.279,0,0.279-0.277,0.187-0.468L24.374,9.217c-0.465-0.467-0.651-0.375-0.929,0
+ L7.915,24.762c-0.093,0.094-0.093,0.374,0.092,0.374h9.299V37.87c0,0.28,0.187,0.469,0.373,0.469h12.368
+ c0.371,0,0.465-0.188,0.465-0.562V25.136L39.902,25.229z"/>
+ <path fill="#2E61E3" d="M39.877,25.221c0.277,0,0.277-0.279,0.188-0.468L24.374,9.231c-0.464-0.466-0.649-0.374-0.928,0
+ L7.942,24.753c-0.092,0.095-0.092,0.373,0.092,0.373h9.284v12.717c0,0.281,0.186,0.47,0.372,0.47h12.347
+ c0.372,0,0.464-0.188,0.464-0.562V25.126L39.877,25.221z"/>
+ <path fill="#2F62E3" d="M39.852,25.212c0.277,0,0.277-0.28,0.188-0.469L24.373,9.248c-0.463-0.466-0.648-0.374-0.926,0
+ L7.969,24.745c-0.092,0.094-0.092,0.373,0.092,0.373h9.268v12.696c0,0.278,0.186,0.468,0.371,0.468h12.325
+ c0.371,0,0.463-0.188,0.463-0.562V25.118L39.852,25.212z"/>
+ <path fill="#3063E4" d="M39.823,25.202c0.276,0,0.276-0.279,0.186-0.468L24.372,9.262c-0.462-0.465-0.647-0.373-0.925,0
+ L7.996,24.734c-0.092,0.095-0.092,0.373,0.092,0.373h9.252v12.679c0,0.278,0.186,0.467,0.371,0.467h12.307
+ c0.369,0,0.461-0.188,0.461-0.562V25.107L39.823,25.202z"/>
+ <path fill="#3164E4" d="M39.797,25.191c0.277,0,0.277-0.278,0.186-0.467L24.373,9.274c-0.462-0.465-0.646-0.373-0.923,0
+ L8.023,24.727C7.931,24.82,7.931,25.1,8.115,25.1h9.236v12.657c0,0.279,0.186,0.466,0.371,0.466h12.284
+ c0.369,0,0.461-0.187,0.461-0.56V25.1L39.797,25.191z"/>
+ <path fill="#3265E5" d="M39.771,25.184c0.275,0,0.275-0.279,0.186-0.467L24.371,9.29c-0.461-0.464-0.645-0.372-0.922,0
+ L8.05,24.717c-0.092,0.094-0.092,0.372,0.091,0.372h9.221v12.64c0,0.279,0.185,0.465,0.37,0.465h12.264
+ c0.367,0,0.46-0.186,0.46-0.558V25.089L39.771,25.184z"/>
+ <path fill="#3366E5" d="M39.744,25.173c0.275,0,0.275-0.278,0.186-0.465L24.371,9.306c-0.46-0.463-0.644-0.372-0.92,0
+ L8.077,24.708c-0.092,0.094-0.092,0.371,0.091,0.371h9.206V37.7c0,0.276,0.185,0.463,0.369,0.463h12.241
+ c0.369,0,0.461-0.187,0.461-0.558V25.081L39.744,25.173z"/>
+ <path fill="#3366E6" d="M39.717,25.163c0.276,0,0.276-0.277,0.186-0.463L24.37,9.319c-0.459-0.462-0.643-0.371-0.918,0L8.104,24.7
+ c-0.092,0.094-0.092,0.37,0.091,0.37h9.189v12.601c0,0.279,0.185,0.465,0.369,0.465h12.224c0.366,0,0.459-0.186,0.459-0.557V25.07
+ L39.717,25.163z"/>
+ <path fill="#3467E6" d="M39.689,25.152c0.273,0,0.273-0.276,0.185-0.463L24.369,9.333c-0.458-0.462-0.642-0.371-0.917,0
+ L8.131,24.689c-0.092,0.095-0.092,0.371,0.091,0.371h9.174v12.582c0,0.274,0.184,0.463,0.368,0.463h12.202
+ c0.366,0,0.458-0.188,0.458-0.558V25.061L39.689,25.152z"/>
+ <path fill="#3568E7" d="M39.664,25.145c0.273,0,0.273-0.276,0.186-0.463L24.369,9.349c-0.458-0.461-0.641-0.37-0.916,0
+ L8.158,24.682c-0.091,0.094-0.091,0.37,0.091,0.37h9.159v12.562c0,0.276,0.184,0.461,0.367,0.461h12.181
+ c0.367,0,0.458-0.185,0.458-0.556V25.05L39.664,25.145z"/>
+ <path fill="#3669E7" d="M39.639,25.135c0.273,0,0.273-0.277,0.185-0.462L24.368,9.364c-0.458-0.46-0.64-0.37-0.914,0l-15.27,15.31
+ c-0.091,0.094-0.091,0.368,0.091,0.368h9.144v12.543c0,0.276,0.183,0.463,0.366,0.463h12.158c0.365,0,0.457-0.187,0.457-0.555
+ V25.042L39.639,25.135z"/>
+ <path fill="#376AE8" d="M39.609,25.124c0.272,0,0.272-0.274,0.184-0.461L24.367,9.377c-0.457-0.459-0.639-0.369-0.912,0
+ L8.211,24.663c-0.091,0.094-0.091,0.369,0.091,0.369h9.127v12.522c0,0.274,0.184,0.461,0.366,0.461h12.141
+ c0.363,0,0.455-0.187,0.455-0.554v-12.43L39.609,25.124z"/>
+ <path fill="#386BE8" d="M39.584,25.116c0.271,0,0.271-0.277,0.184-0.462L24.368,9.393c-0.456-0.459-0.638-0.368-0.911,0
+ L8.239,24.654c-0.091,0.093-0.091,0.369,0.09,0.369h9.112v12.504c0,0.274,0.183,0.462,0.365,0.462h12.12
+ c0.363,0,0.454-0.188,0.454-0.554V25.023L39.584,25.116z"/>
+ <path fill="#396CE9" d="M39.559,25.105c0.272,0,0.272-0.274,0.183-0.459L24.366,9.407c-0.455-0.458-0.636-0.367-0.909,0
+ L8.266,24.646c-0.091,0.093-0.091,0.367,0.09,0.367h9.096v12.483c0,0.272,0.183,0.459,0.365,0.459h12.098
+ c0.362,0,0.454-0.187,0.454-0.552V25.014L39.559,25.105z"/>
+ <path fill="#3A6DE9" d="M39.529,25.096c0.271,0,0.271-0.275,0.184-0.457L24.365,9.421c-0.454-0.458-0.635-0.367-0.907,0
+ L8.293,24.639c-0.091,0.092-0.091,0.364,0.09,0.364h9.081v12.468c0,0.274,0.182,0.459,0.364,0.459h12.076
+ c0.363,0,0.453-0.185,0.453-0.552V25.003L39.529,25.096z"/>
+ <path fill="#3B6EEA" d="M39.504,25.087c0.271,0,0.271-0.274,0.184-0.459L24.365,9.436c-0.454-0.457-0.634-0.366-0.906,0
+ L8.319,24.628c-0.09,0.093-0.09,0.367,0.09,0.367h9.065v12.446c0,0.272,0.182,0.457,0.363,0.457h12.06
+ c0.359,0,0.451-0.185,0.451-0.549V24.995L39.504,25.087z"/>
+ <path fill="#3C6FEA" d="M39.479,25.077c0.271,0,0.271-0.272,0.183-0.457L24.364,9.451c-0.453-0.456-0.633-0.366-0.905,0
+ L8.346,24.62c-0.09,0.092-0.09,0.364,0.09,0.364h9.05v12.429c0,0.274,0.182,0.457,0.363,0.457h12.036
+ c0.361,0,0.451-0.183,0.451-0.55V24.984L39.479,25.077z"/>
+ <path fill="#3D70EB" d="M39.451,25.066c0.271,0,0.271-0.272,0.181-0.457L24.363,9.464c-0.452-0.455-0.632-0.365-0.903,0
+ L8.374,24.609c-0.09,0.093-0.09,0.367,0.089,0.367h9.034v12.406c0,0.271,0.181,0.456,0.362,0.456h12.016
+ c0.359,0,0.45-0.185,0.45-0.549V24.977L39.451,25.066z"/>
+ <path fill="#3E71EB" d="M39.424,25.059c0.271,0,0.271-0.272,0.182-0.457L24.363,9.479c-0.451-0.455-0.631-0.365-0.901,0
+ L8.4,24.602c-0.09,0.092-0.09,0.365,0.09,0.365h9.019v12.389c0,0.272,0.181,0.457,0.362,0.457h11.992
+ c0.361,0,0.451-0.185,0.451-0.547V24.967L39.424,25.059z"/>
+ <path fill="#3F72EC" d="M39.396,25.048c0.271,0,0.271-0.272,0.182-0.455L24.362,9.495c-0.45-0.454-0.63-0.364-0.9,0L8.427,24.593
+ c-0.09,0.093-0.09,0.363,0.089,0.363h9.003v12.371c0,0.272,0.181,0.455,0.361,0.455h11.976c0.357,0,0.447-0.183,0.447-0.548
+ V24.956L39.396,25.048z"/>
+ <path fill="#4073EC" d="M39.371,25.038c0.271,0,0.271-0.272,0.18-0.455L24.362,9.509c-0.45-0.453-0.629-0.363-0.898,0
+ L8.454,24.583c-0.09,0.093-0.09,0.362,0.089,0.362h8.987v12.354c0,0.271,0.181,0.454,0.36,0.454h11.954
+ c0.358,0,0.448-0.183,0.448-0.545v-12.26L39.371,25.038z"/>
+ <path fill="#4174ED" d="M39.346,25.029c0.271,0,0.271-0.271,0.18-0.454L24.361,9.523c-0.449-0.453-0.627-0.363-0.897,0
+ L8.481,24.575c-0.089,0.092-0.089,0.362,0.089,0.362h8.972V37.27c0,0.272,0.18,0.455,0.359,0.455h11.933
+ c0.357,0,0.445-0.183,0.445-0.545V24.938L39.346,25.029z"/>
+ <path fill="#4275ED" d="M39.316,25.02c0.271,0,0.271-0.271,0.181-0.453L24.36,9.539c-0.448-0.452-0.626-0.362-0.895,0
+ L8.508,24.566c-0.09,0.091-0.09,0.36,0.088,0.36h8.957V37.24c0,0.271,0.18,0.451,0.359,0.451h11.912
+ c0.355,0,0.445-0.183,0.445-0.543V24.93L39.316,25.02z"/>
+ <path fill="#4376EE" d="M39.291,25.01c0.27,0,0.27-0.271,0.18-0.453L24.36,9.553c-0.447-0.451-0.625-0.361-0.894,0L8.535,24.559
+ c-0.089,0.09-0.089,0.362,0.089,0.362h8.941v12.293c0,0.271,0.179,0.451,0.358,0.451h11.892c0.356,0,0.445-0.181,0.445-0.543
+ V24.919L39.291,25.01z"/>
+ <path fill="#4477EE" d="M39.266,24.999c0.27,0,0.27-0.271,0.18-0.451L24.359,9.566c-0.446-0.45-0.625-0.361-0.893,0L8.562,24.549
+ c-0.089,0.09-0.089,0.362,0.088,0.362h8.925v12.272c0,0.271,0.179,0.45,0.358,0.45h11.87c0.356,0,0.445-0.182,0.445-0.542V24.911
+ L39.266,24.999z"/>
+ <path fill="#4578EF" d="M39.236,24.991c0.27,0,0.27-0.271,0.18-0.451L24.359,9.582c-0.446-0.45-0.624-0.36-0.891,0L8.589,24.54
+ C8.5,24.63,8.5,24.9,8.677,24.9h8.91v12.254c0,0.271,0.179,0.451,0.357,0.451h11.85c0.354,0,0.442-0.182,0.442-0.541V24.9
+ L39.236,24.991z"/>
+ <path fill="#4679EF" d="M39.211,24.98c0.27,0,0.27-0.271,0.18-0.449L24.358,9.597c-0.445-0.449-0.622-0.36-0.889,0L8.616,24.531
+ c-0.089,0.089-0.089,0.359,0.088,0.359h8.894v12.233c0,0.271,0.179,0.451,0.356,0.451h11.83c0.354,0,0.442-0.183,0.442-0.541
+ V24.891L39.211,24.98z"/>
+ <path fill="#477AF0" d="M39.186,24.973c0.269,0,0.269-0.271,0.178-0.451L24.357,9.61c-0.444-0.448-0.621-0.359-0.888,0
+ L8.643,24.521c-0.088,0.09-0.088,0.358,0.088,0.358h8.878v12.218c0,0.271,0.179,0.448,0.356,0.448h11.809
+ c0.354,0,0.441-0.182,0.441-0.54V24.882L39.186,24.973z"/>
+ <path fill="#487BF0" d="M39.158,24.962c0.267,0,0.267-0.271,0.178-0.448L24.356,9.625c-0.443-0.447-0.62-0.359-0.886,0
+ L8.669,24.514c-0.088,0.09-0.088,0.358,0.088,0.358h8.863v12.196c0,0.271,0.178,0.449,0.355,0.449h11.789
+ c0.354,0,0.44-0.181,0.44-0.539V24.872L39.158,24.962z"/>
+ <path fill="#497CF1" d="M39.132,24.952c0.267,0,0.267-0.269,0.179-0.447L24.356,9.64c-0.442-0.446-0.619-0.358-0.884,0
+ L8.697,24.504c-0.088,0.09-0.088,0.357,0.087,0.357h8.847V37.04c0,0.271,0.178,0.449,0.355,0.449h11.768
+ c0.354,0,0.439-0.181,0.439-0.539V24.861L39.132,24.952z"/>
+ <path fill="#4A7DF1" d="M39.104,24.943c0.269,0,0.269-0.271,0.18-0.448L24.355,9.655c-0.442-0.446-0.618-0.358-0.883,0
+ L8.724,24.496c-0.088,0.089-0.088,0.357,0.087,0.357h8.832v12.16c0,0.268,0.177,0.445,0.354,0.445h11.747
+ c0.354,0,0.439-0.182,0.439-0.537V24.854L39.104,24.943z"/>
+ <path fill="#4B7EF2" d="M39.078,24.934c0.265,0,0.265-0.269,0.177-0.447L24.355,9.67c-0.441-0.445-0.617-0.357-0.881,0
+ L8.751,24.486c-0.088,0.091-0.088,0.357,0.087,0.357h8.816v12.14c0,0.27,0.177,0.447,0.354,0.447h11.727
+ c0.354,0,0.438-0.18,0.438-0.535V24.844L39.078,24.934z"/>
+ <path fill="#4C7FF2" d="M39.052,24.924c0.265,0,0.265-0.27,0.177-0.446L24.354,9.684c-0.44-0.444-0.616-0.356-0.879,0
+ L8.777,24.478c-0.088,0.09-0.088,0.355,0.087,0.355h8.8v12.121c0,0.269,0.177,0.444,0.353,0.444h11.706
+ c0.354,0,0.438-0.178,0.438-0.534V24.833L39.052,24.924z"/>
+ <path fill="#4D80F3" d="M39.023,24.913c0.266,0,0.266-0.269,0.178-0.444L24.354,9.699c-0.439-0.444-0.615-0.356-0.878,0
+ L8.804,24.469c-0.087,0.09-0.087,0.356,0.087,0.356h8.785v12.101c0,0.268,0.177,0.444,0.353,0.444h11.684
+ c0.352,0,0.438-0.179,0.438-0.533V24.825L39.023,24.913z"/>
+ <path fill="#4E81F3" d="M38.998,24.904c0.266,0,0.266-0.269,0.176-0.445L24.353,9.712c-0.439-0.443-0.614-0.355-0.877,0
+ L8.832,24.459c-0.088,0.089-0.088,0.355,0.086,0.355h8.77v12.082c0,0.269,0.176,0.443,0.352,0.443h11.664
+ c0.351,0,0.438-0.179,0.438-0.531V24.814L38.998,24.904z"/>
+ <path fill="#4F82F4" d="M38.973,24.896c0.264,0,0.264-0.27,0.176-0.445L24.353,9.728c-0.438-0.442-0.613-0.355-0.875,0
+ L8.858,24.451c-0.087,0.089-0.087,0.355,0.087,0.355h8.754V36.87c0,0.266,0.176,0.442,0.351,0.442h11.644
+ c0.352,0,0.438-0.18,0.438-0.533V24.807L38.973,24.896z"/>
+ <path fill="#5083F4" d="M38.943,24.886c0.264,0,0.264-0.268,0.177-0.444l-14.769-14.7c-0.437-0.441-0.611-0.354-0.874,0
+ l-14.593,14.7c-0.087,0.09-0.087,0.354,0.086,0.354h8.738v12.043c0,0.267,0.176,0.443,0.351,0.443h11.623
+ c0.351,0,0.438-0.179,0.438-0.531V24.796L38.943,24.886z"/>
+ <path fill="#5184F5" d="M38.919,24.876c0.263,0,0.263-0.267,0.174-0.443L24.351,9.756c-0.437-0.441-0.61-0.354-0.872,0
+ L8.912,24.434c-0.087,0.089-0.087,0.354,0.086,0.354h8.723v12.022c0,0.267,0.175,0.44,0.35,0.44h11.602
+ c0.349,0,0.437-0.178,0.437-0.528V24.788L38.919,24.876z"/>
+ <path fill="#5285F5" d="M38.893,24.866c0.262,0,0.262-0.267,0.176-0.441L24.351,9.771c-0.436-0.44-0.609-0.353-0.871,0
+ L8.939,24.425c-0.087,0.089-0.087,0.353,0.086,0.353h8.707v12.009c0,0.265,0.175,0.438,0.349,0.438h11.581
+ c0.348,0,0.436-0.177,0.436-0.529V24.777L38.893,24.866z"/>
+ <path fill="#5386F6" d="M38.863,24.855c0.263,0,0.263-0.266,0.176-0.44L24.35,9.786c-0.435-0.439-0.608-0.353-0.869,0
+ L8.966,24.415C8.88,24.504,8.88,24.77,9.052,24.77h8.691v11.983c0,0.267,0.175,0.44,0.349,0.44h11.561
+ c0.349,0,0.435-0.176,0.435-0.528V24.77L38.863,24.855z"/>
+ <path fill="#5487F6" d="M38.839,24.848c0.261,0,0.261-0.267,0.175-0.439L24.349,9.801c-0.434-0.439-0.607-0.352-0.867,0
+ L8.993,24.407c-0.087,0.089-0.087,0.353,0.086,0.353h8.676v11.967c0,0.267,0.174,0.44,0.348,0.44h11.54
+ c0.349,0,0.435-0.178,0.435-0.528v-11.88L38.839,24.848z"/>
+ <path fill="#5588F7" d="M38.812,24.837c0.262,0,0.262-0.264,0.174-0.439L24.349,9.814c-0.433-0.438-0.606-0.352-0.866,0
+ L9.02,24.397c-0.086,0.088-0.086,0.352,0.086,0.352h8.66v11.949c0,0.262,0.174,0.438,0.347,0.438h11.519
+ c0.347,0,0.433-0.177,0.433-0.528V24.749L38.812,24.837z"/>
+ <path fill="#5689F7" d="M38.785,24.829c0.26,0,0.26-0.265,0.173-0.439L24.348,9.83c-0.432-0.438-0.604-0.351-0.864,0L9.047,24.389
+ c-0.086,0.088-0.086,0.353,0.085,0.353h8.645V36.67c0,0.264,0.174,0.438,0.347,0.438h11.498c0.345,0,0.431-0.176,0.431-0.524
+ v-11.84L38.785,24.829z"/>
+ <path fill="#578AF8" d="M38.759,24.818c0.261,0,0.261-0.264,0.175-0.438L24.347,9.844c-0.432-0.437-0.604-0.35-0.863,0
+ L9.074,24.379c-0.086,0.088-0.086,0.352,0.085,0.352h8.629v11.91c0,0.262,0.173,0.438,0.346,0.438h11.476
+ c0.348,0,0.434-0.177,0.434-0.524V24.73L38.759,24.818z"/>
+ <path fill="#588BF8" d="M38.73,24.809c0.258,0,0.258-0.263,0.172-0.438L24.347,9.858c-0.431-0.436-0.603-0.35-0.861,0
+ L9.101,24.372c-0.086,0.088-0.086,0.351,0.085,0.351H17.8v11.892c0,0.262,0.173,0.438,0.345,0.438h11.458
+ c0.344,0,0.428-0.177,0.428-0.524V24.721L38.73,24.809z"/>
+ <path fill="#598CF9" d="M38.705,24.799c0.259,0,0.259-0.262,0.173-0.438L24.346,9.873c-0.43-0.435-0.602-0.349-0.86,0
+ L9.128,24.361c-0.086,0.088-0.086,0.351,0.085,0.351h8.598v11.869c0,0.263,0.173,0.438,0.345,0.438h11.436
+ c0.344,0,0.43-0.178,0.43-0.524V24.712L38.705,24.799z"/>
+ <path fill="#5A8DF9" d="M38.68,24.79c0.258,0,0.258-0.265,0.172-0.438L24.345,9.888c-0.429-0.435-0.6-0.349-0.858,0L9.155,24.353
+ c-0.086,0.088-0.086,0.35,0.085,0.35h8.583v11.852c0,0.262,0.172,0.438,0.344,0.438h11.414c0.343,0,0.428-0.177,0.428-0.524
+ V24.702L38.68,24.79z"/>
+ <path fill="#5B8EFA" d="M38.65,24.779c0.259,0,0.259-0.262,0.173-0.437L24.345,9.902c-0.428-0.434-0.599-0.348-0.856,0
+ L9.182,24.345c-0.085,0.087-0.085,0.348,0.085,0.348h8.567v11.832c0,0.262,0.172,0.438,0.343,0.438h11.396
+ c0.342,0,0.427-0.176,0.427-0.523V24.691L38.65,24.779z"/>
+ <path fill="#5C8FFA" d="M38.626,24.771c0.256,0,0.256-0.263,0.171-0.437L24.344,9.917c-0.428-0.433-0.599-0.348-0.855,0
+ L9.209,24.335c-0.085,0.087-0.085,0.349,0.084,0.349h8.552v11.812c0,0.262,0.172,0.438,0.343,0.438h11.375
+ c0.342,0,0.426-0.176,0.426-0.521V24.684L38.626,24.771z"/>
+ <path fill="#5D90FB" d="M38.6,24.761c0.258,0,0.258-0.261,0.172-0.434L24.344,9.932c-0.427-0.432-0.598-0.347-0.854,0
+ L9.235,24.327c-0.085,0.087-0.085,0.347,0.084,0.347h8.536v11.794c0,0.261,0.172,0.435,0.343,0.435h11.353
+ c0.342,0,0.428-0.174,0.428-0.521V24.674L38.6,24.761z"/>
+ <path fill="#5E91FB" d="M38.57,24.751c0.258,0,0.258-0.26,0.173-0.434l-14.4-14.372c-0.426-0.432-0.596-0.346-0.852,0
+ L9.263,24.317c-0.085,0.087-0.085,0.346,0.084,0.346h8.52v11.776c0,0.259,0.171,0.433,0.342,0.433h11.332
+ c0.34,0,0.424-0.174,0.424-0.521V24.663L38.57,24.751z"/>
+ <path fill="#5F92FC" d="M38.546,24.743c0.255,0,0.255-0.262,0.17-0.435L24.342,9.96c-0.425-0.431-0.595-0.346-0.85,0L9.29,24.309
+ c-0.085,0.087-0.085,0.347,0.084,0.347h8.504v11.756c0,0.258,0.171,0.434,0.341,0.434h11.311c0.342,0,0.426-0.176,0.426-0.521
+ V24.654L38.546,24.743z"/>
+ <path fill="#6093FC" d="M38.521,24.732c0.254,0,0.254-0.26,0.17-0.435L24.342,9.976c-0.425-0.43-0.594-0.345-0.849,0L9.316,24.3
+ c-0.085,0.087-0.085,0.347,0.084,0.347h8.489v11.735c0,0.259,0.171,0.433,0.341,0.433h11.292c0.34,0,0.424-0.174,0.424-0.521
+ V24.646L38.521,24.732z"/>
+ <path fill="#6194FD" d="M38.492,24.723c0.255,0,0.255-0.259,0.17-0.432L24.341,9.99c-0.424-0.43-0.593-0.345-0.847,0L9.343,24.291
+ c-0.084,0.086-0.084,0.345,0.084,0.345H17.9v11.718c0,0.258,0.17,0.433,0.34,0.433h11.27c0.34,0,0.424-0.175,0.424-0.519V24.636
+ L38.492,24.723z"/>
+ <path fill="#6295FD" d="M38.466,24.712c0.255,0,0.255-0.258,0.169-0.43L24.34,10.004c-0.423-0.429-0.592-0.344-0.846,0
+ L9.37,24.283c-0.084,0.086-0.084,0.345,0.084,0.345h8.458v11.697c0,0.258,0.17,0.43,0.339,0.43H29.5
+ c0.338,0,0.422-0.172,0.422-0.516V24.626L38.466,24.712z"/>
+ <path fill="#6396FE" d="M38.438,24.704c0.254,0,0.254-0.259,0.17-0.431L24.34,10.019c-0.422-0.428-0.591-0.343-0.844,0
+ L9.397,24.273c-0.084,0.086-0.084,0.345,0.083,0.345h8.442v11.678c0,0.259,0.17,0.431,0.339,0.431H29.49
+ c0.338,0,0.422-0.172,0.422-0.517V24.618L38.438,24.704z"/>
+ <path fill="#6497FE" d="M38.413,24.693c0.252,0,0.252-0.257,0.168-0.429l-14.242-14.23c-0.422-0.427-0.59-0.343-0.843,0
+ L9.424,24.265c-0.084,0.086-0.084,0.342,0.083,0.342h8.427v11.66c0,0.258,0.169,0.43,0.338,0.43H29.48
+ c0.336,0,0.42-0.172,0.42-0.516V24.607L38.413,24.693z"/>
+ <path fill="#6598FF" d="M38.387,24.686c0.254,0,0.254-0.259,0.17-0.43L24.338,10.047c-0.42-0.426-0.588-0.342-0.841,0
+ L9.451,24.255c-0.084,0.086-0.084,0.343,0.083,0.343h8.411V36.24c0,0.256,0.169,0.428,0.337,0.428h11.187
+ c0.338,0,0.42-0.172,0.42-0.516V24.6L38.387,24.686z"/>
+ <path fill="#6699FF" d="M38.357,24.675c0.252,0,0.252-0.257,0.168-0.428L24.338,10.062c-0.42-0.426-0.587-0.342-0.839,0
+ L9.478,24.247c-0.084,0.086-0.084,0.342,0.083,0.342h8.396V36.21c0,0.256,0.169,0.429,0.337,0.429h11.167
+ c0.335,0,0.418-0.173,0.418-0.515V24.589L38.357,24.675z"/>
+ </g>
+
+ <linearGradient id="XMLID_20_" gradientUnits="userSpaceOnUse" x1="-1371.771" y1="-727.9985" x2="-1398.6362" y2="-727.9985" gradientTransform="matrix(4.371139e-08 -1 -1 -4.371139e-08 -703.999 -1361.9985)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#6699FF"/>
+ </linearGradient>
+ <path fill="url(#XMLID_20_)" d="M38.357,24.675c0.252,0,0.252-0.257,0.168-0.428L24.338,10.062c-0.42-0.426-0.587-0.342-0.839,0
+ L9.478,24.247c-0.084,0.086-0.084,0.342,0.083,0.342h8.396V36.21c0,0.256,0.169,0.429,0.337,0.429h11.167
+ c0.335,0,0.418-0.173,0.418-0.515V24.589L38.357,24.675z"/>
+</g>
+<g id="crop_x0020_marks">
+ <path fill="none" d="M48-0.058v48H0v-48H48z"/>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/colorsvg/warning.svg b/utils/bcmregtool/elfio/doc/images/colorsvg/warning.svg
new file mode 100644
index 0000000..ae0081d
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/colorsvg/warning.svg
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<g>
+ <path stroke="#FFFFFF" stroke-width="7.9139" stroke-linejoin="round" d="M16.4,42.3L5.7,31.6V16.4L16.4,5.7h15.2l10.7,10.7v15.2
+ L31.6,42.3H16.4z"/>
+ <g>
+ <path fill="#990000" d="M16.4,42.3L5.7,31.6V16.4L16.4,5.7h15.2l10.7,10.7v15.2L31.6,42.3H16.4z"/>
+ <polygon fill="#9A0000" points="16.415,42.266 5.736,31.586 5.736,16.416 16.415,5.737 31.585,5.737 42.266,16.416 42.266,31.586
+ 31.585,42.266 "/>
+ <polygon fill="#9B0000" points="16.429,42.23 5.771,31.572 5.771,16.432 16.429,5.774 31.57,5.774 42.229,16.432 42.229,31.572
+ 31.57,42.23 "/>
+ <polygon fill="#9C0000" points="16.444,42.195 5.806,31.559 5.806,16.447 16.444,5.81 31.557,5.81 42.191,16.447 42.191,31.559
+ 31.557,42.195 "/>
+ <polygon fill="#9D0000" points="16.459,42.162 5.842,31.545 5.842,16.464 16.459,5.847 31.54,5.847 42.157,16.464 42.157,31.545
+ 31.54,42.162 "/>
+ <polygon fill="#9E0000" points="16.473,42.128 5.877,31.531 5.877,16.479 16.473,5.884 31.525,5.884 42.122,16.479 42.122,31.531
+ 31.525,42.128 "/>
+ <polygon fill="#9F0000" points="16.488,42.094 5.914,31.52 5.914,16.496 16.488,5.921 31.512,5.921 42.087,16.496 42.087,31.52
+ 31.512,42.094 "/>
+ <polygon fill="#A00000" points="16.503,42.061 5.949,31.505 5.949,16.511 16.503,5.958 31.496,5.958 42.051,16.511 42.051,31.505
+ 31.496,42.061 "/>
+ <polygon fill="#A10000" points="16.518,42.025 5.984,31.491 5.984,16.528 16.518,5.994 31.48,5.994 42.016,16.528 42.016,31.491
+ 31.48,42.025 "/>
+ <polygon fill="#A20000" points="16.533,41.991 6.02,31.479 6.02,16.544 16.533,6.031 31.467,6.031 41.98,16.544 41.98,31.479
+ 31.467,41.991 "/>
+ <polygon fill="#A30000" points="16.547,41.956 6.055,31.464 6.055,16.56 16.547,6.067 31.452,6.067 41.943,16.56 41.943,31.464
+ 31.452,41.956 "/>
+ <polygon fill="#A40000" points="16.562,41.923 6.091,31.451 6.091,16.576 16.562,6.104 31.438,6.104 41.909,16.576 41.909,31.451
+ 31.438,41.923 "/>
+ <polygon fill="#A50000" points="16.577,41.889 6.126,31.438 6.126,16.592 16.577,6.141 31.423,6.141 41.873,16.592 41.873,31.438
+ 31.423,41.889 "/>
+ <polygon fill="#A60000" points="16.592,41.854 6.162,31.424 6.162,16.607 16.592,6.177 31.407,6.177 41.838,16.607 41.838,31.424
+ 31.407,41.854 "/>
+ <polygon fill="#A70000" points="16.606,41.818 6.197,31.41 6.197,16.624 16.606,6.214 31.395,6.214 41.803,16.624 41.803,31.41
+ 31.395,41.818 "/>
+ <polygon fill="#A80000" points="16.622,41.785 6.233,31.396 6.233,16.64 16.622,6.251 31.379,6.251 41.768,16.64 41.768,31.396
+ 31.379,41.785 "/>
+ <polygon fill="#A90000" points="16.636,41.751 6.269,31.383 6.269,16.655 16.636,6.288 31.363,6.288 41.73,16.655 41.73,31.383
+ 31.363,41.751 "/>
+ <polygon fill="#AA0000" points="16.65,41.716 6.304,31.369 6.304,16.671 16.65,6.325 31.35,6.325 41.695,16.671 41.695,31.369
+ 31.35,41.716 "/>
+ <polygon fill="#AB0000" points="16.666,41.682 6.339,31.355 6.339,16.688 16.666,6.361 31.334,6.361 41.66,16.688 41.66,31.355
+ 31.334,41.682 "/>
+ <polygon fill="#AC0000" points="16.681,41.648 6.375,31.343 6.375,16.704 16.681,6.398 31.318,6.398 41.625,16.704 41.625,31.343
+ 31.318,41.648 "/>
+ <polygon fill="#AD0000" points="16.695,41.613 6.411,31.329 6.411,16.719 16.695,6.435 31.305,6.435 41.589,16.719 41.589,31.329
+ 31.305,41.613 "/>
+ <polygon fill="#AE0000" points="16.709,41.579 6.446,31.314 6.446,16.735 16.709,6.472 31.29,6.472 41.555,16.735 41.555,31.314
+ 31.29,41.579 "/>
+ <polygon fill="#AF0000" points="16.725,41.545 6.482,31.302 6.482,16.751 16.725,6.509 31.273,6.509 41.52,16.751 41.52,31.302
+ 31.273,41.545 "/>
+ <polygon fill="#B00000" points="16.739,41.511 6.518,31.288 6.518,16.767 16.739,6.545 31.262,6.545 41.482,16.767 41.482,31.288
+ 31.262,41.511 "/>
+ <polygon fill="#B10000" points="16.754,41.477 6.553,31.273 6.553,16.783 16.754,6.582 31.245,6.582 41.447,16.783 41.447,31.273
+ 31.245,41.477 "/>
+ <polygon fill="#B20000" points="16.769,41.441 6.588,31.261 6.588,16.799 16.769,6.619 31.23,6.619 41.411,16.799 41.411,31.261
+ 31.23,41.441 "/>
+ <polygon fill="#B30000" points="16.783,41.407 6.624,31.248 6.624,16.815 16.783,6.656 31.216,6.656 41.376,16.815 41.376,31.248
+ 31.216,41.407 "/>
+ <polygon fill="#B40000" points="16.799,41.373 6.66,31.234 6.66,16.832 16.799,6.693 31.202,6.693 41.341,16.832 41.341,31.234
+ 31.202,41.373 "/>
+ <polygon fill="#B50000" points="16.813,41.339 6.695,31.221 6.695,16.847 16.813,6.729 31.188,6.729 41.305,16.847 41.305,31.221
+ 31.188,41.339 "/>
+ <polygon fill="#B60000" points="16.828,41.305 6.73,31.207 6.73,16.863 16.828,6.765 31.172,6.765 41.27,16.863 41.27,31.207
+ 31.172,41.305 "/>
+ <polygon fill="#B70000" points="16.843,41.27 6.766,31.193 6.766,16.879 16.843,6.802 31.157,6.802 41.232,16.879 41.232,31.193
+ 31.157,41.27 "/>
+ <polygon fill="#B80000" points="16.858,41.236 6.802,31.182 6.802,16.896 16.858,6.839 31.143,6.839 41.198,16.896 41.198,31.182
+ 31.143,41.236 "/>
+ <polygon fill="#B90000" points="16.872,41.202 6.837,31.166 6.837,16.911 16.872,6.876 31.128,6.876 41.163,16.911 41.163,31.166
+ 31.128,41.202 "/>
+ <polygon fill="#BA0000" points="16.887,41.167 6.873,31.152 6.873,16.927 16.887,6.913 31.111,6.913 41.127,16.927 41.127,31.152
+ 31.111,41.167 "/>
+ <polygon fill="#BB0000" points="16.902,41.133 6.908,31.139 6.908,16.943 16.902,6.949 31.098,6.949 41.092,16.943 41.092,31.139
+ 31.098,41.133 "/>
+ <polygon fill="#BC0000" points="16.917,41.1 6.944,31.126 6.944,16.959 16.917,6.986 31.083,6.986 41.057,16.959 41.057,31.126
+ 31.083,41.1 "/>
+ <polygon fill="#BD0000" points="16.931,41.064 6.979,31.111 6.979,16.975 16.931,7.023 31.068,7.023 41.021,16.975 41.021,31.111
+ 31.068,41.064 "/>
+ <polygon fill="#BE0000" points="16.946,41.029 7.015,31.1 7.015,16.991 16.946,7.06 31.055,7.06 40.984,16.991 40.984,31.1
+ 31.055,41.029 "/>
+ <polygon fill="#BF0000" points="16.96,40.995 7.051,31.085 7.051,17.007 16.96,7.097 31.039,7.097 40.949,17.007 40.949,31.085
+ 31.039,40.995 "/>
+ <polygon fill="#C00000" points="16.976,40.962 7.086,31.072 7.086,17.023 16.976,7.133 31.023,7.133 40.914,17.023 40.914,31.072
+ 31.023,40.962 "/>
+ <polygon fill="#C10000" points="16.99,40.927 7.121,31.059 7.121,17.039 16.99,7.17 31.01,7.17 40.878,17.039 40.878,31.059
+ 31.01,40.927 "/>
+ <polygon fill="#C20000" points="17.004,40.893 7.157,31.044 7.157,17.054 17.004,7.207 30.994,7.207 40.843,17.054 40.843,31.044
+ 30.994,40.893 "/>
+ <polygon fill="#C30000" points="17.02,40.857 7.192,31.031 7.192,17.07 17.02,7.244 30.979,7.244 40.809,17.07 40.809,31.031
+ 30.979,40.857 "/>
+ <polygon fill="#C40000" points="17.035,40.824 7.229,31.018 7.229,17.086 17.035,7.281 30.966,7.281 40.771,17.086 40.771,31.018
+ 30.966,40.824 "/>
+ <polygon fill="#C50000" points="17.049,40.789 7.263,31.004 7.263,17.103 17.049,7.317 30.95,7.317 40.736,17.103 40.736,31.004
+ 30.95,40.789 "/>
+ <polygon fill="#C60000" points="17.064,40.755 7.299,30.99 7.299,17.119 17.064,7.354 30.936,7.354 40.701,17.119 40.701,30.99
+ 30.936,40.755 "/>
+ <polygon fill="#C70000" points="17.079,40.721 7.334,30.977 7.334,17.135 17.079,7.391 30.921,7.391 40.665,17.135 40.665,30.977
+ 30.921,40.721 "/>
+ <polygon fill="#C80000" points="17.094,40.688 7.371,30.964 7.371,17.151 17.094,7.428 30.906,7.428 40.63,17.151 40.63,30.964
+ 30.906,40.688 "/>
+ <polygon fill="#C90000" points="17.108,40.652 7.406,30.949 7.406,17.167 17.108,7.464 30.893,7.464 40.594,17.167 40.594,30.949
+ 30.893,40.652 "/>
+ <polygon fill="#CA0000" points="17.123,40.618 7.441,30.936 7.441,17.182 17.123,7.5 30.877,7.5 40.559,17.182 40.559,30.936
+ 30.877,40.618 "/>
+ <polygon fill="#CB0000" points="17.138,40.584 7.477,30.923 7.477,17.199 17.138,7.537 30.861,7.537 40.523,17.199 40.523,30.923
+ 30.861,40.584 "/>
+ <polygon fill="#CC0000" points="17.153,40.55 7.513,30.909 7.513,17.215 17.153,7.574 30.848,7.574 40.486,17.215 40.486,30.909
+ 30.848,40.55 "/>
+ <polygon fill="#CC0000" points="17.167,40.516 7.548,30.896 7.548,17.23 17.167,7.611 30.832,7.611 40.452,17.23 40.452,30.896
+ 30.832,40.516 "/>
+ <polygon fill="#CD0000" points="17.182,40.48 7.583,30.882 7.583,17.246 17.182,7.647 30.816,7.647 40.416,17.246 40.416,30.882
+ 30.816,40.48 "/>
+ <polygon fill="#CE0000" points="17.197,40.445 7.619,30.868 7.619,17.262 17.197,7.685 30.803,7.685 40.381,17.262 40.381,30.868
+ 30.803,40.445 "/>
+ <polygon fill="#CF0000" points="17.211,40.412 7.654,30.855 7.654,17.278 17.211,7.721 30.788,7.721 40.346,17.278 40.346,30.855
+ 30.788,40.412 "/>
+ <polygon fill="#D00000" points="17.226,40.378 7.69,30.842 7.69,17.294 17.226,7.758 30.773,7.758 40.311,17.294 40.311,30.842
+ 30.773,40.378 "/>
+ <polygon fill="#D10000" points="17.241,40.344 7.726,30.828 7.726,17.311 17.241,7.794 30.759,7.794 40.273,17.311 40.273,30.828
+ 30.759,40.344 "/>
+ <polygon fill="#D20000" points="17.256,40.311 7.761,30.814 7.761,17.326 17.256,7.831 30.744,7.831 40.238,17.326 40.238,30.814
+ 30.744,40.311 "/>
+ <polygon fill="#D30000" points="17.271,40.273 7.796,30.801 7.796,17.342 17.271,7.868 30.729,7.868 40.203,17.342 40.203,30.801
+ 30.729,40.273 "/>
+ <polygon fill="#D40000" points="17.285,40.24 7.832,30.787 7.832,17.358 17.285,7.905 30.715,7.905 40.168,17.358 40.168,30.787
+ 30.715,40.24 "/>
+ <polygon fill="#D50000" points="17.3,40.206 7.868,30.773 7.868,17.374 17.3,7.941 30.7,7.941 40.132,17.374 40.132,30.773
+ 30.7,40.206 "/>
+ <polygon fill="#D60000" points="17.315,40.172 7.903,30.761 7.903,17.39 17.315,7.979 30.686,7.979 40.098,17.39 40.098,30.761
+ 30.686,40.172 "/>
+ <polygon fill="#D70000" points="17.33,40.139 7.938,30.747 7.938,17.406 17.33,8.015 30.67,8.015 40.062,17.406 40.062,30.747
+ 30.67,40.139 "/>
+ <polygon fill="#D80000" points="17.344,40.104 7.974,30.732 7.974,17.422 17.344,8.052 30.654,8.052 40.025,17.422 40.025,30.732
+ 30.654,40.104 "/>
+ <polygon fill="#D90000" points="17.359,40.068 8.01,30.721 8.01,17.438 17.359,8.089 30.641,8.089 39.99,17.438 39.99,30.721
+ 30.641,40.068 "/>
+ <polygon fill="#DA0000" points="17.374,40.034 8.045,30.706 8.045,17.454 17.374,8.125 30.626,8.125 39.954,17.454 39.954,30.706
+ 30.626,40.034 "/>
+ <polygon fill="#DB0000" points="17.389,40 8.081,30.691 8.081,17.47 17.389,8.162 30.611,8.162 39.919,17.47 39.919,30.691
+ 30.611,40 "/>
+ <polygon fill="#DC0000" points="17.403,39.966 8.116,30.68 8.116,17.486 17.403,8.199 30.598,8.199 39.884,17.486 39.884,30.68
+ 30.598,39.966 "/>
+ <polygon fill="#DD0000" points="17.418,39.932 8.152,30.665 8.152,17.502 17.418,8.235 30.582,8.235 39.848,17.502 39.848,30.665
+ 30.582,39.932 "/>
+ <polygon fill="#DE0000" points="17.433,39.896 8.188,30.652 8.188,17.518 17.433,8.272 30.566,8.272 39.812,17.518 39.812,30.652
+ 30.566,39.896 "/>
+ <polygon fill="#DF0000" points="17.448,39.863 8.223,30.639 8.223,17.534 17.448,8.309 30.553,8.309 39.775,17.534 39.775,30.639
+ 30.553,39.863 "/>
+ <polygon fill="#E00000" points="17.462,39.828 8.258,30.625 8.258,17.55 17.462,8.346 30.537,8.346 39.741,17.55 39.741,30.625
+ 30.537,39.828 "/>
+ <polygon fill="#E10000" points="17.477,39.794 8.294,30.611 8.294,17.565 17.477,8.383 30.521,8.383 39.706,17.565 39.706,30.611
+ 30.521,39.794 "/>
+ <polygon fill="#E20000" points="17.492,39.76 8.33,30.598 8.33,17.582 17.492,8.419 30.508,8.419 39.67,17.582 39.67,30.598
+ 30.508,39.76 "/>
+ <polygon fill="#E30000" points="17.507,39.727 8.365,30.584 8.365,17.598 17.507,8.456 30.493,8.456 39.635,17.598 39.635,30.584
+ 30.493,39.727 "/>
+ <polygon fill="#E40000" points="17.521,39.691 8.4,30.57 8.4,17.614 17.521,8.493 30.479,8.493 39.6,17.614 39.6,30.57
+ 30.479,39.691 "/>
+ <polygon fill="#E50000" points="17.536,39.657 8.436,30.559 8.436,17.63 17.536,8.529 30.464,8.529 39.562,17.63 39.562,30.559
+ 30.464,39.657 "/>
+ <polygon fill="#E60000" points="17.551,39.623 8.472,30.544 8.472,17.646 17.551,8.566 30.449,8.566 39.527,17.646 39.527,30.544
+ 30.449,39.623 "/>
+ <polygon fill="#E70000" points="17.566,39.589 8.507,30.529 8.507,17.662 17.566,8.603 30.436,8.603 39.492,17.662 39.492,30.529
+ 30.436,39.589 "/>
+ <polygon fill="#E80000" points="17.581,39.555 8.542,30.518 8.542,17.678 17.581,8.64 30.419,8.64 39.457,17.678 39.457,30.518
+ 30.419,39.555 "/>
+ <polygon fill="#E90000" points="17.595,39.52 8.578,30.503 8.578,17.693 17.595,8.676 30.404,8.676 39.422,17.693 39.422,30.503
+ 30.404,39.52 "/>
+ <polygon fill="#EA0000" points="17.61,39.484 8.614,30.489 8.614,17.709 17.61,8.713 30.391,8.713 39.387,17.709 39.387,30.489
+ 30.391,39.484 "/>
+ <polygon fill="#EB0000" points="17.625,39.451 8.649,30.477 8.649,17.726 17.625,8.75 30.375,8.75 39.352,17.726 39.352,30.477
+ 30.375,39.451 "/>
+ <polygon fill="#EC0000" points="17.64,39.417 8.685,30.462 8.685,17.742 17.64,8.787 30.359,8.787 39.314,17.742 39.314,30.462
+ 30.359,39.417 "/>
+ <polygon fill="#ED0000" points="17.654,39.383 8.72,30.449 8.72,17.757 17.654,8.823 30.346,8.823 39.279,17.757 39.279,30.449
+ 30.346,39.383 "/>
+ <polygon fill="#EE0000" points="17.669,39.35 8.756,30.436 8.756,17.773 17.669,8.86 30.331,8.86 39.244,17.773 39.244,30.436
+ 30.331,39.35 "/>
+ <polygon fill="#EF0000" points="17.684,39.312 8.792,30.422 8.792,17.79 17.684,8.897 30.316,8.897 39.208,17.79 39.208,30.422
+ 30.316,39.312 "/>
+ <polygon fill="#F00000" points="17.699,39.279 8.827,30.408 8.827,17.805 17.699,8.934 30.302,8.934 39.173,17.805 39.173,30.408
+ 30.302,39.279 "/>
+ <polygon fill="#F10000" points="17.713,39.245 8.862,30.395 8.862,17.821 17.713,8.971 30.286,8.971 39.137,17.821 39.137,30.395
+ 30.286,39.245 "/>
+ <polygon fill="#F20000" points="17.728,39.211 8.898,30.381 8.898,17.837 17.728,9.007 30.271,9.007 39.102,17.837 39.102,30.381
+ 30.271,39.211 "/>
+ <polygon fill="#F30000" points="17.743,39.177 8.934,30.367 8.934,17.853 17.743,9.044 30.257,9.044 39.066,17.853 39.066,30.367
+ 30.257,39.177 "/>
+ <polygon fill="#F40000" points="17.758,39.143 8.969,30.354 8.969,17.869 17.758,9.081 30.242,9.081 39.029,17.869 39.029,30.354
+ 30.242,39.143 "/>
+ <polygon fill="#F50000" points="17.772,39.107 9.004,30.341 9.004,17.885 17.772,9.117 30.229,9.117 38.995,17.885 38.995,30.341
+ 30.229,39.107 "/>
+ <polygon fill="#F60000" points="17.787,39.073 9.04,30.327 9.04,17.901 17.787,9.154 30.213,9.154 38.959,17.901 38.959,30.327
+ 30.213,39.073 "/>
+ <polygon fill="#F70000" points="17.802,39.039 9.076,30.312 9.076,17.917 17.802,9.191 30.198,9.191 38.924,17.917 38.924,30.312
+ 30.198,39.039 "/>
+ <polygon fill="#F80000" points="17.816,39.005 9.111,30.3 9.111,17.933 17.816,9.228 30.184,9.228 38.889,17.933 38.889,30.3
+ 30.184,39.005 "/>
+ <polygon fill="#F90000" points="17.832,38.971 9.146,30.286 9.146,17.949 17.832,9.265 30.169,9.265 38.854,17.949 38.854,30.286
+ 30.169,38.971 "/>
+ <polygon fill="#FA0000" points="17.846,38.938 9.182,30.271 9.182,17.965 17.846,9.301 30.154,9.301 38.816,17.965 38.816,30.271
+ 30.154,38.938 "/>
+ <polygon fill="#FB0000" points="17.861,38.902 9.218,30.259 9.218,17.981 17.861,9.338 30.139,9.338 38.782,17.981 38.782,30.259
+ 30.139,38.902 "/>
+ <polygon fill="#FC0000" points="17.875,38.867 9.253,30.246 9.253,17.997 17.875,9.375 30.124,9.375 38.746,17.997 38.746,30.246
+ 30.124,38.867 "/>
+ <polygon fill="#FD0000" points="17.891,38.833 9.289,30.232 9.289,18.013 17.891,9.411 30.109,9.411 38.711,18.013 38.711,30.232
+ 30.109,38.833 "/>
+ <polygon fill="#FE0000" points="17.905,38.799 9.324,30.219 9.324,18.029 17.905,9.448 30.096,9.448 38.675,18.029 38.675,30.219
+ 30.096,38.799 "/>
+ <path fill="#FF0000" d="M17.92,38.766l-8.56-8.561v-12.16l8.56-8.56h12.16l8.561,8.56v12.16l-8.561,8.561H17.92z"/>
+ </g>
+
+ <linearGradient id="XMLID_46_" gradientUnits="userSpaceOnUse" x1="582" y1="-986.6099" x2="582" y2="-1015.8911" gradientTransform="matrix(1 0 0 -1 -558 -977)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#FF0000"/>
+ </linearGradient>
+ <path fill="url(#XMLID_46_)" d="M17.92,38.891L9.36,30.33V18.17l8.56-8.56h12.16l8.561,8.56v12.16l-8.561,8.561H17.92z"/>
+ <path d="M11.7,17.7l18.7,18.7l5.896-5.9L17.6,11.7l-5.9,5.9V17.7z"/>
+ <path d="M11.7,30.5l5.9,5.9l18.7-18.7L30.4,11.8L11.7,30.5z"/>
+</g>
+<g id="crop_x0020_marks">
+ <path fill="none" d="M48,48H0V0h48V48z"/>
+</g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/draft.png b/utils/bcmregtool/elfio/doc/images/draft.png
new file mode 100644
index 0000000..59673fe
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/draft.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/home.gif b/utils/bcmregtool/elfio/doc/images/home.gif
new file mode 100644
index 0000000..6784f5b
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/home.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/home.png b/utils/bcmregtool/elfio/doc/images/home.png
new file mode 100644
index 0000000..cbb711d
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/home.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/home.svg b/utils/bcmregtool/elfio/doc/images/home.svg
new file mode 100644
index 0000000..2013053
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/home.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY st0 "fill-rule:nonzero;clip-rule:nonzero;fill:#FFFFFF;stroke:#000000;stroke-miterlimit:4;">
+ <!ENTITY st1 "fill:none;stroke:none;">
+ <!ENTITY st2 "fill:#000000;">
+ <!ENTITY st3 "fill:none;stroke:#FFFFFF;stroke-width:6.3469;stroke-linejoin:round;">
+ <!ENTITY st4 "fill-rule:evenodd;clip-rule:evenodd;stroke:none;">
+ <!ENTITY st5 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+]>
+<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+ <g id="Layer_x0020_3" style="&st0;">
+ <g style="&st4;">
+ <path style="&st3;" d="M22.9,7.1L5.1,21.8l0,0c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.2,0,0.4,0.1,0.6c0.3,0.6,0.9,1,1.6,1c0,0,1.1,0,2.2,0c0,2.4,0,14.2,0,14.2c0,1.1,0.8,1.9,1.8,1.9h27.4c1.1,0,1.9-0.9,1.9-2c0,0,0-11.8,0-14.2c1,0,2,0,2,0c0.8,0,1.4-0.5,1.7-1.2
+ c0.1-0.2,0.1-0.4,0.1-0.6c0-0.5-0.2-1-0.7-1.4c0,0-3.6-3-4.5-3.7c0-1.2,0-6.9,0-6.9c0-1.2-0.8-2-2-2h-4.8c-1,0-1.7,0.6-1.9,1.5c-1.9-1.6-4.1-3.5-4.1-3.5l0.1,0.1c-0.7-0.7-1.8-0.8-2.7-0.1z"/>
+ <path style="&st2;" d="M22.9,7.1L5.1,21.8l0,0c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.2,0,0.4,0.1,0.6c0.3,0.6,0.9,1,1.6,1c0,0,1.1,0,2.2,0c0,2.4,0,14.2,0,14.2c0,1.1,0.8,1.9,1.8,1.9h27.4c1.1,0,1.9-0.9,1.9-2c0,0,0-11.8,0-14.2c1,0,2,0,2,0c0.8,0,1.4-0.5,1.7-1.2
+ c0.1-0.2,0.1-0.4,0.1-0.6c0-0.5-0.2-1-0.7-1.4c0,0-3.6-3-4.5-3.7c0-1.2,0-6.9,0-6.9c0-1.2-0.8-2-2-2h-4.8c-1,0-1.7,0.6-1.9,1.5c-1.9-1.6-4.1-3.5-4.1-3.5l0.1,0.1c-0.7-0.7-1.8-0.8-2.7-0.1z"/>
+ <path style="&st2;" d="M41.8,22.8l-5.1-4.2v-0.1L31,13.7v0l-6.5-5.5C24.2,8,24,8,23.8,8.2L6.2,22.9c-0.1,0.1-0.1,0.3,0.1,0.3h1.6H10h28.1h1.2h2.3c0.2,0,0.4-0.2,0.2-0.4z"/>
+ <path d="M35.8,16.8l0-5.1c0-0.2-0.1-0.4-0.3-0.4h-3.2c-0.2,0-0.3,0.1-0.3,0.3v2.2l3.9,2.9z"/>
+ <path d="M11.9,24.7V37c0,0.3,0.1,0.4,0.3,0.4h23.6c0.3,0,0.4-0.2,0.4-0.4V24.7H11.9z"/>
+ </g>
+ </g>
+ <g id="crop_x0020_marks" style="&st5;">
+ <path style="&st1;" d="M48,48H0V0h48v48z"/>
+ </g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/important.gif b/utils/bcmregtool/elfio/doc/images/important.gif
new file mode 100644
index 0000000..6795d9a
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/important.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/important.png b/utils/bcmregtool/elfio/doc/images/important.png
new file mode 100644
index 0000000..12c90f6
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/important.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/important.svg b/utils/bcmregtool/elfio/doc/images/important.svg
new file mode 100644
index 0000000..5b662c4
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/important.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY st0 "fill:#FFFFFF;stroke:none;">
+ <!ENTITY st1 "fill:#FFFFFF;stroke-width:6.6112;stroke-linecap:round;stroke-linejoin:round;">
+ <!ENTITY st2 "stroke:#FFFFFF;stroke-width:6.6112;">
+ <!ENTITY st3 "fill:none;stroke:none;">
+ <!ENTITY st4 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+ <!ENTITY st5 "stroke:none;">
+]>
+<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+ <g id="Layer_x0020_3" style="&st4;">
+ <g>
+ <path style="&st2;" d="M41.7,35.3L26.6,9.4c-0.6-1-1.7-1.7-2.9-1.6c-1.2,0-2.3,0.7-2.9,1.7L6.3,35.4c-0.6,1-0.6,2.3,0,3.3c0.6,1,1.7,1.6,2.9,1.6h29.6c1.2,0,2.3-0.6,2.9-1.7c0.6-1,0.6-2.3,0-3.3z"/>
+ <path style="&st1;" d="M23.7,11L9.2,37h29.6L23.7,11z"/>
+ <path style="&st0;" d="M23.7,11.9L10.3,36.1h27.5l-14-24.1z"/>
+ <g>
+ <path style="&st5;" d="M24.1,34c-1.1,0-1.8-0.8-1.8-1.8c0-1.1,0.7-1.8,1.8-1.8c1.1,0,1.8,0.7,1.8,1.8c0,1-0.7,1.8-1.8,1.8h0z M22.9,29.3l-0.4-9.1h3.2l-0.4,9.1h-2.3z"/>
+ </g>
+ </g>
+ </g>
+ <g id="crop_x0020_marks" style="&st4;">
+ <path style="&st3;" d="M48,48H0V0h48v48z"/>
+ </g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/important.tif b/utils/bcmregtool/elfio/doc/images/important.tif
new file mode 100644
index 0000000..184de63
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/important.tif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/next.gif b/utils/bcmregtool/elfio/doc/images/next.gif
new file mode 100644
index 0000000..aa1516e
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/next.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/next.png b/utils/bcmregtool/elfio/doc/images/next.png
new file mode 100644
index 0000000..45835bf
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/next.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/next.svg b/utils/bcmregtool/elfio/doc/images/next.svg
new file mode 100644
index 0000000..64ec14b
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/next.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY st0 "fill:none;stroke:none;">
+ <!ENTITY st1 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:7.5901;stroke-linejoin:round;">
+ <!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+ <!ENTITY st3 "stroke:none;">
+]>
+<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+ <g id="Layer_x0020_3" style="&st2;">
+ <g>
+ <path style="&st1;" d="M22.4,41.1c0,0.3,0.3,0.3,0.5,0.2l16.6-16.9c0.5-0.5,0.4-0.7,0-1L22.9,6.7c-0.1-0.1-0.4-0.1-0.4,0.1v10H8.9c-0.3,0-0.5,0.2-0.5,0.4l0,13.3C8.4,30.9,8.6,31,9,31h13.5l-0.1,10.1z"/>
+ <path style="&st3;" d="M22.4,41.1c0,0.3,0.3,0.3,0.5,0.2l16.6-16.9c0.5-0.5,0.4-0.7,0-1L22.9,6.7c-0.1-0.1-0.4-0.1-0.4,0.1v10H8.9c-0.3,0-0.5,0.2-0.5,0.4l0,13.3C8.4,30.9,8.6,31,9,31h13.5l-0.1,10.1z"/>
+ </g>
+ </g>
+ <g id="crop_x0020_marks" style="&st2;">
+ <path style="&st0;" d="M48,48H0V0h48v48z"/>
+ </g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/note.gif b/utils/bcmregtool/elfio/doc/images/note.gif
new file mode 100644
index 0000000..f329d35
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/note.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/note.png b/utils/bcmregtool/elfio/doc/images/note.png
new file mode 100644
index 0000000..d0c3c64
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/note.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/note.svg b/utils/bcmregtool/elfio/doc/images/note.svg
new file mode 100644
index 0000000..aafc51e
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/note.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY st0 "fill:none;stroke:#FFFFFF;stroke-width:12.1438;stroke-linejoin:round;">
+ <!ENTITY st1 "fill:none;stroke-width:1.2429;">
+ <!ENTITY st2 "fill:#FFFFFF;stroke:none;">
+ <!ENTITY st3 "fill:none;stroke:#FFFFFF;stroke-width:12.7649;stroke-linejoin:round;">
+ <!ENTITY st4 "fill:#FFFFFF;stroke-width:6.3824;stroke-linejoin:round;">
+ <!ENTITY st5 "fill:none;stroke:none;">
+ <!ENTITY st6 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+ <!ENTITY st7 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:12.7649;stroke-linejoin:round;">
+ <!ENTITY st8 "stroke:none;">
+ <!ENTITY st9 "fill:none;stroke-width:4.9715;stroke-linejoin:round;">
+]>
+<svg xmlns="http://www.w3.org/2000/svg" width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve">
+ <g id="Layer_x0020_1" style="&st6;">
+ <path style="&st0;" d="M35.7,19.8v18.9H11V8.8h13.9l10.8,11z"/>
+ <path style="&st3;" d="M38.7,30.4L25,16.7l-7.7-3l2.7,8.7l13.3,13.4l5.4-5.4z"/>
+ <path style="&st7;" d="M35.7,8.8H11v29.9h24.7V8.8z"/>
+ <path style="&st4;" d="M35.7,8.8H11v29.9h24.7V8.8z"/>
+ <path style="&st2;" d="M35.7,8.8H11v29.9h24.7V8.8z"/>
+ </g>
+ <g id="Layer_x0020_4" style="&st6;">
+ <path style="&st9;" d="M38.7,30.4L25,16.7l-7.7-3l2.7,8.7l13.3,13.4l5.4-5.4z"/>
+ <path style="&st8;" d="M38.7,30.4L25,16.7l-7.7-3l2.7,8.7l13.3,13.4l5.4-5.4z"/>
+ <path style="&st8;" d="M20.6,14.7l-2.5,2.5L17,13.4l3.6,1.3z"/>
+ <path style="&st1;" d="M19.6,22.2l3-0.3l2.4-2.4l0.4-2.8"/>
+ <path style="&st2;" d="M20.4,14.9L18.3,17l1.6,5.2l2.7-0.3l2.4-2.4l0.3-2.4l-5-2.2z"/>
+ </g>
+ <g id="crop" style="&st6;">
+ <path style="&st5;" d="M48,48H0V0h48v48z"/>
+ </g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/note.tif b/utils/bcmregtool/elfio/doc/images/note.tif
new file mode 100644
index 0000000..08644d6
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/note.tif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/prev.gif b/utils/bcmregtool/elfio/doc/images/prev.gif
new file mode 100644
index 0000000..64ca8f3
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/prev.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/prev.png b/utils/bcmregtool/elfio/doc/images/prev.png
new file mode 100644
index 0000000..cf24654
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/prev.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/prev.svg b/utils/bcmregtool/elfio/doc/images/prev.svg
new file mode 100644
index 0000000..7401287
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/prev.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY st0 "fill:none;stroke:none;">
+ <!ENTITY st1 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:7.5901;stroke-linejoin:round;">
+ <!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+ <!ENTITY st3 "stroke:none;">
+]>
+<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+ <g id="Layer_x0020_3" style="&st2;">
+ <g>
+ <path style="&st1;" d="M25.6,6.9c0-0.3-0.3-0.3-0.5-0.2L8.4,23.6c-0.5,0.5-0.4,0.7,0,1l16.6,16.6c0.1,0.1,0.4,0.1,0.4-0.1v-10h13.6c0.3,0,0.5-0.2,0.5-0.4l0-13.3c0-0.3-0.2-0.5-0.5-0.5H25.5l0.1-10.1z"/>
+ <path style="&st3;" d="M25.6,6.9c0-0.3-0.3-0.3-0.5-0.2L8.4,23.6c-0.5,0.5-0.4,0.7,0,1l16.6,16.6c0.1,0.1,0.4,0.1,0.4-0.1v-10h13.6c0.3,0,0.5-0.2,0.5-0.4l0-13.3c0-0.3-0.2-0.5-0.5-0.5H25.5l0.1-10.1z"/>
+ </g>
+ </g>
+ <g id="crop_x0020_marks" style="&st2;">
+ <path style="&st0;" d="M48,48H0V0h48v48z"/>
+ </g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/tip.gif b/utils/bcmregtool/elfio/doc/images/tip.gif
new file mode 100644
index 0000000..823f2b4
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/tip.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/tip.png b/utils/bcmregtool/elfio/doc/images/tip.png
new file mode 100644
index 0000000..5c4aab3
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/tip.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/tip.svg b/utils/bcmregtool/elfio/doc/images/tip.svg
new file mode 100644
index 0000000..6fdf54b
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/tip.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY st0 "fill:none;stroke:#000000;stroke-width:1.0944;">
+ <!ENTITY st1 "fill:#FFFFFF;stroke:none;">
+ <!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#FFFFFF;stroke-width:5.6139;stroke-miterlimit:4;">
+ <!ENTITY st3 "fill:none;stroke:none;">
+ <!ENTITY st4 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+ <!ENTITY st5 "stroke:none;">
+]>
+<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+ <g id="Layer_x0020_3" style="&st2;">
+ <g>
+ <path d="M9.5,18.6c0,8,6.5,14.4,14.4,14.4c8,0,14.4-6.5,14.4-14.4c0-8-6.5-14.4-14.4-14.4c-8,0-14.4,6.5-14.4,14.4z M12.8,18.6c0-6.2,5-11.2,11.2-11.2c6.2,0,11.2,5,11.2,11.2c0,6.2-5,11.2-11.2,11.2c-6.2,0-11.2-5-11.2-11.2z"/>
+ <path d="M28.1,37.9l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+ <path d="M28.1,34.8l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+ <path d="M28.1,31.6l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8s0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8s-0.9-1.5-1.8-1.4z"/>
+ <path d="M23.1,41.3v0.9c0,0.9,0.7,1.6,1.6,1.6c0.9,0,1.6-0.7,1.6-1.6v-0.9h-3.3z"/>
+ <path style="&st1;" d="M35.9,18.7c0,6.6-5.4,12-12,12c-6.6,0-12-5.4-12-12s5.4-12,12-12c6.6,0,12,5.4,12,12z"/>
+ <path style="&st5;" d="M9.6,18.6c0,8,6.5,14.4,14.4,14.4c8,0,14.4-6.5,14.4-14.4c0-8-6.5-14.4-14.4-14.4c-8,0-14.4,6.5-14.4,14.4z M12.9,18.6c0-6.2,5-11.2,11.2-11.2c6.2,0,11.2,5,11.2,11.2c0,6.2-5,11.2-11.2,11.2c-6.2,0-11.2-5-11.2-11.2z"/>
+ <path style="&st5;" d="M28.2,37.9l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+ <path style="&st5;" d="M28.2,34.7l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+ <path style="&st5;" d="M28.2,31.6l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+ <path style="&st5;" d="M23.1,41.3v0.9c0,0.9,0.7,1.6,1.6,1.6s1.6-0.7,1.6-1.6v-0.9h-3.3z"/>
+ <path style="&st0;" d="M22.3,28.3l-3.5-10.7c0,0,6.6,3.9,10.5,0"/>
+ </g>
+ </g>
+ <g id="crop_x0020_marks" style="&st4;">
+ <path style="&st3;" d="M48,48H0V0h48v48z"/>
+ </g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/tip.tif b/utils/bcmregtool/elfio/doc/images/tip.tif
new file mode 100644
index 0000000..4a3d8c7
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/tip.tif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/toc-blank.png b/utils/bcmregtool/elfio/doc/images/toc-blank.png
new file mode 100644
index 0000000..6ffad17
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/toc-blank.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/toc-minus.png b/utils/bcmregtool/elfio/doc/images/toc-minus.png
new file mode 100644
index 0000000..abbb020
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/toc-minus.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/toc-plus.png b/utils/bcmregtool/elfio/doc/images/toc-plus.png
new file mode 100644
index 0000000..941312c
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/toc-plus.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/up.gif b/utils/bcmregtool/elfio/doc/images/up.gif
new file mode 100644
index 0000000..aabc2d0
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/up.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/up.png b/utils/bcmregtool/elfio/doc/images/up.png
new file mode 100644
index 0000000..07634de
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/up.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/up.svg b/utils/bcmregtool/elfio/doc/images/up.svg
new file mode 100644
index 0000000..9cc3a5f
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/up.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY st0 "fill:none;stroke:none;">
+ <!ENTITY st1 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:7.5901;stroke-linejoin:round;">
+ <!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+ <!ENTITY st3 "stroke:none;">
+]>
+<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+ <g id="Layer_x0020_3" style="&st2;">
+ <g>
+ <path style="&st1;" d="M41.1,25.6c0.3,0,0.3-0.3,0.2-0.5L24.4,8.4c-0.5-0.5-0.7-0.4-1,0L6.7,25.1c-0.1,0.1-0.1,0.4,0.1,0.4h10v13.6c0,0.3,0.2,0.5,0.4,0.5l13.3,0c0.3,0,0.5-0.2,0.5-0.5V25.5l10.1,0.1z"/>
+ <path style="&st3;" d="M41.1,25.6c0.3,0,0.3-0.3,0.2-0.5L24.4,8.4c-0.5-0.5-0.7-0.4-1,0L6.7,25.1c-0.1,0.1-0.1,0.4,0.1,0.4h10v13.6c0,0.3,0.2,0.5,0.4,0.5l13.3,0c0.3,0,0.5-0.2,0.5-0.5V25.5l10.1,0.1z"/>
+ </g>
+ </g>
+ <g id="crop_x0020_marks" style="&st2;">
+ <path style="&st0;" d="M48,48H0V0h48v48z"/>
+ </g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/warning.gif b/utils/bcmregtool/elfio/doc/images/warning.gif
new file mode 100644
index 0000000..3adf191
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/warning.gif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/warning.png b/utils/bcmregtool/elfio/doc/images/warning.png
new file mode 100644
index 0000000..1c33db8
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/warning.png
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/images/warning.svg b/utils/bcmregtool/elfio/doc/images/warning.svg
new file mode 100644
index 0000000..1af2b05
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/warning.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY st0 "fill:#000000;stroke:#FFFFFF;stroke-width:7.9139;stroke-linejoin:round;">
+ <!ENTITY st1 "fill-rule:nonzero;clip-rule:nonzero;fill:#FFFFFF;stroke:#000000;stroke-miterlimit:4;">
+ <!ENTITY st2 "fill:none;stroke:none;">
+ <!ENTITY st3 "fill:#000000;">
+ <!ENTITY st4 "fill-rule:evenodd;clip-rule:evenodd;stroke:none;">
+ <!ENTITY st5 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+]>
+<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+ <g id="Layer_x0020_4" style="&st1;">
+ <g style="&st4;">
+ <path style="&st0;" d="M16.4,42.3L5.7,31.6V16.4L16.4,5.7h15.2l10.7,10.7v15.2L31.6,42.3H16.4z"/>
+ <path style="&st3;" d="M16.4,42.3L5.7,31.6V16.4L16.4,5.7h15.2l10.7,10.7v15.2L31.6,42.3H16.4z"/>
+ <path d="M11.7,17.7l18.7,18.7l5.9-5.9L17.6,11.7l-5.9,5.9z"/>
+ <path d="M11.7,30.5l5.9,5.9l18.7-18.7l-5.9-5.9L11.7,30.5z"/>
+ </g>
+ </g>
+ <g id="crop_x0020_marks" style="&st5;">
+ <path style="&st2;" d="M48,48H0V0h48v48z"/>
+ </g>
+</svg>
diff --git a/utils/bcmregtool/elfio/doc/images/warning.tif b/utils/bcmregtool/elfio/doc/images/warning.tif
new file mode 100644
index 0000000..7b6611e
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/images/warning.tif
Binary files differ
diff --git a/utils/bcmregtool/elfio/doc/site/index.htm b/utils/bcmregtool/elfio/doc/site/index.htm
new file mode 100755
index 0000000..29c4da6
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/site/index.htm
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>ELFIO - C++ library for reading and generating ELF files</title>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+</head>
+
+<body>
+
+<table summary="Title and Sourceforge logo.">
+<tr>
+<td align="left">
+<h1>ELFIO - C++ library for reading and generating ELF files</h1>
+</td>
+</tr>
+</table>
+
+<div class="links">
+<h3>Links</h3>
+<ul class="menu">
+<li><a href="http://sourceforge.net/projects/elfio/files/">Download</a> the source
+ distribution</li><br/>
+<li>Read the <a href="elfio.pdf">Tutorial and User Manual</a></li><br/>
+<li>Visit the
+<a href="http://sourceforge.net/projects/elfio/">SourceForge project page</a></li><br/>
+<li><a href="oldsite/index.htm">Old documentation</a> for outdated 1.0.3 version of the library</li><br/>
+<li>Send <a href="mailto:to_serge@users.sourceforge.net">feedback, comments, patches, etc.</a></li></br>
+</ul>
+</div>
+
+<div class="main">
+
+<p>
+<em>ELFIO</em> is a small, header-only C++ library that provides a simple interface for
+reading and generating files in ELF binary format.
+</p>
+<p>
+It is used as a standalone library - it is not dependant on any other product
+or project. Adhering to ISO C++, it compiles on a wide variety of architectures
+and compilers.
+</p>
+<p>
+While the library is easy to use, some basic knowledge of the ELF binary format
+is required. Such Information can easily be found on the Web.
+</p>
+<p>
+Current version of <em>ELFIO</em> library is 2.x and it is distributed under
+<a href="http://www.opensource.org/licenses/MIT">MIT License</a> conditions.
+</p>
+<p>
+Note for users of previous library versions 1.0.x: Version 2.x is not source
+compatible to earlier versions. Transition to the new library interface is
+straightforward though.
+</p>
+
+</div>
+
+<div class="by">
+<p class="author">
+The library and the page is maintained by
+<a href="mailto:to_serge@users.sourceforge.net">Serge Lamikhov-Center</a>.</br>
+</p>
+
+<table summary="Title and Sourceforge logo.">
+<tr>
+<td align="left" class=""author>
+<p class="author">
+Project Web Hosted by
+</p>
+</td>
+<td align="left">
+<a href="http://sourceforge.net/projects/elfio"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=19959&amp;type=10" width="80" height="15" border="0" alt="Get ELFIO library" /></a>
+</td>
+</tr>
+</table>
+
+
+</div>
+
+</body>
+
+</html>
diff --git a/utils/bcmregtool/elfio/doc/site/style.css b/utils/bcmregtool/elfio/doc/site/style.css
new file mode 100755
index 0000000..9e9da1f
--- /dev/null
+++ b/utils/bcmregtool/elfio/doc/site/style.css
@@ -0,0 +1,131 @@
+/*
+color:#ffffff; white
+color:#e0e0e0; light gray
+color:#f8f8f8; light gray
+color:#003366; dark blue
+color:#555555; gray
+color:#ff9933; light orange
+color:#cc3300; red/brown/orange
+color:#660066; purple
+color:#669900; green
+*/
+
+a {
+ color:#003366;
+ text-decoration:underline;
+}
+
+a:hover {
+ color:#ff9933;
+}
+
+body {
+ font-family: verdana, tahoma, helvetica, arial, sans-serif;
+ font-size: 90%;
+ background-color:#ffffff;
+ margin: 1em;
+}
+
+pre {
+ font-family: courier, serif;
+ background-color:#f8f8f8;
+ margin: 1.5em;
+ font-size:90%;
+}
+
+ul {
+ list-style: circle outside;
+ font-stretch:extra-expanded;
+/* font-size:90%;*/
+}
+
+ul.menu { /* inherits from ul */
+ padding-left: 1em;
+}
+
+
+em {
+ color:#FF7700;
+ font-size:110%;
+}
+
+h1,h2,h3{
+ color:#FF7700;
+}
+
+h1 {
+ border-color:#d0d0d0;
+ border-style:solid;
+ border-width:1px;
+ font-weight:bold;
+ padding: 0.2em;
+ background-color:#f8f8f8
+}
+
+h2 {
+ font-size:120%;
+ font-weight:bold;
+ border-bottom-style:solid;
+ border-bottom-width:1px;
+ border-bottom-color:#d0d0d0;
+}
+
+h3 {
+ font-size:110%;
+ font-weight:bold;
+ font-style:italic;
+}
+
+tt {
+ font-family: courier, serif;
+}
+
+tt.classname {
+ font-weight:bold;
+}
+
+tt.constant {
+ font-weight:bold;
+}
+
+
+p {
+ line-height: 1.5em;
+}
+
+
+p.author {
+/* line-height: 0.5em; */
+ font-size:70%;
+}
+
+
+div.links{
+ float: left;
+ clear: left;
+ width: 12em;
+ background-color:#f8f8f8;
+ border-style:solid;
+ border-width:1px;
+ border-color:#d0d0d0;
+ margin-bottom: 0.5em;
+ padding: 0.5em 0.5em 0.5em 0.5em;
+ margin: 0.5em 0.5em 0em 0em;
+}
+
+div.main{
+ border-style:solid;
+ border-width:1px;
+ border-color:#d0d0d0;
+ margin: 0.5em 0em 0.5em 14em;
+ padding: 0.5em 0.5em 0.5em 0.5em;
+}
+
+div.by{
+ line-height: 0.5em;
+ border-width:1px;
+ border-color:#d0d0d0;
+ margin: 0.5em 0em 0.5em 14em;
+ padding: 0.5em 0.5em 0.5em 0.5em;
+}
+
diff --git a/utils/bcmregtool/elfio/elf_examples/64bitLOAD.elf b/utils/bcmregtool/elfio/elf_examples/64bitLOAD.elf
new file mode 100644
index 0000000..3b97478
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/64bitLOAD.elf
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/ARMSCII-8.so b/utils/bcmregtool/elfio/elf_examples/ARMSCII-8.so
new file mode 100644
index 0000000..021adb9
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/ARMSCII-8.so
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_debug.elf b/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_debug.elf
new file mode 100755
index 0000000..12d00d3
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_debug.elf
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_release.elf b/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_release.elf
new file mode 100755
index 0000000..39ce159
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_release.elf
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/asm b/utils/bcmregtool/elfio/elf_examples/asm
new file mode 100644
index 0000000..1b721d5
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/asm
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/asm.lst b/utils/bcmregtool/elfio/elf_examples/asm.lst
new file mode 100644
index 0000000..aa1fd64
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/asm.lst
@@ -0,0 +1,23 @@
+ 1 ; nasm -f elf hello.asm # this will produce hello.o ELF object file
+ 2 ; ld -s -o hello hello.o # this will produce hello executable
+ 3
+ 4 section .text
+ 5 global _start ;must be declared for linker (ld)
+ 6
+ 7 _start: ;tell linker entry point
+ 8
+ 9 00000000 BA0E000000 mov edx,len ;message length
+ 10 00000005 B9[00000000] mov ecx,msg ;message to write
+ 11 0000000A BB01000000 mov ebx,1 ;file descriptor (stdout)
+ 12 0000000F B804000000 mov eax,4 ;system call number (sys_write)
+ 13 00000014 CD80 int 0x80 ;call kernel
+ 14
+ 15 00000016 B801000000 mov eax,1 ;system call number (sys_exit)
+ 16 0000001B CD80 int 0x80 ;call kernel
+ 17
+ 18 section .data
+ 19
+ 20 00000000 48656C6C6F2C20776F- msg db 'Hello, world!',0xa ;our dear string
+ 21 00000009 726C64210A
+ 22 len equ $ - msg ;length of our dear string
+ 23
diff --git a/utils/bcmregtool/elfio/elf_examples/asm.readelf b/utils/bcmregtool/elfio/elf_examples/asm.readelf
new file mode 100644
index 0000000..5580e32
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/asm.readelf
@@ -0,0 +1,51 @@
+ELF Header:
+ Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
+ Class: ELF32
+ Data: 2's complement, little endian
+ Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: EXEC (Executable file)
+ Machine: Intel 80386
+ Version: 0x1
+ Entry point address: 0x8048080
+ Start of program headers: 52 (bytes into file)
+ Start of section headers: 200 (bytes into file)
+ Flags: 0x0
+ Size of this header: 52 (bytes)
+ Size of program headers: 32 (bytes)
+ Number of program headers: 2
+ Size of section headers: 40 (bytes)
+ Number of section headers: 4
+ Section header string table index: 3
+
+Section Headers:
+ [Nr] Name Type Addr Off Size ES Flg Lk Inf Al
+ [ 0] NULL 00000000 000000 000000 00 0 0 0
+ [ 1] .text PROGBITS 08048080 000080 00001d 00 AX 0 0 16
+ [ 2] .data PROGBITS 080490a0 0000a0 00000e 00 WA 0 0 4
+ [ 3] .shstrtab STRTAB 00000000 0000ae 000017 00 0 0 1
+Key to Flags:
+ W (write), A (alloc), X (execute), M (merge), S (strings)
+ I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
+ O (extra OS processing required) o (OS specific), p (processor specific)
+
+There are no section groups in this file.
+
+Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
+ LOAD 0x000000 0x08048000 0x08048000 0x0009d 0x0009d R E 0x1000
+ LOAD 0x0000a0 0x080490a0 0x080490a0 0x0000e 0x0000e RW 0x1000
+
+ Section to Segment mapping:
+ Segment Sections...
+ 00 .text
+ 01 .data
+
+There is no dynamic section in this file.
+
+There are no relocations in this file.
+
+The decoding of unwind sections for machine type Intel 80386 is not currently supported.
+
+No version information found in this file.
diff --git a/utils/bcmregtool/elfio/elf_examples/asm.s b/utils/bcmregtool/elfio/elf_examples/asm.s
new file mode 100644
index 0000000..c9f5221
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/asm.s
@@ -0,0 +1,22 @@
+; nasm -f elf hello.asm # this will produce hello.o ELF object file
+; ld -s -o hello hello.o # this will produce hello executable
+
+section .text
+ global _start ;must be declared for linker (ld)
+
+_start: ;tell linker entry point
+
+ mov edx,len ;message length
+ mov ecx,msg ;message to write
+ mov ebx,1 ;file descriptor (stdout)
+ mov eax,4 ;system call number (sys_write)
+ int 0x80 ;call kernel
+
+ mov eax,1 ;system call number (sys_exit)
+ int 0x80 ;call kernel
+
+section .data
+
+msg db 'Hello, world!',0xa ;our dear string
+len equ $ - msg ;length of our dear string
+
diff --git a/utils/bcmregtool/elfio/elf_examples/asm64 b/utils/bcmregtool/elfio/elf_examples/asm64
new file mode 100644
index 0000000..bd40858
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/asm64
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/asm64.lst b/utils/bcmregtool/elfio/elf_examples/asm64.lst
new file mode 100644
index 0000000..aa1fd64
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/asm64.lst
@@ -0,0 +1,23 @@
+ 1 ; nasm -f elf hello.asm # this will produce hello.o ELF object file
+ 2 ; ld -s -o hello hello.o # this will produce hello executable
+ 3
+ 4 section .text
+ 5 global _start ;must be declared for linker (ld)
+ 6
+ 7 _start: ;tell linker entry point
+ 8
+ 9 00000000 BA0E000000 mov edx,len ;message length
+ 10 00000005 B9[00000000] mov ecx,msg ;message to write
+ 11 0000000A BB01000000 mov ebx,1 ;file descriptor (stdout)
+ 12 0000000F B804000000 mov eax,4 ;system call number (sys_write)
+ 13 00000014 CD80 int 0x80 ;call kernel
+ 14
+ 15 00000016 B801000000 mov eax,1 ;system call number (sys_exit)
+ 16 0000001B CD80 int 0x80 ;call kernel
+ 17
+ 18 section .data
+ 19
+ 20 00000000 48656C6C6F2C20776F- msg db 'Hello, world!',0xa ;our dear string
+ 21 00000009 726C64210A
+ 22 len equ $ - msg ;length of our dear string
+ 23
diff --git a/utils/bcmregtool/elfio/elf_examples/crash-060833f08dc14d1712428742b3cad7af17b36bb7 b/utils/bcmregtool/elfio/elf_examples/crash-060833f08dc14d1712428742b3cad7af17b36bb7
new file mode 100644
index 0000000..207693a
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/crash-060833f08dc14d1712428742b3cad7af17b36bb7
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/crash-7d695153fd8052529d480c2352d4ada33a44bada b/utils/bcmregtool/elfio/elf_examples/crash-7d695153fd8052529d480c2352d4ada33a44bada
new file mode 100644
index 0000000..0120a79
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/crash-7d695153fd8052529d480c2352d4ada33a44bada
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/crash-b82f05b0b25c8fdc98480e6d76b6d5f9164ae2bc b/utils/bcmregtool/elfio/elf_examples/crash-b82f05b0b25c8fdc98480e6d76b6d5f9164ae2bc
new file mode 100644
index 0000000..98e5872
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/crash-b82f05b0b25c8fdc98480e6d76b6d5f9164ae2bc
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/crash-e1ce7cecf01cf800397a4302854d9d76fa19763c b/utils/bcmregtool/elfio/elf_examples/crash-e1ce7cecf01cf800397a4302854d9d76fa19763c
new file mode 100644
index 0000000..ec3a5b4
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/crash-e1ce7cecf01cf800397a4302854d9d76fa19763c
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/crash-e3c41070342cf84dea077356ddbb8ebf4326a601 b/utils/bcmregtool/elfio/elf_examples/crash-e3c41070342cf84dea077356ddbb8ebf4326a601
new file mode 100644
index 0000000..241604f
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/crash-e3c41070342cf84dea077356ddbb8ebf4326a601
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/elf_header_i386_32.elf b/utils/bcmregtool/elfio/elf_examples/elf_header_i386_32.elf
new file mode 100644
index 0000000..3290d11
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/elf_header_i386_32.elf
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/entropy.so b/utils/bcmregtool/elfio/elf_examples/entropy.so
new file mode 100644
index 0000000..ff36b9c
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/entropy.so
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/hello.c b/utils/bcmregtool/elfio/elf_examples/hello.c
new file mode 100644
index 0000000..65f198c
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/hello.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int main()
+{
+ printf( "Hello\n" );
+
+ return 0;
+}
diff --git a/utils/bcmregtool/elfio/elf_examples/hello_32 b/utils/bcmregtool/elfio/elf_examples/hello_32
new file mode 100644
index 0000000..69f3e9e
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/hello_32
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/hello_32.txt b/utils/bcmregtool/elfio/elf_examples/hello_32.txt
new file mode 100644
index 0000000..bf89806
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/hello_32.txt
@@ -0,0 +1,211 @@
+ELF Header:
+ Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
+ Class: ELF32
+ Data: 2's complement, little endian
+ Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: EXEC (Executable file)
+ Machine: Intel 80386
+ Version: 0x1
+ Entry point address: 0x80482b0
+ Start of program headers: 52 (bytes into file)
+ Start of section headers: 1912 (bytes into file)
+ Flags: 0x0
+ Size of this header: 52 (bytes)
+ Size of program headers: 32 (bytes)
+ Number of program headers: 7
+ Size of section headers: 40 (bytes)
+ Number of section headers: 28
+ Section header string table index: 25
+
+Section Headers:
+ [Nr] Name Type Addr Off Size ES Flg Lk Inf Al
+ [ 0] NULL 00000000 000000 000000 00 0 0 0
+ [ 1] .interp PROGBITS 08048114 000114 000013 00 A 0 0 1
+ [ 2] .note.ABI-tag NOTE 08048128 000128 000020 00 A 0 0 4
+ [ 3] .gnu.hash GNU_HASH 08048148 000148 000020 04 A 4 0 4
+ [ 4] .dynsym DYNSYM 08048168 000168 000050 10 A 5 1 4
+ [ 5] .dynstr STRTAB 080481b8 0001b8 00004a 00 A 0 0 1
+ [ 6] .gnu.version VERSYM 08048202 000202 00000a 02 A 4 0 2
+ [ 7] .gnu.version_r VERNEED 0804820c 00020c 000020 00 A 5 1 4
+ [ 8] .rel.dyn REL 0804822c 00022c 000008 08 A 4 0 4
+ [ 9] .rel.plt REL 08048234 000234 000018 08 A 4 11 4
+ [10] .init PROGBITS 0804824c 00024c 000017 00 AX 0 0 4
+ [11] .plt PROGBITS 08048264 000264 000040 04 AX 0 0 4
+ [12] .text PROGBITS 080482b0 0002b0 0001a8 00 AX 0 0 16
+ [13] .fini PROGBITS 08048458 000458 00001c 00 AX 0 0 4
+ [14] .rodata PROGBITS 08048474 000474 000012 00 A 0 0 4
+ [15] .eh_frame PROGBITS 08048488 000488 000004 00 A 0 0 4
+ [16] .ctors PROGBITS 0804948c 00048c 000008 00 WA 0 0 4
+ [17] .dtors PROGBITS 08049494 000494 000008 00 WA 0 0 4
+ [18] .jcr PROGBITS 0804949c 00049c 000004 00 WA 0 0 4
+ [19] .dynamic DYNAMIC 080494a0 0004a0 0000c8 08 WA 5 0 4
+ [20] .got PROGBITS 08049568 000568 000004 04 WA 0 0 4
+ [21] .got.plt PROGBITS 0804956c 00056c 000018 04 WA 0 0 4
+ [22] .data PROGBITS 08049584 000584 000004 00 WA 0 0 4
+ [23] .bss NOBITS 08049588 000588 000008 00 WA 0 0 4
+ [24] .comment PROGBITS 00000000 000588 000114 00 0 0 1
+ [25] .shstrtab STRTAB 00000000 00069c 0000db 00 0 0 1
+ [26] .symtab SYMTAB 00000000 000bd8 000440 10 27 48 4
+ [27] .strtab STRTAB 00000000 001018 000259 00 0 0 1
+Key to Flags:
+ W (write), A (alloc), X (execute), M (merge), S (strings)
+ I (info), L (link order), G (group), x (unknown)
+ O (extra OS processing required) o (OS specific), p (processor specific)
+
+There are no section groups in this file.
+
+Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
+ PHDR 0x000034 0x08048034 0x08048034 0x000e0 0x000e0 R E 0x4
+ INTERP 0x000114 0x08048114 0x08048114 0x00013 0x00013 R 0x1
+ [Requesting program interpreter: /lib/ld-linux.so.2]
+ LOAD 0x000000 0x08048000 0x08048000 0x0048c 0x0048c R E 0x1000
+ LOAD 0x00048c 0x0804948c 0x0804948c 0x000fc 0x00104 RW 0x1000
+ DYNAMIC 0x0004a0 0x080494a0 0x080494a0 0x000c8 0x000c8 RW 0x4
+ NOTE 0x000128 0x08048128 0x08048128 0x00020 0x00020 R 0x4
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4
+
+ Section to Segment mapping:
+ Segment Sections...
+ 00
+ 01 .interp
+ 02 .interp .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .eh_frame
+ 03 .ctors .dtors .jcr .dynamic .got .got.plt .data .bss
+ 04 .dynamic
+ 05 .note.ABI-tag
+ 06
+
+Dynamic section at offset 0x4a0 contains 20 entries:
+ Tag Type Name/Value
+ 0x00000001 (NEEDED) Shared library: [libc.so.6]
+ 0x0000000c (INIT) 0x804824c
+ 0x0000000d (FINI) 0x8048458
+ 0x6ffffef5 (GNU_HASH) 0x8048148
+ 0x00000005 (STRTAB) 0x80481b8
+ 0x00000006 (SYMTAB) 0x8048168
+ 0x0000000a (STRSZ) 74 (bytes)
+ 0x0000000b (SYMENT) 16 (bytes)
+ 0x00000015 (DEBUG) 0x0
+ 0x00000003 (PLTGOT) 0x804956c
+ 0x00000002 (PLTRELSZ) 24 (bytes)
+ 0x00000014 (PLTREL) REL
+ 0x00000017 (JMPREL) 0x8048234
+ 0x00000011 (REL) 0x804822c
+ 0x00000012 (RELSZ) 8 (bytes)
+ 0x00000013 (RELENT) 8 (bytes)
+ 0x6ffffffe (VERNEED) 0x804820c
+ 0x6fffffff (VERNEEDNUM) 1
+ 0x6ffffff0 (VERSYM) 0x8048202
+ 0x00000000 (NULL) 0x0
+
+Relocation section '.rel.dyn' at offset 0x22c contains 1 entries:
+ Offset Info Type Sym.Value Sym. Name
+08049568 00000106 R_386_GLOB_DAT 00000000 __gmon_start__
+
+Relocation section '.rel.plt' at offset 0x234 contains 3 entries:
+ Offset Info Type Sym.Value Sym. Name
+08049578 00000107 R_386_JUMP_SLOT 00000000 __gmon_start__
+0804957c 00000207 R_386_JUMP_SLOT 00000000 __libc_start_main
+08049580 00000307 R_386_JUMP_SLOT 00000000 puts
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains 5 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
+ 2: 00000000 415 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.0 (2)
+ 3: 00000000 399 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.0 (2)
+ 4: 08048478 4 OBJECT GLOBAL DEFAULT 14 _IO_stdin_used
+
+Symbol table '.symtab' contains 68 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 08048114 0 SECTION LOCAL DEFAULT 1
+ 2: 08048128 0 SECTION LOCAL DEFAULT 2
+ 3: 08048148 0 SECTION LOCAL DEFAULT 3
+ 4: 08048168 0 SECTION LOCAL DEFAULT 4
+ 5: 080481b8 0 SECTION LOCAL DEFAULT 5
+ 6: 08048202 0 SECTION LOCAL DEFAULT 6
+ 7: 0804820c 0 SECTION LOCAL DEFAULT 7
+ 8: 0804822c 0 SECTION LOCAL DEFAULT 8
+ 9: 08048234 0 SECTION LOCAL DEFAULT 9
+ 10: 0804824c 0 SECTION LOCAL DEFAULT 10
+ 11: 08048264 0 SECTION LOCAL DEFAULT 11
+ 12: 080482b0 0 SECTION LOCAL DEFAULT 12
+ 13: 08048458 0 SECTION LOCAL DEFAULT 13
+ 14: 08048474 0 SECTION LOCAL DEFAULT 14
+ 15: 08048488 0 SECTION LOCAL DEFAULT 15
+ 16: 0804948c 0 SECTION LOCAL DEFAULT 16
+ 17: 08049494 0 SECTION LOCAL DEFAULT 17
+ 18: 0804949c 0 SECTION LOCAL DEFAULT 18
+ 19: 080494a0 0 SECTION LOCAL DEFAULT 19
+ 20: 08049568 0 SECTION LOCAL DEFAULT 20
+ 21: 0804956c 0 SECTION LOCAL DEFAULT 21
+ 22: 08049584 0 SECTION LOCAL DEFAULT 22
+ 23: 08049588 0 SECTION LOCAL DEFAULT 23
+ 24: 00000000 0 SECTION LOCAL DEFAULT 24
+ 25: 080482d4 0 FUNC LOCAL DEFAULT 12 call_gmon_start
+ 26: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
+ 27: 0804948c 0 OBJECT LOCAL DEFAULT 16 __CTOR_LIST__
+ 28: 08049494 0 OBJECT LOCAL DEFAULT 17 __DTOR_LIST__
+ 29: 0804949c 0 OBJECT LOCAL DEFAULT 18 __JCR_LIST__
+ 30: 08049588 4 OBJECT LOCAL DEFAULT 23 dtor_idx.5805
+ 31: 0804958c 1 OBJECT LOCAL DEFAULT 23 completed.5803
+ 32: 08048300 0 FUNC LOCAL DEFAULT 12 __do_global_dtors_aux
+ 33: 08048360 0 FUNC LOCAL DEFAULT 12 frame_dummy
+ 34: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
+ 35: 08049490 0 OBJECT LOCAL DEFAULT 16 __CTOR_END__
+ 36: 08048488 0 OBJECT LOCAL DEFAULT 15 __FRAME_END__
+ 37: 0804949c 0 OBJECT LOCAL DEFAULT 18 __JCR_END__
+ 38: 08048430 0 FUNC LOCAL DEFAULT 12 __do_global_ctors_aux
+ 39: 00000000 0 FILE LOCAL DEFAULT ABS hello.c
+ 40: 0804948c 0 NOTYPE LOCAL HIDDEN 16 __preinit_array_start
+ 41: 0804948c 0 NOTYPE LOCAL HIDDEN 16 __fini_array_end
+ 42: 0804956c 0 OBJECT LOCAL HIDDEN 21 _GLOBAL_OFFSET_TABLE_
+ 43: 0804948c 0 NOTYPE LOCAL HIDDEN 16 __preinit_array_end
+ 44: 0804948c 0 NOTYPE LOCAL HIDDEN 16 __fini_array_start
+ 45: 0804948c 0 NOTYPE LOCAL HIDDEN 16 __init_array_end
+ 46: 0804948c 0 NOTYPE LOCAL HIDDEN 16 __init_array_start
+ 47: 080494a0 0 OBJECT LOCAL HIDDEN 19 _DYNAMIC
+ 48: 08049584 0 NOTYPE WEAK DEFAULT 22 data_start
+ 49: 080483b0 5 FUNC GLOBAL DEFAULT 12 __libc_csu_fini
+ 50: 080482b0 0 FUNC GLOBAL DEFAULT 12 _start
+ 51: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
+ 52: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
+ 53: 08048474 4 OBJECT GLOBAL DEFAULT 14 _fp_hw
+ 54: 08048458 0 FUNC GLOBAL DEFAULT 13 _fini
+ 55: 00000000 415 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_
+ 56: 08048478 4 OBJECT GLOBAL DEFAULT 14 _IO_stdin_used
+ 57: 08049584 0 NOTYPE GLOBAL DEFAULT 22 __data_start
+ 58: 0804847c 0 OBJECT GLOBAL HIDDEN 14 __dso_handle
+ 59: 08049498 0 OBJECT GLOBAL HIDDEN 17 __DTOR_END__
+ 60: 080483c0 105 FUNC GLOBAL DEFAULT 12 __libc_csu_init
+ 61: 08049588 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ 62: 08049590 0 NOTYPE GLOBAL DEFAULT ABS _end
+ 63: 00000000 399 FUNC GLOBAL DEFAULT UND puts@@GLIBC_2.0
+ 64: 08049588 0 NOTYPE GLOBAL DEFAULT ABS _edata
+ 65: 08048429 0 FUNC GLOBAL HIDDEN 12 __i686.get_pc_thunk.bx
+ 66: 08048384 43 FUNC GLOBAL DEFAULT 12 main
+ 67: 0804824c 0 FUNC GLOBAL DEFAULT 10 _init
+
+Histogram for `.gnu.hash' bucket list length (total of 2 buckets):
+ Length Number % of total Coverage
+ 0 1 ( 50.0%)
+ 1 1 ( 50.0%) 100.0%
+
+Version symbols section '.gnu.version' contains 5 entries:
+ Addr: 0000000008048202 Offset: 0x000202 Link: 4 (.dynsym)
+ 000: 0 (*local*) 0 (*local*) 2 (GLIBC_2.0) 2 (GLIBC_2.0)
+ 004: 1 (*global*)
+
+Version needs section '.gnu.version_r' contains 1 entries:
+ Addr: 0x000000000804820c Offset: 0x00020c Link to section: 5 (.dynstr)
+ 000000: Version: 1 File: libc.so.6 Cnt: 1
+ 0x0010: Name: GLIBC_2.0 Flags: none Version: 2
+
+Notes at offset 0x00000128 with length 0x00000020:
+ Owner Data size Description
+ GNU 0x00000010 NT_VERSION (version)
diff --git a/utils/bcmregtool/elfio/elf_examples/hello_32_o.txt b/utils/bcmregtool/elfio/elf_examples/hello_32_o.txt
new file mode 100644
index 0000000..ccf7efb
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/hello_32_o.txt
@@ -0,0 +1,64 @@
+ELF Header:
+ Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
+ Class: ELF32
+ Data: 2's complement, little endian
+ Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: REL (Relocatable file)
+ Machine: Intel 80386
+ Version: 0x1
+ Entry point address: 0x0
+ Start of program headers: 0 (bytes into file)
+ Start of section headers: 232 (bytes into file)
+ Flags: 0x0
+ Size of this header: 52 (bytes)
+ Size of program headers: 0 (bytes)
+ Number of program headers: 0
+ Size of section headers: 40 (bytes)
+ Number of section headers: 11
+ Section header string table index: 8
+
+Section Headers:
+ [Nr] Name Type Addr Off Size ES Flg Lk Inf Al
+ [ 0] NULL 00000000 000000 000000 00 0 0 0
+ [ 1] .text PROGBITS 00000000 000034 00002b 00 AX 0 0 4
+ [ 2] .rel.text REL 00000000 000354 000010 08 9 1 4
+ [ 3] .data PROGBITS 00000000 000060 000000 00 WA 0 0 4
+ [ 4] .bss NOBITS 00000000 000060 000000 00 WA 0 0 4
+ [ 5] .rodata PROGBITS 00000000 000060 000006 00 A 0 0 1
+ [ 6] .comment PROGBITS 00000000 000066 00002e 00 0 0 1
+ [ 7] .note.GNU-stack PROGBITS 00000000 000094 000000 00 0 0 1
+ [ 8] .shstrtab STRTAB 00000000 000094 000051 00 0 0 1
+ [ 9] .symtab SYMTAB 00000000 0002a0 0000a0 10 10 8 4
+ [10] .strtab STRTAB 00000000 000340 000013 00 0 0 1
+Key to Flags:
+ W (write), A (alloc), X (execute), M (merge), S (strings)
+ I (info), L (link order), G (group), x (unknown)
+ O (extra OS processing required) o (OS specific), p (processor specific)
+
+There are no section groups in this file.
+
+There are no program headers in this file.
+
+Relocation section '.rel.text' at offset 0x354 contains 2 entries:
+ Offset Info Type Sym.Value Sym. Name
+00000014 00000501 R_386_32 00000000 .rodata
+00000019 00000902 R_386_PC32 00000000 puts
+
+There are no unwind sections in this file.
+
+Symbol table '.symtab' contains 10 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 00000000 0 FILE LOCAL DEFAULT ABS hello.c
+ 2: 00000000 0 SECTION LOCAL DEFAULT 1
+ 3: 00000000 0 SECTION LOCAL DEFAULT 3
+ 4: 00000000 0 SECTION LOCAL DEFAULT 4
+ 5: 00000000 0 SECTION LOCAL DEFAULT 5
+ 6: 00000000 0 SECTION LOCAL DEFAULT 7
+ 7: 00000000 0 SECTION LOCAL DEFAULT 6
+ 8: 00000000 43 FUNC GLOBAL DEFAULT 1 main
+ 9: 00000000 0 NOTYPE GLOBAL DEFAULT UND puts
+
+No version information found in this file.
diff --git a/utils/bcmregtool/elfio/elf_examples/hello_64 b/utils/bcmregtool/elfio/elf_examples/hello_64
new file mode 100644
index 0000000..c5130be
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/hello_64
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/hello_64.txt b/utils/bcmregtool/elfio/elf_examples/hello_64.txt
new file mode 100644
index 0000000..6597d9c
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/hello_64.txt
@@ -0,0 +1,244 @@
+ELF Header:
+ Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
+ Class: ELF64
+ Data: 2's complement, little endian
+ Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: EXEC (Executable file)
+ Machine: Advanced Micro Devices X86-64
+ Version: 0x1
+ Entry point address: 0x4003c0
+ Start of program headers: 64 (bytes into file)
+ Start of section headers: 2656 (bytes into file)
+ Flags: 0x0
+ Size of this header: 64 (bytes)
+ Size of program headers: 56 (bytes)
+ Number of program headers: 8
+ Size of section headers: 64 (bytes)
+ Number of section headers: 29
+ Section header string table index: 26
+
+Section Headers:
+ [Nr] Name Type Address Offset
+ Size EntSize Flags Link Info Align
+ [ 0] NULL 0000000000000000 00000000
+ 0000000000000000 0000000000000000 0 0 0
+ [ 1] .interp PROGBITS 0000000000400200 00000200
+ 000000000000001c 0000000000000000 A 0 0 1
+ [ 2] .note.ABI-tag NOTE 000000000040021c 0000021c
+ 0000000000000020 0000000000000000 A 0 0 4
+ [ 3] .gnu.hash GNU_HASH 0000000000400240 00000240
+ 000000000000001c 0000000000000000 A 4 0 8
+ [ 4] .dynsym DYNSYM 0000000000400260 00000260
+ 0000000000000060 0000000000000018 A 5 1 8
+ [ 5] .dynstr STRTAB 00000000004002c0 000002c0
+ 000000000000003d 0000000000000000 A 0 0 1
+ [ 6] .gnu.version VERSYM 00000000004002fe 000002fe
+ 0000000000000008 0000000000000002 A 4 0 2
+ [ 7] .gnu.version_r VERNEED 0000000000400308 00000308
+ 0000000000000020 0000000000000000 A 5 1 8
+ [ 8] .rela.dyn RELA 0000000000400328 00000328
+ 0000000000000018 0000000000000018 A 4 0 8
+ [ 9] .rela.plt RELA 0000000000400340 00000340
+ 0000000000000030 0000000000000018 A 4 11 8
+ [10] .init PROGBITS 0000000000400370 00000370
+ 0000000000000018 0000000000000000 AX 0 0 4
+ [11] .plt PROGBITS 0000000000400388 00000388
+ 0000000000000030 0000000000000010 AX 0 0 4
+ [12] .text PROGBITS 00000000004003c0 000003c0
+ 00000000000001c8 0000000000000000 AX 0 0 16
+ [13] .fini PROGBITS 0000000000400588 00000588
+ 000000000000000e 0000000000000000 AX 0 0 4
+ [14] .rodata PROGBITS 0000000000400598 00000598
+ 0000000000000016 0000000000000000 A 0 0 8
+ [15] .eh_frame_hdr PROGBITS 00000000004005b0 000005b0
+ 0000000000000024 0000000000000000 A 0 0 4
+ [16] .eh_frame PROGBITS 00000000004005d8 000005d8
+ 0000000000000094 0000000000000000 A 0 0 8
+ [17] .ctors PROGBITS 0000000000600670 00000670
+ 0000000000000010 0000000000000000 WA 0 0 8
+ [18] .dtors PROGBITS 0000000000600680 00000680
+ 0000000000000010 0000000000000000 WA 0 0 8
+ [19] .jcr PROGBITS 0000000000600690 00000690
+ 0000000000000008 0000000000000000 WA 0 0 8
+ [20] .dynamic DYNAMIC 0000000000600698 00000698
+ 0000000000000190 0000000000000010 WA 5 0 8
+ [21] .got PROGBITS 0000000000600828 00000828
+ 0000000000000008 0000000000000008 WA 0 0 8
+ [22] .got.plt PROGBITS 0000000000600830 00000830
+ 0000000000000028 0000000000000008 WA 0 0 8
+ [23] .data PROGBITS 0000000000600858 00000858
+ 0000000000000004 0000000000000000 WA 0 0 4
+ [24] .bss NOBITS 0000000000600860 0000085c
+ 0000000000000010 0000000000000000 WA 0 0 8
+ [25] .comment PROGBITS 0000000000000000 0000085c
+ 0000000000000114 0000000000000000 0 0 1
+ [26] .shstrtab STRTAB 0000000000000000 00000970
+ 00000000000000eb 0000000000000000 0 0 1
+ [27] .symtab SYMTAB 0000000000000000 000011a0
+ 0000000000000648 0000000000000018 28 49 8
+ [28] .strtab STRTAB 0000000000000000 000017e8
+ 000000000000023f 0000000000000000 0 0 1
+Key to Flags:
+ W (write), A (alloc), X (execute), M (merge), S (strings)
+ I (info), L (link order), G (group), x (unknown)
+ O (extra OS processing required) o (OS specific), p (processor specific)
+
+There are no section groups in this file.
+
+Program Headers:
+ Type Offset VirtAddr PhysAddr
+ FileSiz MemSiz Flags Align
+ PHDR 0x0000000000000040 0x0000000000400040 0x0000000000400040
+ 0x00000000000001c0 0x00000000000001c0 R E 8
+ INTERP 0x0000000000000200 0x0000000000400200 0x0000000000400200
+ 0x000000000000001c 0x000000000000001c R 1
+ [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
+ LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
+ 0x000000000000066c 0x000000000000066c R E 200000
+ LOAD 0x0000000000000670 0x0000000000600670 0x0000000000600670
+ 0x00000000000001ec 0x0000000000000200 RW 200000
+ DYNAMIC 0x0000000000000698 0x0000000000600698 0x0000000000600698
+ 0x0000000000000190 0x0000000000000190 RW 8
+ NOTE 0x000000000000021c 0x000000000040021c 0x000000000040021c
+ 0x0000000000000020 0x0000000000000020 R 4
+ GNU_EH_FRAME 0x00000000000005b0 0x00000000004005b0 0x00000000004005b0
+ 0x0000000000000024 0x0000000000000024 R 4
+ GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
+ 0x0000000000000000 0x0000000000000000 RW 8
+
+ Section to Segment mapping:
+ Segment Sections...
+ 00
+ 01 .interp
+ 02 .interp .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame
+ 03 .ctors .dtors .jcr .dynamic .got .got.plt .data .bss
+ 04 .dynamic
+ 05 .note.ABI-tag
+ 06 .eh_frame_hdr
+ 07
+
+Dynamic section at offset 0x698 contains 20 entries:
+ Tag Type Name/Value
+ 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
+ 0x000000000000000c (INIT) 0x400370
+ 0x000000000000000d (FINI) 0x400588
+ 0x000000006ffffef5 (GNU_HASH) 0x400240
+ 0x0000000000000005 (STRTAB) 0x4002c0
+ 0x0000000000000006 (SYMTAB) 0x400260
+ 0x000000000000000a (STRSZ) 61 (bytes)
+ 0x000000000000000b (SYMENT) 24 (bytes)
+ 0x0000000000000015 (DEBUG) 0x0
+ 0x0000000000000003 (PLTGOT) 0x600830
+ 0x0000000000000002 (PLTRELSZ) 48 (bytes)
+ 0x0000000000000014 (PLTREL) RELA
+ 0x0000000000000017 (JMPREL) 0x400340
+ 0x0000000000000007 (RELA) 0x400328
+ 0x0000000000000008 (RELASZ) 24 (bytes)
+ 0x0000000000000009 (RELAENT) 24 (bytes)
+ 0x000000006ffffffe (VERNEED) 0x400308
+ 0x000000006fffffff (VERNEEDNUM) 1
+ 0x000000006ffffff0 (VERSYM) 0x4002fe
+ 0x0000000000000000 (NULL) 0x0
+
+Relocation section '.rela.dyn' at offset 0x328 contains 1 entries:
+ Offset Info Type Sym. Value Sym. Name + Addend
+000000600828 000100000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0
+
+Relocation section '.rela.plt' at offset 0x340 contains 2 entries:
+ Offset Info Type Sym. Value Sym. Name + Addend
+000000600848 000200000007 R_X86_64_JUMP_SLO 0000000000000000 puts + 0
+000000600850 000300000007 R_X86_64_JUMP_SLO 0000000000000000 __libc_start_main + 0
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains 4 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
+ 2: 0000000000000000 396 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.2.5 (2)
+ 3: 0000000000000000 421 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 (2)
+
+Symbol table '.symtab' contains 67 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 0000000000400200 0 SECTION LOCAL DEFAULT 1
+ 2: 000000000040021c 0 SECTION LOCAL DEFAULT 2
+ 3: 0000000000400240 0 SECTION LOCAL DEFAULT 3
+ 4: 0000000000400260 0 SECTION LOCAL DEFAULT 4
+ 5: 00000000004002c0 0 SECTION LOCAL DEFAULT 5
+ 6: 00000000004002fe 0 SECTION LOCAL DEFAULT 6
+ 7: 0000000000400308 0 SECTION LOCAL DEFAULT 7
+ 8: 0000000000400328 0 SECTION LOCAL DEFAULT 8
+ 9: 0000000000400340 0 SECTION LOCAL DEFAULT 9
+ 10: 0000000000400370 0 SECTION LOCAL DEFAULT 10
+ 11: 0000000000400388 0 SECTION LOCAL DEFAULT 11
+ 12: 00000000004003c0 0 SECTION LOCAL DEFAULT 12
+ 13: 0000000000400588 0 SECTION LOCAL DEFAULT 13
+ 14: 0000000000400598 0 SECTION LOCAL DEFAULT 14
+ 15: 00000000004005b0 0 SECTION LOCAL DEFAULT 15
+ 16: 00000000004005d8 0 SECTION LOCAL DEFAULT 16
+ 17: 0000000000600670 0 SECTION LOCAL DEFAULT 17
+ 18: 0000000000600680 0 SECTION LOCAL DEFAULT 18
+ 19: 0000000000600690 0 SECTION LOCAL DEFAULT 19
+ 20: 0000000000600698 0 SECTION LOCAL DEFAULT 20
+ 21: 0000000000600828 0 SECTION LOCAL DEFAULT 21
+ 22: 0000000000600830 0 SECTION LOCAL DEFAULT 22
+ 23: 0000000000600858 0 SECTION LOCAL DEFAULT 23
+ 24: 0000000000600860 0 SECTION LOCAL DEFAULT 24
+ 25: 0000000000000000 0 SECTION LOCAL DEFAULT 25
+ 26: 00000000004003ec 0 FUNC LOCAL DEFAULT 12 call_gmon_start
+ 27: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
+ 28: 0000000000600670 0 OBJECT LOCAL DEFAULT 17 __CTOR_LIST__
+ 29: 0000000000600680 0 OBJECT LOCAL DEFAULT 18 __DTOR_LIST__
+ 30: 0000000000600690 0 OBJECT LOCAL DEFAULT 19 __JCR_LIST__
+ 31: 0000000000600860 8 OBJECT LOCAL DEFAULT 24 dtor_idx.6147
+ 32: 0000000000600868 1 OBJECT LOCAL DEFAULT 24 completed.6145
+ 33: 0000000000400410 0 FUNC LOCAL DEFAULT 12 __do_global_dtors_aux
+ 34: 0000000000400470 0 FUNC LOCAL DEFAULT 12 frame_dummy
+ 35: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
+ 36: 0000000000600678 0 OBJECT LOCAL DEFAULT 17 __CTOR_END__
+ 37: 0000000000400668 0 OBJECT LOCAL DEFAULT 16 __FRAME_END__
+ 38: 0000000000600690 0 OBJECT LOCAL DEFAULT 19 __JCR_END__
+ 39: 0000000000400550 0 FUNC LOCAL DEFAULT 12 __do_global_ctors_aux
+ 40: 0000000000000000 0 FILE LOCAL DEFAULT ABS hello.c
+ 41: 000000000060066c 0 NOTYPE LOCAL HIDDEN 17 __preinit_array_start
+ 42: 000000000060066c 0 NOTYPE LOCAL HIDDEN 17 __fini_array_end
+ 43: 0000000000600830 0 OBJECT LOCAL HIDDEN 22 _GLOBAL_OFFSET_TABLE_
+ 44: 000000000060066c 0 NOTYPE LOCAL HIDDEN 17 __preinit_array_end
+ 45: 000000000060066c 0 NOTYPE LOCAL HIDDEN 17 __fini_array_start
+ 46: 000000000060066c 0 NOTYPE LOCAL HIDDEN 17 __init_array_end
+ 47: 000000000060066c 0 NOTYPE LOCAL HIDDEN 17 __init_array_start
+ 48: 0000000000600698 0 OBJECT LOCAL HIDDEN 20 _DYNAMIC
+ 49: 0000000000600858 0 NOTYPE WEAK DEFAULT 23 data_start
+ 50: 00000000004004b0 2 FUNC GLOBAL DEFAULT 12 __libc_csu_fini
+ 51: 00000000004003c0 0 FUNC GLOBAL DEFAULT 12 _start
+ 52: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
+ 53: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
+ 54: 0000000000000000 396 FUNC GLOBAL DEFAULT UND puts@@GLIBC_2.2.5
+ 55: 0000000000400588 0 FUNC GLOBAL DEFAULT 13 _fini
+ 56: 0000000000000000 421 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_
+ 57: 0000000000400598 4 OBJECT GLOBAL DEFAULT 14 _IO_stdin_used
+ 58: 0000000000600858 0 NOTYPE GLOBAL DEFAULT 23 __data_start
+ 59: 00000000004005a0 0 OBJECT GLOBAL HIDDEN 14 __dso_handle
+ 60: 0000000000600688 0 OBJECT GLOBAL HIDDEN 18 __DTOR_END__
+ 61: 00000000004004c0 139 FUNC GLOBAL DEFAULT 12 __libc_csu_init
+ 62: 000000000060085c 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ 63: 0000000000600870 0 NOTYPE GLOBAL DEFAULT ABS _end
+ 64: 000000000060085c 0 NOTYPE GLOBAL DEFAULT ABS _edata
+ 65: 0000000000400498 21 FUNC GLOBAL DEFAULT 12 main
+ 66: 0000000000400370 0 FUNC GLOBAL DEFAULT 10 _init
+
+Version symbols section '.gnu.version' contains 4 entries:
+ Addr: 00000000004002fe Offset: 0x0002fe Link: 4 (.dynsym)
+ 000: 0 (*local*) 0 (*local*) 2 (GLIBC_2.2.5) 2 (GLIBC_2.2.5)
+
+Version needs section '.gnu.version_r' contains 1 entries:
+ Addr: 0x0000000000400308 Offset: 0x000308 Link to section: 5 (.dynstr)
+ 000000: Version: 1 File: libc.so.6 Cnt: 1
+ 0x0010: Name: GLIBC_2.2.5 Flags: none Version: 2
+
+Notes at offset 0x0000021c with length 0x00000020:
+ Owner Data size Description
+ GNU 0x00000010 NT_VERSION (version)
diff --git a/utils/bcmregtool/elfio/elf_examples/hello_64_o.txt b/utils/bcmregtool/elfio/elf_examples/hello_64_o.txt
new file mode 100644
index 0000000..4dfda23
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/hello_64_o.txt
@@ -0,0 +1,85 @@
+ELF Header:
+ Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
+ Class: ELF64
+ Data: 2's complement, little endian
+ Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: REL (Relocatable file)
+ Machine: Advanced Micro Devices X86-64
+ Version: 0x1
+ Entry point address: 0x0
+ Start of program headers: 0 (bytes into file)
+ Start of section headers: 296 (bytes into file)
+ Flags: 0x0
+ Size of this header: 64 (bytes)
+ Size of program headers: 0 (bytes)
+ Number of program headers: 0
+ Size of section headers: 64 (bytes)
+ Number of section headers: 13
+ Section header string table index: 10
+
+Section Headers:
+ [Nr] Name Type Address Offset
+ Size EntSize Flags Link Info Align
+ [ 0] NULL 0000000000000000 00000000
+ 0000000000000000 0000000000000000 0 0 0
+ [ 1] .text PROGBITS 0000000000000000 00000040
+ 0000000000000015 0000000000000000 AX 0 0 4
+ [ 2] .rela.text RELA 0000000000000000 00000588
+ 0000000000000030 0000000000000018 11 1 8
+ [ 3] .data PROGBITS 0000000000000000 00000058
+ 0000000000000000 0000000000000000 WA 0 0 4
+ [ 4] .bss NOBITS 0000000000000000 00000058
+ 0000000000000000 0000000000000000 WA 0 0 4
+ [ 5] .rodata PROGBITS 0000000000000000 00000058
+ 0000000000000006 0000000000000000 A 0 0 1
+ [ 6] .eh_frame PROGBITS 0000000000000000 00000060
+ 0000000000000038 0000000000000000 A 0 0 8
+ [ 7] .rela.eh_frame RELA 0000000000000000 000005b8
+ 0000000000000018 0000000000000018 11 6 8
+ [ 8] .comment PROGBITS 0000000000000000 00000098
+ 000000000000002e 0000000000000000 0 0 1
+ [ 9] .note.GNU-stack PROGBITS 0000000000000000 000000c6
+ 0000000000000000 0000000000000000 0 0 1
+ [10] .shstrtab STRTAB 0000000000000000 000000c6
+ 0000000000000061 0000000000000000 0 0 1
+ [11] .symtab SYMTAB 0000000000000000 00000468
+ 0000000000000108 0000000000000018 12 9 8
+ [12] .strtab STRTAB 0000000000000000 00000570
+ 0000000000000013 0000000000000000 0 0 1
+Key to Flags:
+ W (write), A (alloc), X (execute), M (merge), S (strings)
+ I (info), L (link order), G (group), x (unknown)
+ O (extra OS processing required) o (OS specific), p (processor specific)
+
+There are no section groups in this file.
+
+There are no program headers in this file.
+
+Relocation section '.rela.text' at offset 0x588 contains 2 entries:
+ Offset Info Type Sym. Value Sym. Name + Addend
+000000000005 00050000000a R_X86_64_32 0000000000000000 .rodata + 0
+00000000000a 000a00000002 R_X86_64_PC32 0000000000000000 puts + fffffffffffffffc
+
+Relocation section '.rela.eh_frame' at offset 0x5b8 contains 1 entries:
+ Offset Info Type Sym. Value Sym. Name + Addend
+000000000020 00020000000a R_X86_64_32 0000000000000000 .text + 0
+
+There are no unwind sections in this file.
+
+Symbol table '.symtab' contains 11 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS hello.c
+ 2: 0000000000000000 0 SECTION LOCAL DEFAULT 1
+ 3: 0000000000000000 0 SECTION LOCAL DEFAULT 3
+ 4: 0000000000000000 0 SECTION LOCAL DEFAULT 4
+ 5: 0000000000000000 0 SECTION LOCAL DEFAULT 5
+ 6: 0000000000000000 0 SECTION LOCAL DEFAULT 6
+ 7: 0000000000000000 0 SECTION LOCAL DEFAULT 9
+ 8: 0000000000000000 0 SECTION LOCAL DEFAULT 8
+ 9: 0000000000000000 21 FUNC GLOBAL DEFAULT 1 main
+ 10: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND puts
+
+No version information found in this file.
diff --git a/utils/bcmregtool/elfio/elf_examples/hello_arm b/utils/bcmregtool/elfio/elf_examples/hello_arm
new file mode 100644
index 0000000..36e49a5
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/hello_arm
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/hello_arm_stripped b/utils/bcmregtool/elfio/elf_examples/hello_arm_stripped
new file mode 100644
index 0000000..d8abbc0
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/hello_arm_stripped
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/libfunc.so b/utils/bcmregtool/elfio/elf_examples/libfunc.so
new file mode 100644
index 0000000..8377027
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/libfunc.so
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/libfunc32.so b/utils/bcmregtool/elfio/elf_examples/libfunc32.so
new file mode 100644
index 0000000..eaa6826
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/libfunc32.so
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/ls b/utils/bcmregtool/elfio/elf_examples/ls
new file mode 100644
index 0000000..299b099
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/ls
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/ls.readelf b/utils/bcmregtool/elfio/elf_examples/ls.readelf
new file mode 100644
index 0000000..f4380d1
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/ls.readelf
@@ -0,0 +1,462 @@
+ELF Header:
+ Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
+ Class: ELF64
+ Data: 2's complement, little endian
+ Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: EXEC (Executable file)
+ Machine: Advanced Micro Devices X86-64
+ Version: 0x1
+ Entry point address: 0x4045a4
+ Start of program headers: 64 (bytes into file)
+ Start of section headers: 104048 (bytes into file)
+ Flags: 0x0
+ Size of this header: 64 (bytes)
+ Size of program headers: 56 (bytes)
+ Number of program headers: 9
+ Size of section headers: 64 (bytes)
+ Number of section headers: 28
+ Section header string table index: 27
+
+Section Headers:
+ [Nr] Name Type Address Offset
+ Size EntSize Flags Link Info Align
+ [ 0] NULL 0000000000000000 00000000
+ 0000000000000000 0000000000000000 0 0 0
+ [ 1] .interp PROGBITS 0000000000400238 00000238
+ 000000000000001c 0000000000000000 A 0 0 1
+ [ 2] .note.ABI-tag NOTE 0000000000400254 00000254
+ 0000000000000020 0000000000000000 A 0 0 4
+ [ 3] .note.gnu.build-i NOTE 0000000000400274 00000274
+ 0000000000000024 0000000000000000 A 0 0 4
+ [ 4] .gnu.hash GNU_HASH 0000000000400298 00000298
+ 0000000000000068 0000000000000000 A 5 0 8
+ [ 5] .dynsym DYNSYM 0000000000400300 00000300
+ 0000000000000b58 0000000000000018 A 6 1 8
+ [ 6] .dynstr STRTAB 0000000000400e58 00000e58
+ 0000000000000551 0000000000000000 A 0 0 1
+ [ 7] .gnu.version VERSYM 00000000004013aa 000013aa
+ 00000000000000f2 0000000000000002 A 5 0 2
+ [ 8] .gnu.version_r VERNEED 00000000004014a0 000014a0
+ 00000000000000b0 0000000000000000 A 6 3 8
+ [ 9] .rela.dyn RELA 0000000000401550 00001550
+ 00000000000000a8 0000000000000018 A 5 0 8
+ [10] .rela.plt RELA 00000000004015f8 000015f8
+ 00000000000009d8 0000000000000018 A 5 12 8
+ [11] .init PROGBITS 0000000000401fd0 00001fd0
+ 0000000000000018 0000000000000000 AX 0 0 4
+ [12] .plt PROGBITS 0000000000401ff0 00001ff0
+ 00000000000006a0 0000000000000010 AX 0 0 16
+ [13] .text PROGBITS 0000000000402690 00002690
+ 000000000000f168 0000000000000000 AX 0 0 16
+ [14] .fini PROGBITS 00000000004117f8 000117f8
+ 000000000000000e 0000000000000000 AX 0 0 4
+ [15] .rodata PROGBITS 0000000000411820 00011820
+ 0000000000004f73 0000000000000000 A 0 0 32
+ [16] .eh_frame_hdr PROGBITS 0000000000416794 00016794
+ 00000000000006c4 0000000000000000 A 0 0 4
+ [17] .eh_frame PROGBITS 0000000000416e58 00016e58
+ 0000000000001f34 0000000000000000 A 0 0 8
+ [18] .ctors PROGBITS 0000000000618df0 00018df0
+ 0000000000000010 0000000000000000 WA 0 0 8
+ [19] .dtors PROGBITS 0000000000618e00 00018e00
+ 0000000000000010 0000000000000000 WA 0 0 8
+ [20] .jcr PROGBITS 0000000000618e10 00018e10
+ 0000000000000008 0000000000000000 WA 0 0 8
+ [21] .dynamic DYNAMIC 0000000000618e18 00018e18
+ 00000000000001c0 0000000000000010 WA 6 0 8
+ [22] .got PROGBITS 0000000000618fd8 00018fd8
+ 0000000000000010 0000000000000008 WA 0 0 8
+ [23] .got.plt PROGBITS 0000000000618fe8 00018fe8
+ 0000000000000360 0000000000000008 WA 0 0 8
+ [24] .data PROGBITS 0000000000619360 00019360
+ 0000000000000210 0000000000000000 WA 0 0 32
+ [25] .bss NOBITS 0000000000619580 00019570
+ 0000000000000d60 0000000000000000 WA 0 0 32
+ [26] .gnu_debuglink PROGBITS 0000000000000000 00019570
+ 0000000000000008 0000000000000000 0 0 1
+ [27] .shstrtab STRTAB 0000000000000000 00019578
+ 00000000000000f4 0000000000000000 0 0 1
+Key to Flags:
+ W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
+ I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
+ O (extra OS processing required) o (OS specific), p (processor specific)
+
+There are no section groups in this file.
+
+Program Headers:
+ Type Offset VirtAddr PhysAddr
+ FileSiz MemSiz Flags Align
+ PHDR 0x0000000000000040 0x0000000000400040 0x0000000000400040
+ 0x00000000000001f8 0x00000000000001f8 R E 8
+ INTERP 0x0000000000000238 0x0000000000400238 0x0000000000400238
+ 0x000000000000001c 0x000000000000001c R 1
+ [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
+ LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
+ 0x0000000000018d8c 0x0000000000018d8c R E 200000
+ LOAD 0x0000000000018df0 0x0000000000618df0 0x0000000000618df0
+ 0x0000000000000780 0x00000000000014f0 RW 200000
+ DYNAMIC 0x0000000000018e18 0x0000000000618e18 0x0000000000618e18
+ 0x00000000000001c0 0x00000000000001c0 RW 8
+ NOTE 0x0000000000000254 0x0000000000400254 0x0000000000400254
+ 0x0000000000000044 0x0000000000000044 R 4
+ GNU_EH_FRAME 0x0000000000016794 0x0000000000416794 0x0000000000416794
+ 0x00000000000006c4 0x00000000000006c4 R 4
+ GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
+ 0x0000000000000000 0x0000000000000000 RW 8
+ GNU_RELRO 0x0000000000018df0 0x0000000000618df0 0x0000000000618df0
+ 0x0000000000000210 0x0000000000000210 R 1
+
+ Section to Segment mapping:
+ Segment Sections...
+ 00
+ 01 .interp
+ 02 .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame
+ 03 .ctors .dtors .jcr .dynamic .got .got.plt .data .bss
+ 04 .dynamic
+ 05 .note.ABI-tag .note.gnu.build-id
+ 06 .eh_frame_hdr
+ 07
+ 08 .ctors .dtors .jcr .dynamic .got
+
+Dynamic section at offset 0x18e18 contains 23 entries:
+ Tag Type Name/Value
+ 0x0000000000000001 (NEEDED) Shared library: [libselinux.so.1]
+ 0x0000000000000001 (NEEDED) Shared library: [librt.so.1]
+ 0x0000000000000001 (NEEDED) Shared library: [libacl.so.1]
+ 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
+ 0x000000000000000c (INIT) 0x401fd0
+ 0x000000000000000d (FINI) 0x4117f8
+ 0x000000006ffffef5 (GNU_HASH) 0x400298
+ 0x0000000000000005 (STRTAB) 0x400e58
+ 0x0000000000000006 (SYMTAB) 0x400300
+ 0x000000000000000a (STRSZ) 1361 (bytes)
+ 0x000000000000000b (SYMENT) 24 (bytes)
+ 0x0000000000000015 (DEBUG) 0x0
+ 0x0000000000000003 (PLTGOT) 0x618fe8
+ 0x0000000000000002 (PLTRELSZ) 2520 (bytes)
+ 0x0000000000000014 (PLTREL) RELA
+ 0x0000000000000017 (JMPREL) 0x4015f8
+ 0x0000000000000007 (RELA) 0x401550
+ 0x0000000000000008 (RELASZ) 168 (bytes)
+ 0x0000000000000009 (RELAENT) 24 (bytes)
+ 0x000000006ffffffe (VERNEED) 0x4014a0
+ 0x000000006fffffff (VERNEEDNUM) 3
+ 0x000000006ffffff0 (VERSYM) 0x4013aa
+ 0x0000000000000000 (NULL) 0x0
+
+Relocation section '.rela.dyn' at offset 0x1550 contains 7 entries:
+ Offset Info Type Sym. Value Sym. Name + Addend
+000000618fd8 003d00000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0
+000000619580 006d00000005 R_X86_64_COPY 0000000000619580 __progname + 0
+000000619590 006a00000005 R_X86_64_COPY 0000000000619590 stdout + 0
+0000006195a0 007600000005 R_X86_64_COPY 00000000006195a0 optind + 0
+0000006195a8 007800000005 R_X86_64_COPY 00000000006195a8 optarg + 0
+0000006195b0 007200000005 R_X86_64_COPY 00000000006195b0 __progname_full + 0
+0000006195b8 007500000005 R_X86_64_COPY 00000000006195b8 stderr + 0
+
+Relocation section '.rela.plt' at offset 0x15f8 contains 105 entries:
+ Offset Info Type Sym. Value Sym. Name + Addend
+000000619000 000100000007 R_X86_64_JUMP_SLO 0000000000000000 __ctype_toupper_loc + 0
+000000619008 000200000007 R_X86_64_JUMP_SLO 0000000000000000 getenv + 0
+000000619010 000300000007 R_X86_64_JUMP_SLO 0000000000000000 sigprocmask + 0
+000000619018 000400000007 R_X86_64_JUMP_SLO 0000000000000000 raise + 0
+000000619020 006e00000007 R_X86_64_JUMP_SLO 0000000000402040 free + 0
+000000619028 000500000007 R_X86_64_JUMP_SLO 0000000000000000 localtime + 0
+000000619030 000600000007 R_X86_64_JUMP_SLO 0000000000000000 __mempcpy_chk + 0
+000000619038 000700000007 R_X86_64_JUMP_SLO 0000000000000000 abort + 0
+000000619040 000800000007 R_X86_64_JUMP_SLO 0000000000000000 __errno_location + 0
+000000619048 000900000007 R_X86_64_JUMP_SLO 0000000000000000 strncpy + 0
+000000619050 000a00000007 R_X86_64_JUMP_SLO 0000000000000000 strncmp + 0
+000000619058 000b00000007 R_X86_64_JUMP_SLO 0000000000000000 _exit + 0
+000000619060 000c00000007 R_X86_64_JUMP_SLO 0000000000000000 strcpy + 0
+000000619068 000d00000007 R_X86_64_JUMP_SLO 0000000000000000 __fpending + 0
+000000619070 000e00000007 R_X86_64_JUMP_SLO 0000000000000000 isatty + 0
+000000619078 000f00000007 R_X86_64_JUMP_SLO 0000000000000000 sigaction + 0
+000000619080 001000000007 R_X86_64_JUMP_SLO 0000000000000000 iswcntrl + 0
+000000619088 001100000007 R_X86_64_JUMP_SLO 0000000000000000 wcswidth + 0
+000000619090 001200000007 R_X86_64_JUMP_SLO 0000000000000000 localeconv + 0
+000000619098 001300000007 R_X86_64_JUMP_SLO 0000000000000000 mbstowcs + 0
+0000006190a0 001400000007 R_X86_64_JUMP_SLO 0000000000000000 readlink + 0
+0000006190a8 001500000007 R_X86_64_JUMP_SLO 0000000000000000 textdomain + 0
+0000006190b0 001600000007 R_X86_64_JUMP_SLO 0000000000000000 fclose + 0
+0000006190b8 001700000007 R_X86_64_JUMP_SLO 0000000000000000 opendir + 0
+0000006190c0 001800000007 R_X86_64_JUMP_SLO 0000000000000000 getpwuid + 0
+0000006190c8 001900000007 R_X86_64_JUMP_SLO 0000000000000000 bindtextdomain + 0
+0000006190d0 001a00000007 R_X86_64_JUMP_SLO 0000000000000000 stpcpy + 0
+0000006190d8 001b00000007 R_X86_64_JUMP_SLO 0000000000000000 dcgettext + 0
+0000006190e0 001c00000007 R_X86_64_JUMP_SLO 0000000000000000 __ctype_get_mb_cur_max + 0
+0000006190e8 001d00000007 R_X86_64_JUMP_SLO 0000000000000000 strlen + 0
+0000006190f0 001e00000007 R_X86_64_JUMP_SLO 0000000000000000 __lxstat + 0
+0000006190f8 001f00000007 R_X86_64_JUMP_SLO 0000000000000000 __stack_chk_fail + 0
+000000619100 002000000007 R_X86_64_JUMP_SLO 0000000000000000 getopt_long + 0
+000000619108 002100000007 R_X86_64_JUMP_SLO 0000000000000000 mbrtowc + 0
+000000619110 002200000007 R_X86_64_JUMP_SLO 0000000000000000 strchr + 0
+000000619118 002300000007 R_X86_64_JUMP_SLO 0000000000000000 getgrgid + 0
+000000619120 002400000007 R_X86_64_JUMP_SLO 0000000000000000 _obstack_begin + 0
+000000619128 002500000007 R_X86_64_JUMP_SLO 0000000000000000 __overflow + 0
+000000619130 002600000007 R_X86_64_JUMP_SLO 0000000000000000 strrchr + 0
+000000619138 002700000007 R_X86_64_JUMP_SLO 0000000000000000 fgetfilecon + 0
+000000619140 002800000007 R_X86_64_JUMP_SLO 0000000000000000 lseek + 0
+000000619148 002900000007 R_X86_64_JUMP_SLO 0000000000000000 gettimeofday + 0
+000000619150 002a00000007 R_X86_64_JUMP_SLO 0000000000000000 __assert_fail + 0
+000000619158 002b00000007 R_X86_64_JUMP_SLO 0000000000000000 __strtoul_internal + 0
+000000619160 002c00000007 R_X86_64_JUMP_SLO 0000000000000000 fnmatch + 0
+000000619168 002d00000007 R_X86_64_JUMP_SLO 0000000000000000 memset + 0
+000000619170 002e00000007 R_X86_64_JUMP_SLO 0000000000000000 acl_get_tag_type + 0
+000000619178 002f00000007 R_X86_64_JUMP_SLO 0000000000000000 ioctl + 0
+000000619180 003000000007 R_X86_64_JUMP_SLO 0000000000000000 closedir + 0
+000000619188 003100000007 R_X86_64_JUMP_SLO 0000000000000000 __libc_start_main + 0
+000000619190 003200000007 R_X86_64_JUMP_SLO 0000000000000000 memcmp + 0
+000000619198 003300000007 R_X86_64_JUMP_SLO 0000000000000000 _setjmp + 0
+0000006191a0 003400000007 R_X86_64_JUMP_SLO 0000000000000000 fputs_unlocked + 0
+0000006191a8 003500000007 R_X86_64_JUMP_SLO 0000000000000000 calloc + 0
+0000006191b0 003600000007 R_X86_64_JUMP_SLO 0000000000000000 lgetfilecon + 0
+0000006191b8 003700000007 R_X86_64_JUMP_SLO 0000000000000000 strcmp + 0
+0000006191c0 003800000007 R_X86_64_JUMP_SLO 0000000000000000 signal + 0
+0000006191c8 003900000007 R_X86_64_JUMP_SLO 0000000000000000 dirfd + 0
+0000006191d0 003a00000007 R_X86_64_JUMP_SLO 0000000000000000 getpwnam + 0
+0000006191d8 003b00000007 R_X86_64_JUMP_SLO 0000000000000000 __memcpy_chk + 0
+0000006191e0 003c00000007 R_X86_64_JUMP_SLO 0000000000000000 sigemptyset + 0
+0000006191e8 003e00000007 R_X86_64_JUMP_SLO 0000000000000000 memcpy + 0
+0000006191f0 003f00000007 R_X86_64_JUMP_SLO 0000000000000000 getgrnam + 0
+0000006191f8 004000000007 R_X86_64_JUMP_SLO 0000000000000000 getfilecon + 0
+000000619200 004100000007 R_X86_64_JUMP_SLO 0000000000000000 fileno + 0
+000000619208 004200000007 R_X86_64_JUMP_SLO 0000000000000000 tcgetpgrp + 0
+000000619210 004300000007 R_X86_64_JUMP_SLO 0000000000000000 __xstat + 0
+000000619218 004400000007 R_X86_64_JUMP_SLO 0000000000000000 readdir + 0
+000000619220 004500000007 R_X86_64_JUMP_SLO 0000000000000000 wcwidth + 0
+000000619228 007000000007 R_X86_64_JUMP_SLO 0000000000402450 malloc + 0
+000000619230 004600000007 R_X86_64_JUMP_SLO 0000000000000000 fflush + 0
+000000619238 004700000007 R_X86_64_JUMP_SLO 0000000000000000 nl_langinfo + 0
+000000619240 004800000007 R_X86_64_JUMP_SLO 0000000000000000 __fxstat + 0
+000000619248 004900000007 R_X86_64_JUMP_SLO 0000000000000000 clock_gettime + 0
+000000619250 004a00000007 R_X86_64_JUMP_SLO 0000000000000000 strcoll + 0
+000000619258 004b00000007 R_X86_64_JUMP_SLO 0000000000000000 mktime + 0
+000000619260 004c00000007 R_X86_64_JUMP_SLO 0000000000000000 __freading + 0
+000000619268 004d00000007 R_X86_64_JUMP_SLO 0000000000000000 fwrite_unlocked + 0
+000000619270 004e00000007 R_X86_64_JUMP_SLO 0000000000000000 acl_get_entry + 0
+000000619278 004f00000007 R_X86_64_JUMP_SLO 0000000000000000 realloc + 0
+000000619280 005000000007 R_X86_64_JUMP_SLO 0000000000000000 setlocale + 0
+000000619288 005100000007 R_X86_64_JUMP_SLO 0000000000000000 _obstack_newchunk + 0
+000000619290 005200000007 R_X86_64_JUMP_SLO 0000000000000000 __printf_chk + 0
+000000619298 005300000007 R_X86_64_JUMP_SLO 0000000000000000 strftime + 0
+0000006192a0 005400000007 R_X86_64_JUMP_SLO 0000000000000000 mempcpy + 0
+0000006192a8 005500000007 R_X86_64_JUMP_SLO 0000000000000000 memmove + 0
+0000006192b0 005600000007 R_X86_64_JUMP_SLO 0000000000000000 error + 0
+0000006192b8 005700000007 R_X86_64_JUMP_SLO 0000000000000000 acl_extended_file_nofo + 0
+0000006192c0 005800000007 R_X86_64_JUMP_SLO 0000000000000000 fseeko + 0
+0000006192c8 005a00000007 R_X86_64_JUMP_SLO 0000000000000000 strtoul + 0
+0000006192d0 005b00000007 R_X86_64_JUMP_SLO 0000000000000000 __cxa_atexit + 0
+0000006192d8 005c00000007 R_X86_64_JUMP_SLO 0000000000000000 wcstombs + 0
+0000006192e0 005d00000007 R_X86_64_JUMP_SLO 0000000000000000 freecon + 0
+0000006192e8 005e00000007 R_X86_64_JUMP_SLO 0000000000000000 sigismember + 0
+0000006192f0 005f00000007 R_X86_64_JUMP_SLO 0000000000000000 exit + 0
+0000006192f8 006000000007 R_X86_64_JUMP_SLO 0000000000000000 fwrite + 0
+000000619300 006100000007 R_X86_64_JUMP_SLO 0000000000000000 __fprintf_chk + 0
+000000619308 006200000007 R_X86_64_JUMP_SLO 0000000000000000 fflush_unlocked + 0
+000000619310 006300000007 R_X86_64_JUMP_SLO 0000000000000000 mbsinit + 0
+000000619318 006400000007 R_X86_64_JUMP_SLO 0000000000000000 iswprint + 0
+000000619320 006500000007 R_X86_64_JUMP_SLO 0000000000000000 sigaddset + 0
+000000619328 006600000007 R_X86_64_JUMP_SLO 0000000000000000 strstr + 0
+000000619330 006700000007 R_X86_64_JUMP_SLO 0000000000000000 __ctype_tolower_loc + 0
+000000619338 006800000007 R_X86_64_JUMP_SLO 0000000000000000 __ctype_b_loc + 0
+000000619340 006900000007 R_X86_64_JUMP_SLO 0000000000000000 __sprintf_chk + 0
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains 121 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_toupper_loc@GLIBC_2.3 (2)
+ 2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getenv@GLIBC_2.2.5 (3)
+ 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigprocmask@GLIBC_2.2.5 (3)
+ 4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND raise@GLIBC_2.2.5 (3)
+ 5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localtime@GLIBC_2.2.5 (3)
+ 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __mempcpy_chk@GLIBC_2.3.4 (4)
+ 7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.2.5 (3)
+ 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (3)
+ 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncpy@GLIBC_2.2.5 (3)
+ 10: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strncmp@GLIBC_2.2.5 (3)
+ 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.2.5 (3)
+ 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.2.5 (3)
+ 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fpending@GLIBC_2.2.5 (3)
+ 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND isatty@GLIBC_2.2.5 (3)
+ 15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaction@GLIBC_2.2.5 (3)
+ 16: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iswcntrl@GLIBC_2.2.5 (3)
+ 17: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wcswidth@GLIBC_2.2.5 (3)
+ 18: 0000000000000000 0 FUNC GLOBAL DEFAULT UND localeconv@GLIBC_2.2.5 (3)
+ 19: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mbstowcs@GLIBC_2.2.5 (3)
+ 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readlink@GLIBC_2.2.5 (3)
+ 21: 0000000000000000 0 FUNC GLOBAL DEFAULT UND textdomain@GLIBC_2.2.5 (3)
+ 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.2.5 (3)
+ 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UND opendir@GLIBC_2.2.5 (3)
+ 24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwuid@GLIBC_2.2.5 (3)
+ 25: 0000000000000000 0 FUNC GLOBAL DEFAULT UND bindtextdomain@GLIBC_2.2.5 (3)
+ 26: 0000000000000000 0 FUNC GLOBAL DEFAULT UND stpcpy@GLIBC_2.2.5 (3)
+ 27: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dcgettext@GLIBC_2.2.5 (3)
+ 28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_get_mb_cur_max@GLIBC_2.2.5 (3)
+ 29: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (3)
+ 30: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __lxstat@GLIBC_2.2.5 (3)
+ 31: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (5)
+ 32: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getopt_long@GLIBC_2.2.5 (3)
+ 33: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mbrtowc@GLIBC_2.2.5 (3)
+ 34: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (3)
+ 35: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgrgid@GLIBC_2.2.5 (3)
+ 36: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _obstack_begin@GLIBC_2.2.5 (3)
+ 37: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __overflow@GLIBC_2.2.5 (3)
+ 38: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strrchr@GLIBC_2.2.5 (3)
+ 39: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fgetfilecon
+ 40: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lseek@GLIBC_2.2.5 (3)
+ 41: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gettimeofday@GLIBC_2.2.5 (3)
+ 42: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (3)
+ 43: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __strtoul_internal@GLIBC_2.2.5 (3)
+ 44: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fnmatch@GLIBC_2.2.5 (3)
+ 45: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (3)
+ 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND acl_get_tag_type@ACL_1.0 (6)
+ 47: 0000000000000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.2.5 (3)
+ 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UND closedir@GLIBC_2.2.5 (3)
+ 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 (3)
+ 50: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcmp@GLIBC_2.2.5 (3)
+ 51: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _setjmp@GLIBC_2.2.5 (3)
+ 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs_unlocked@GLIBC_2.2.5 (3)
+ 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND calloc@GLIBC_2.2.5 (3)
+ 54: 0000000000000000 0 FUNC GLOBAL DEFAULT UND lgetfilecon
+ 55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcmp@GLIBC_2.2.5 (3)
+ 56: 0000000000000000 0 FUNC GLOBAL DEFAULT UND signal@GLIBC_2.2.5 (3)
+ 57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dirfd@GLIBC_2.2.5 (3)
+ 58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getpwnam@GLIBC_2.2.5 (3)
+ 59: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __memcpy_chk@GLIBC_2.3.4 (4)
+ 60: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigemptyset@GLIBC_2.2.5 (3)
+ 61: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
+ 62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.14 (7)
+ 63: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getgrnam@GLIBC_2.2.5 (3)
+ 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getfilecon
+ 65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fileno@GLIBC_2.2.5 (3)
+ 66: 0000000000000000 0 FUNC GLOBAL DEFAULT UND tcgetpgrp@GLIBC_2.2.5 (3)
+ 67: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __xstat@GLIBC_2.2.5 (3)
+ 68: 0000000000000000 0 FUNC GLOBAL DEFAULT UND readdir@GLIBC_2.2.5 (3)
+ 69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wcwidth@GLIBC_2.2.5 (3)
+ 70: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush@GLIBC_2.2.5 (3)
+ 71: 0000000000000000 0 FUNC GLOBAL DEFAULT UND nl_langinfo@GLIBC_2.2.5 (3)
+ 72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fxstat@GLIBC_2.2.5 (3)
+ 73: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.2.5 (8)
+ 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strcoll@GLIBC_2.2.5 (3)
+ 75: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mktime@GLIBC_2.2.5 (3)
+ 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __freading@GLIBC_2.2.5 (3)
+ 77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite_unlocked@GLIBC_2.2.5 (3)
+ 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND acl_get_entry@ACL_1.0 (6)
+ 79: 0000000000000000 0 FUNC GLOBAL DEFAULT UND realloc@GLIBC_2.2.5 (3)
+ 80: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.2.5 (3)
+ 81: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _obstack_newchunk@GLIBC_2.2.5 (3)
+ 82: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (4)
+ 83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strftime@GLIBC_2.2.5 (3)
+ 84: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mempcpy@GLIBC_2.2.5 (3)
+ 85: 0000000000000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.2.5 (3)
+ 86: 0000000000000000 0 FUNC GLOBAL DEFAULT UND error@GLIBC_2.2.5 (3)
+ 87: 0000000000000000 0 FUNC GLOBAL DEFAULT UND acl_extended_file_nofollo@ACL_1.2 (9)
+ 88: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fseeko@GLIBC_2.2.5 (3)
+ 89: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
+ 90: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strtoul@GLIBC_2.2.5 (3)
+ 91: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@GLIBC_2.2.5 (3)
+ 92: 0000000000000000 0 FUNC GLOBAL DEFAULT UND wcstombs@GLIBC_2.2.5 (3)
+ 93: 0000000000000000 0 FUNC GLOBAL DEFAULT UND freecon
+ 94: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigismember@GLIBC_2.2.5 (3)
+ 95: 0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (3)
+ 96: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fwrite@GLIBC_2.2.5 (3)
+ 97: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (4)
+ 98: 0000000000000000 0 FUNC GLOBAL DEFAULT UND fflush_unlocked@GLIBC_2.2.5 (3)
+ 99: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mbsinit@GLIBC_2.2.5 (3)
+ 100: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iswprint@GLIBC_2.2.5 (3)
+ 101: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sigaddset@GLIBC_2.2.5 (3)
+ 102: 0000000000000000 0 FUNC GLOBAL DEFAULT UND strstr@GLIBC_2.2.5 (3)
+ 103: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_tolower_loc@GLIBC_2.3 (2)
+ 104: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_b_loc@GLIBC_2.3 (2)
+ 105: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (4)
+ 106: 0000000000619590 8 OBJECT GLOBAL DEFAULT 25 stdout@GLIBC_2.2.5 (3)
+ 107: 0000000000619570 0 NOTYPE GLOBAL DEFAULT ABS _edata
+ 108: 000000000061a2e0 0 NOTYPE GLOBAL DEFAULT ABS _end
+ 109: 0000000000619580 8 OBJECT GLOBAL DEFAULT 25 __progname@GLIBC_2.2.5 (3)
+ 110: 0000000000402040 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (3)
+ 111: 00000000006195b0 8 OBJECT WEAK DEFAULT 25 program_invocation_name@GLIBC_2.2.5 (3)
+ 112: 0000000000402450 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (3)
+ 113: 0000000000619570 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ 114: 00000000006195b0 8 OBJECT GLOBAL DEFAULT 25 __progname_full@GLIBC_2.2.5 (3)
+ 115: 0000000000619580 8 OBJECT WEAK DEFAULT 25 program_invocation_short_@GLIBC_2.2.5 (3)
+ 116: 0000000000401fd0 0 FUNC GLOBAL DEFAULT 11 _init
+ 117: 00000000006195b8 8 OBJECT GLOBAL DEFAULT 25 stderr@GLIBC_2.2.5 (3)
+ 118: 00000000006195a0 4 OBJECT GLOBAL DEFAULT 25 optind@GLIBC_2.2.5 (3)
+ 119: 00000000004117f8 0 FUNC GLOBAL DEFAULT 14 _fini
+ 120: 00000000006195a8 8 OBJECT GLOBAL DEFAULT 25 optarg@GLIBC_2.2.5 (3)
+
+Histogram for `.gnu.hash' bucket list length (total of 3 buckets):
+ Length Number % of total Coverage
+ 0 0 ( 0.0%)
+ 1 0 ( 0.0%) 0.0%
+ 2 0 ( 0.0%) 0.0%
+ 3 2 ( 66.7%) 40.0%
+ 4 0 ( 0.0%) 40.0%
+ 5 0 ( 0.0%) 40.0%
+ 6 0 ( 0.0%) 40.0%
+ 7 0 ( 0.0%) 40.0%
+ 8 0 ( 0.0%) 40.0%
+ 9 1 ( 33.3%) 100.0%
+
+Version symbols section '.gnu.version' contains 121 entries:
+ Addr: 00000000004013aa Offset: 0x0013aa Link: 5 (.dynsym)
+ 000: 0 (*local*) 2 (GLIBC_2.3) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 004: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 4 (GLIBC_2.3.4) 3 (GLIBC_2.2.5)
+ 008: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 00c: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 010: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 014: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 018: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 01c: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 5 (GLIBC_2.4)
+ 020: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 024: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 0 (*local*)
+ 028: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 02c: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 6 (ACL_1.0) 3 (GLIBC_2.2.5)
+ 030: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 034: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 0 (*local*) 3 (GLIBC_2.2.5)
+ 038: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 4 (GLIBC_2.3.4)
+ 03c: 3 (GLIBC_2.2.5) 0 (*local*) 7 (GLIBC_2.14) 3 (GLIBC_2.2.5)
+ 040: 0 (*local*) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 044: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 048: 3 (GLIBC_2.2.5) 8 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 04c: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 6 (ACL_1.0) 3 (GLIBC_2.2.5)
+ 050: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 4 (GLIBC_2.3.4) 3 (GLIBC_2.2.5)
+ 054: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 9 (ACL_1.2)
+ 058: 3 (GLIBC_2.2.5) 0 (*local*) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 05c: 3 (GLIBC_2.2.5) 0 (*local*) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 060: 3 (GLIBC_2.2.5) 4 (GLIBC_2.3.4) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 064: 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 2 (GLIBC_2.3)
+ 068: 2 (GLIBC_2.3) 4 (GLIBC_2.3.4) 3 (GLIBC_2.2.5) 1 (*global*)
+ 06c: 1 (*global*) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 070: 3 (GLIBC_2.2.5) 1 (*global*) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5)
+ 074: 1 (*global*) 3 (GLIBC_2.2.5) 3 (GLIBC_2.2.5) 1 (*global*)
+ 078: 3 (GLIBC_2.2.5)
+
+Version needs section '.gnu.version_r' contains 3 entries:
+ Addr: 0x00000000004014a0 Offset: 0x0014a0 Link: 6 (.dynstr)
+ 000000: Version: 1 File: librt.so.1 Cnt: 1
+ 0x0010: Name: GLIBC_2.2.5 Flags: none Version: 8
+ 0x0020: Version: 1 File: libacl.so.1 Cnt: 2
+ 0x0030: Name: ACL_1.2 Flags: none Version: 9
+ 0x0040: Name: ACL_1.0 Flags: none Version: 6
+ 0x0050: Version: 1 File: libc.so.6 Cnt: 5
+ 0x0060: Name: GLIBC_2.14 Flags: none Version: 7
+ 0x0070: Name: GLIBC_2.4 Flags: none Version: 5
+ 0x0080: Name: GLIBC_2.3.4 Flags: none Version: 4
+ 0x0090: Name: GLIBC_2.2.5 Flags: none Version: 3
+ 0x00a0: Name: GLIBC_2.3 Flags: none Version: 2
+
+Notes at offset 0x00000254 with length 0x00000020:
+ Owner Data size Description
+ GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
+ OS: Linux, ABI: 2.6.24
+
+Notes at offset 0x00000274 with length 0x00000024:
+ Owner Data size Description
+ GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
+ Build ID: 35d6cd3799517f5855400489f9bf3a6227200039
diff --git a/utils/bcmregtool/elfio/elf_examples/main b/utils/bcmregtool/elfio/elf_examples/main
new file mode 100644
index 0000000..f4018b7
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/main
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/main32 b/utils/bcmregtool/elfio/elf_examples/main32
new file mode 100644
index 0000000..63196e9
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/main32
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/ppc-32bit-specimen3.elf b/utils/bcmregtool/elfio/elf_examples/ppc-32bit-specimen3.elf
new file mode 100644
index 0000000..eb37cc7
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/ppc-32bit-specimen3.elf
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/read_write_arm_elf32_input b/utils/bcmregtool/elfio/elf_examples/read_write_arm_elf32_input
new file mode 100755
index 0000000..e4c312f
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/read_write_arm_elf32_input
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/startup.eln b/utils/bcmregtool/elfio/elf_examples/startup.eln
new file mode 100644
index 0000000..41bea33
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/startup.eln
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/startup_orig.eln b/utils/bcmregtool/elfio/elf_examples/startup_orig.eln
new file mode 100644
index 0000000..9090d50
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/startup_orig.eln
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/test_ppc b/utils/bcmregtool/elfio/elf_examples/test_ppc
new file mode 100644
index 0000000..0946b73
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/test_ppc
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/test_ppc.cpp b/utils/bcmregtool/elfio/elf_examples/test_ppc.cpp
new file mode 100644
index 0000000..d07f900
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/test_ppc.cpp
@@ -0,0 +1,8 @@
+#include <iostream>
+
+int main()
+{
+ std::cout << "Hello" << std::endl;
+
+ return 0;
+}
diff --git a/utils/bcmregtool/elfio/elf_examples/test_ppc.txt b/utils/bcmregtool/elfio/elf_examples/test_ppc.txt
new file mode 100644
index 0000000..3a08811
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/test_ppc.txt
@@ -0,0 +1,263 @@
+ELF Header:
+ Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
+ Class: ELF32
+ Data: 2's complement, big endian
+ Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: EXEC (Executable file)
+ Machine: PowerPC
+ Version: 0x1
+ Entry point address: 0x10000550
+ Start of program headers: 52 (bytes into file)
+ Start of section headers: 3484 (bytes into file)
+ Flags: 0x0
+ Size of this header: 52 (bytes)
+ Size of program headers: 32 (bytes)
+ Number of program headers: 8
+ Size of section headers: 40 (bytes)
+ Number of section headers: 31
+ Section header string table index: 28
+
+Section Headers:
+ [Nr] Name Type Addr Off Size ES Flg Lk Inf Al
+ [ 0] NULL 00000000 000000 000000 00 0 0 0
+ [ 1] .interp PROGBITS 10000134 000134 00000d 00 A 0 0 1
+ [ 2] .note.ABI-tag NOTE 10000144 000144 000020 00 A 0 0 4
+ [ 3] .hash HASH 10000164 000164 000048 04 A 4 0 4
+ [ 4] .dynsym DYNSYM 100001ac 0001ac 0000d0 10 A 5 1 4
+ [ 5] .dynstr STRTAB 1000027c 00027c 000183 00 A 0 0 1
+ [ 6] .gnu.version VERSYM 10000400 000400 00001a 02 A 4 0 2
+ [ 7] .gnu.version_r VERNEED 1000041c 00041c 000060 00 A 5 2 4
+ [ 8] .rela.dyn RELA 1000047c 00047c 000018 0c A 4 0 4
+ [ 9] .rela.plt RELA 10000494 000494 00006c 0c A 4 22 4
+ [10] .init PROGBITS 10000500 000500 00004c 00 AX 0 0 4
+ [11] .text PROGBITS 10000550 000550 000480 00 AX 0 0 16
+ [12] .fini PROGBITS 100009d0 0009d0 000038 00 AX 0 0 4
+ [13] .rodata PROGBITS 10000a08 000a08 00001a 00 A 0 0 4
+ [14] .eh_frame_hdr PROGBITS 10000a24 000a24 000024 00 A 0 0 4
+ [15] .eh_frame PROGBITS 10000a48 000a48 000084 00 A 0 0 4
+ [16] .ctors PROGBITS 10010acc 000acc 00000c 00 WA 0 0 4
+ [17] .dtors PROGBITS 10010ad8 000ad8 000008 00 WA 0 0 4
+ [18] .jcr PROGBITS 10010ae0 000ae0 000004 00 WA 0 0 4
+ [19] .got2 PROGBITS 10010ae4 000ae4 000008 00 WA 0 0 1
+ [20] .dynamic DYNAMIC 10010aec 000aec 0000e8 08 WA 5 0 4
+ [21] .got PROGBITS 10010bd4 000bd4 000010 04 WA 0 0 4
+ [22] .plt PROGBITS 10010be4 000be4 000024 00 WA 0 0 4
+ [23] .data PROGBITS 10010c08 000c08 000004 00 WA 0 0 4
+ [24] .bss NOBITS 10010c0c 000c0c 000098 00 WA 0 0 4
+ [25] .comment PROGBITS 00000000 000c0c 000027 00 0 0 1
+ [26] .debug_frame PROGBITS 00000000 000c34 000050 00 0 0 4
+ [27] .gnu.attributes LOOS+ffffff5 00000000 000c84 000014 00 0 0 1
+ [28] .shstrtab STRTAB 00000000 000c98 000101 00 0 0 1
+ [29] .symtab SYMTAB 00000000 001274 000500 10 30 54 4
+ [30] .strtab STRTAB 00000000 001774 0003cc 00 0 0 1
+Key to Flags:
+ W (write), A (alloc), X (execute), M (merge), S (strings)
+ I (info), L (link order), G (group), x (unknown)
+ O (extra OS processing required) o (OS specific), p (processor specific)
+
+There are no section groups in this file.
+
+Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
+ PHDR 0x000034 0x10000034 0x10000034 0x00100 0x00100 R E 0x4
+ INTERP 0x000134 0x10000134 0x10000134 0x0000d 0x0000d R 0x1
+ [Requesting program interpreter: /lib/ld.so.1]
+ LOAD 0x000000 0x10000000 0x10000000 0x00acc 0x00acc R E 0x10000
+ LOAD 0x000acc 0x10010acc 0x10010acc 0x00140 0x001d8 RW 0x10000
+ DYNAMIC 0x000aec 0x10010aec 0x10010aec 0x000e8 0x000e8 RW 0x4
+ NOTE 0x000144 0x10000144 0x10000144 0x00020 0x00020 R 0x4
+ GNU_EH_FRAME 0x000a24 0x10000a24 0x10000a24 0x00024 0x00024 R 0x4
+ GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4
+
+ Section to Segment mapping:
+ Segment Sections...
+ 00
+ 01 .interp
+ 02 .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .text .fini .rodata .eh_frame_hdr .eh_frame
+ 03 .ctors .dtors .jcr .got2 .dynamic .got .plt .data .bss
+ 04 .dynamic
+ 05 .note.ABI-tag
+ 06 .eh_frame_hdr
+ 07
+
+Dynamic section at offset 0xaec contains 24 entries:
+ Tag Type Name/Value
+ 0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
+ 0x00000001 (NEEDED) Shared library: [libm.so.6]
+ 0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
+ 0x00000001 (NEEDED) Shared library: [libc.so.6]
+ 0x0000000c (INIT) 0x10000500
+ 0x0000000d (FINI) 0x100009d0
+ 0x00000004 (HASH) 0x10000164
+ 0x00000005 (STRTAB) 0x1000027c
+ 0x00000006 (SYMTAB) 0x100001ac
+ 0x0000000a (STRSZ) 387 (bytes)
+ 0x0000000b (SYMENT) 16 (bytes)
+ 0x00000015 (DEBUG) 0x0
+ 0x00000003 (PLTGOT) 0x10010be4
+ 0x00000002 (PLTRELSZ) 108 (bytes)
+ 0x00000014 (PLTREL) RELA
+ 0x00000017 (JMPREL) 0x10000494
+ 0x70000000 (PPC_GOT) 0x10010bd8
+ 0x00000007 (RELA) 0x1000047c
+ 0x00000008 (RELASZ) 132 (bytes)
+ 0x00000009 (RELAENT) 12 (bytes)
+ 0x6ffffffe (VERNEED) 0x1000041c
+ 0x6fffffff (VERNEEDNUM) 2
+ 0x6ffffff0 (VERSYM) 0x10000400
+ 0x00000000 (NULL) 0x0
+
+Relocation section '.rela.dyn' at offset 0x47c contains 2 entries:
+ Offset Info Type Sym.Value Sym. Name + Addend
+10010bd4 00000214 R_PPC_GLOB_DAT 00000000 __gmon_start__ + 0
+10010c0c 00000913 R_PPC_COPY 10010c0c _ZSt4cout + 0
+
+Relocation section '.rela.plt' at offset 0x494 contains 9 entries:
+ Offset Info Type Sym.Value Sym. Name + Addend
+10010be4 00000115 R_PPC_JMP_SLOT 100008e0 __cxa_atexit + 0
+10010be8 00000215 R_PPC_JMP_SLOT 00000000 __gmon_start__ + 0
+10010bec 00000415 R_PPC_JMP_SLOT 10000900 _ZNSt8ios_base4InitC1E + 0
+10010bf0 00000515 R_PPC_JMP_SLOT 10000910 __libc_start_main + 0
+10010bf4 00000615 R_PPC_JMP_SLOT 10000920 _ZNSt8ios_base4InitD1E + 0
+10010bf8 00000715 R_PPC_JMP_SLOT 10000930 _ZStlsISt11char_traits + 0
+10010bfc 00000a15 R_PPC_JMP_SLOT 10000940 _ZNSolsEPFRSoS_E + 0
+10010c00 00000b15 R_PPC_JMP_SLOT 10000950 _ZSt4endlIcSt11char_tr + 0
+10010c04 00000c15 R_PPC_JMP_SLOT 10000960 __gxx_personality_v0 + 0
+
+There are no unwind sections in this file.
+
+Symbol table '.dynsym' contains 13 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 100008e0 144 FUNC GLOBAL DEFAULT UND __cxa_atexit@GLIBC_2.1.3 (2)
+ 2: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
+ 3: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
+ 4: 10000900 1452 FUNC GLOBAL DEFAULT UND _ZNSt8ios_base4InitC1Ev@GLIBCXX_3.4 (3)
+ 5: 10000910 232 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.0 (4)
+ 6: 10000920 204 FUNC GLOBAL DEFAULT UND _ZNSt8ios_base4InitD1Ev@GLIBCXX_3.4 (3)
+ 7: 10000930 164 FUNC GLOBAL DEFAULT UND _ZStlsISt11char_traitsIcE@GLIBCXX_3.4 (3)
+ 8: 10000a18 4 OBJECT GLOBAL DEFAULT 13 _IO_stdin_used
+ 9: 10010c0c 140 OBJECT GLOBAL DEFAULT 24 _ZSt4cout@GLIBCXX_3.4 (3)
+ 10: 10000940 36 FUNC GLOBAL DEFAULT UND _ZNSolsEPFRSoS_E@GLIBCXX_3.4 (3)
+ 11: 10000950 336 FUNC GLOBAL DEFAULT UND _ZSt4endlIcSt11char_trait@GLIBCXX_3.4 (3)
+ 12: 10000960 1420 FUNC GLOBAL DEFAULT UND __gxx_personality_v0@CXXABI_1.3 (5)
+
+Symbol table '.symtab' contains 80 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 10000134 0 SECTION LOCAL DEFAULT 1
+ 2: 10000144 0 SECTION LOCAL DEFAULT 2
+ 3: 10000164 0 SECTION LOCAL DEFAULT 3
+ 4: 100001ac 0 SECTION LOCAL DEFAULT 4
+ 5: 1000027c 0 SECTION LOCAL DEFAULT 5
+ 6: 10000400 0 SECTION LOCAL DEFAULT 6
+ 7: 1000041c 0 SECTION LOCAL DEFAULT 7
+ 8: 1000047c 0 SECTION LOCAL DEFAULT 8
+ 9: 10000494 0 SECTION LOCAL DEFAULT 9
+ 10: 10000500 0 SECTION LOCAL DEFAULT 10
+ 11: 10000550 0 SECTION LOCAL DEFAULT 11
+ 12: 100009d0 0 SECTION LOCAL DEFAULT 12
+ 13: 10000a08 0 SECTION LOCAL DEFAULT 13
+ 14: 10000a24 0 SECTION LOCAL DEFAULT 14
+ 15: 10000a48 0 SECTION LOCAL DEFAULT 15
+ 16: 10010acc 0 SECTION LOCAL DEFAULT 16
+ 17: 10010ad8 0 SECTION LOCAL DEFAULT 17
+ 18: 10010ae0 0 SECTION LOCAL DEFAULT 18
+ 19: 10010ae4 0 SECTION LOCAL DEFAULT 19
+ 20: 10010aec 0 SECTION LOCAL DEFAULT 20
+ 21: 10010bd4 0 SECTION LOCAL DEFAULT 21
+ 22: 10010be4 0 SECTION LOCAL DEFAULT 22
+ 23: 10010c08 0 SECTION LOCAL DEFAULT 23
+ 24: 10010c0c 0 SECTION LOCAL DEFAULT 24
+ 25: 00000000 0 SECTION LOCAL DEFAULT 25
+ 26: 00000000 0 SECTION LOCAL DEFAULT 26
+ 27: 00000000 0 SECTION LOCAL DEFAULT 27
+ 28: 00000000 0 FILE LOCAL DEFAULT ABS init.c
+ 29: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
+ 30: 10010acc 0 OBJECT LOCAL DEFAULT 16 __CTOR_LIST__
+ 31: 10010ad8 0 OBJECT LOCAL DEFAULT 17 __DTOR_LIST__
+ 32: 10010ae0 0 OBJECT LOCAL DEFAULT 18 __JCR_LIST__
+ 33: 10000574 0 FUNC LOCAL DEFAULT 11 __do_global_dtors_aux
+ 34: 10010c98 1 OBJECT LOCAL DEFAULT 24 completed.6348
+ 35: 10010c9c 4 OBJECT LOCAL DEFAULT 24 dtor_idx.6350
+ 36: 1000061c 0 FUNC LOCAL DEFAULT 11 call___do_global_dtors_au
+ 37: 10000638 0 FUNC LOCAL DEFAULT 11 frame_dummy
+ 38: 10000680 0 FUNC LOCAL DEFAULT 11 call_frame_dummy
+ 39: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
+ 40: 10010ad4 0 OBJECT LOCAL DEFAULT 16 __CTOR_END__
+ 41: 10000ac8 0 OBJECT LOCAL DEFAULT 15 __FRAME_END__
+ 42: 10010ae0 0 OBJECT LOCAL DEFAULT 18 __JCR_END__
+ 43: 1000086c 0 FUNC LOCAL DEFAULT 11 __do_global_ctors_aux
+ 44: 100008bc 0 FUNC LOCAL DEFAULT 11 call___do_global_ctors_au
+ 45: 00000000 0 FILE LOCAL DEFAULT ABS test_ppc.cpp
+ 46: 100006f8 128 FUNC LOCAL DEFAULT 11 _Z41__static_initializati
+ 47: 10010ca0 1 OBJECT LOCAL DEFAULT 24 _ZStL8__ioinit
+ 48: 10000778 60 FUNC LOCAL DEFAULT 11 _GLOBAL__I_main
+ 49: 00000000 0 FILE LOCAL DEFAULT ABS elf-init.c
+ 50: 10010bd8 0 OBJECT LOCAL HIDDEN 21 _GLOBAL_OFFSET_TABLE_
+ 51: 10010acc 0 NOTYPE LOCAL HIDDEN 16 __init_array_end
+ 52: 10010acc 0 NOTYPE LOCAL HIDDEN 16 __init_array_start
+ 53: 10010aec 0 OBJECT LOCAL HIDDEN 20 _DYNAMIC
+ 54: 10010c08 0 NOTYPE WEAK DEFAULT 23 data_start
+ 55: 100008e0 144 FUNC GLOBAL DEFAULT UND __cxa_atexit@@GLIBC_2.1.3
+ 56: 100007b4 4 FUNC GLOBAL DEFAULT 11 __libc_csu_fini
+ 57: 10000550 36 FUNC GLOBAL DEFAULT 11 _start
+ 58: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
+ 59: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
+ 60: 100009d0 0 FUNC GLOBAL DEFAULT 12 _fini
+ 61: 10000900 1452 FUNC GLOBAL DEFAULT UND _ZNSt8ios_base4InitC1Ev@@
+ 62: 10018c0c 0 NOTYPE GLOBAL DEFAULT 24 _SDA_BASE_
+ 63: 10000910 232 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_
+ 64: 10000920 204 FUNC GLOBAL DEFAULT UND _ZNSt8ios_base4InitD1Ev@@
+ 65: 10000930 164 FUNC GLOBAL DEFAULT UND _ZStlsISt11char_traitsIcE
+ 66: 10000a18 4 OBJECT GLOBAL DEFAULT 13 _IO_stdin_used
+ 67: 10010c08 0 NOTYPE GLOBAL DEFAULT 23 __data_start
+ 68: 10010c0c 140 OBJECT GLOBAL DEFAULT 24 _ZSt4cout@@GLIBCXX_3.4
+ 69: 10010c08 0 OBJECT GLOBAL HIDDEN 23 __dso_handle
+ 70: 10010adc 0 OBJECT GLOBAL HIDDEN 17 __DTOR_END__
+ 71: 100007b8 180 FUNC GLOBAL DEFAULT 11 __libc_csu_init
+ 72: 10010c0c 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ 73: 10010ca4 0 NOTYPE GLOBAL DEFAULT ABS _end
+ 74: 10000940 36 FUNC GLOBAL DEFAULT UND _ZNSolsEPFRSoS_E@@GLIBCXX
+ 75: 10000950 336 FUNC GLOBAL DEFAULT UND _ZSt4endlIcSt11char_trait
+ 76: 10010c0c 0 NOTYPE GLOBAL DEFAULT ABS _edata
+ 77: 10000960 1420 FUNC GLOBAL DEFAULT UND __gxx_personality_v0@@CXX
+ 78: 1000069c 92 FUNC GLOBAL DEFAULT 11 main
+ 79: 10000500 0 FUNC GLOBAL DEFAULT 10 _init
+
+Histogram for bucket list length (total of 3 buckets):
+ Length Number % of total Coverage
+ 0 0 ( 0.0%)
+ 1 0 ( 0.0%) 0.0%
+ 2 1 ( 33.3%) 16.7%
+ 3 0 ( 0.0%) 16.7%
+ 4 1 ( 33.3%) 50.0%
+ 5 0 ( 0.0%) 50.0%
+ 6 1 ( 33.3%) 100.0%
+
+Version symbols section '.gnu.version' contains 13 entries:
+ Addr: 0000000010000400 Offset: 0x000400 Link: 4 (.dynsym)
+ 000: 0 (*local*) 2 (GLIBC_2.1.3) 0 (*local*) 0 (*local*)
+ 004: 3 (GLIBCXX_3.4) 4 (GLIBC_2.0) 3 (GLIBCXX_3.4) 3 (GLIBCXX_3.4)
+ 008: 1 (*global*) 3 (GLIBCXX_3.4) 3 (GLIBCXX_3.4) 3 (GLIBCXX_3.4)
+ 00c: 5 (CXXABI_1.3)
+
+Version needs section '.gnu.version_r' contains 2 entries:
+ Addr: 0x000000001000041c Offset: 0x00041c Link: 5 (.dynstr)
+ 000000: Version: 1 File: libstdc++.so.6 Cnt: 2
+ 0x0010: Name: CXXABI_1.3 Flags: none Version: 5
+ 0x0020: Name: GLIBCXX_3.4 Flags: none Version: 3
+ 0x0030: Version: 1 File: libc.so.6 Cnt: 2
+ 0x0040: Name: GLIBC_2.0 Flags: none Version: 4
+ 0x0050: Name: GLIBC_2.1.3 Flags: none Version: 2
+
+Notes at offset 0x00000144 with length 0x00000020:
+ Owner Data size Description
+ GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Hard float
+ Tag_GNU_Power_ABI_Vector: Generic
+ Tag_GNU_Power_ABI_Struct_Return: Memory
diff --git a/utils/bcmregtool/elfio/elf_examples/test_ppc_o.txt b/utils/bcmregtool/elfio/elf_examples/test_ppc_o.txt
new file mode 100644
index 0000000..cffbe17
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/test_ppc_o.txt
@@ -0,0 +1,114 @@
+ELF Header:
+ Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
+ Class: ELF32
+ Data: 2's complement, big endian
+ Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0
+ Type: REL (Relocatable file)
+ Machine: PowerPC
+ Version: 0x1
+ Entry point address: 0x0
+ Start of program headers: 0 (bytes into file)
+ Start of section headers: 616 (bytes into file)
+ Flags: 0x0
+ Size of this header: 52 (bytes)
+ Size of program headers: 0 (bytes)
+ Number of program headers: 0
+ Size of section headers: 40 (bytes)
+ Number of section headers: 16
+ Section header string table index: 13
+
+Section Headers:
+ [Nr] Name Type Addr Off Size ES Flg Lk Inf Al
+ [ 0] NULL 00000000 000000 000000 00 0 0 0
+ [ 1] .text PROGBITS 00000000 000034 000118 00 AX 0 0 4
+ [ 2] .rela.text RELA 00000000 0007b8 0000d8 0c 14 1 4
+ [ 3] .data PROGBITS 00000000 00014c 000000 00 WA 0 0 1
+ [ 4] .bss NOBITS 00000000 00014c 000001 00 WA 0 0 1
+ [ 5] .rodata PROGBITS 00000000 00014c 000006 00 A 0 0 4
+ [ 6] .ctors PROGBITS 00000000 000154 000004 00 WA 0 0 4
+ [ 7] .rela.ctors RELA 00000000 000890 00000c 0c 14 6 4
+ [ 8] .eh_frame PROGBITS 00000000 000158 000058 00 A 0 0 4
+ [ 9] .rela.eh_frame RELA 00000000 00089c 000024 0c 14 8 4
+ [10] .comment PROGBITS 00000000 0001b0 000027 00 0 0 1
+ [11] .note.GNU-stack PROGBITS 00000000 0001d7 000000 00 0 0 1
+ [12] .gnu.attributes LOOS+ffffff5 00000000 0001d7 000014 00 0 0 1
+ [13] .shstrtab STRTAB 00000000 0001eb 00007d 00 0 0 1
+ [14] .symtab SYMTAB 00000000 0004e8 000180 10 15 14 4
+ [15] .strtab STRTAB 00000000 000668 00014f 00 0 0 1
+Key to Flags:
+ W (write), A (alloc), X (execute), M (merge), S (strings)
+ I (info), L (link order), G (group), x (unknown)
+ O (extra OS processing required) o (OS specific), p (processor specific)
+
+There are no section groups in this file.
+
+There are no program headers in this file.
+
+Relocation section '.rela.text' at offset 0x7b8 contains 18 entries:
+ Offset Info Type Sym.Value Sym. Name + Addend
+00000016 00000f06 R_PPC_ADDR16_HA 00000000 _ZSt4cout + 0
+0000001a 00000f04 R_PPC_ADDR16_LO 00000000 _ZSt4cout + 0
+0000001e 00000506 R_PPC_ADDR16_HA 00000000 .rodata + 0
+00000022 00000504 R_PPC_ADDR16_LO 00000000 .rodata + 0
+00000024 0000100a R_PPC_REL24 00000000 _ZStlsISt11char_traits + 0
+00000032 00001106 R_PPC_ADDR16_HA 00000000 _ZSt4endlIcSt11char_tr + 0
+00000036 00001104 R_PPC_ADDR16_LO 00000000 _ZSt4endlIcSt11char_tr + 0
+00000038 0000120a R_PPC_REL24 00000000 _ZNSolsEPFRSoS_E + 0
+0000009a 00000406 R_PPC_ADDR16_HA 00000000 .bss + 0
+0000009e 00000404 R_PPC_ADDR16_LO 00000000 .bss + 0
+000000a0 0000130a R_PPC_REL24 00000000 _ZNSt8ios_base4InitC1E + 0
+000000a6 00001406 R_PPC_ADDR16_HA 00000000 _ZNSt8ios_base4InitD1E + 0
+000000aa 00001404 R_PPC_ADDR16_LO 00000000 _ZNSt8ios_base4InitD1E + 0
+000000b2 00000406 R_PPC_ADDR16_HA 00000000 .bss + 0
+000000b6 00000404 R_PPC_ADDR16_LO 00000000 .bss + 0
+000000ba 00001506 R_PPC_ADDR16_HA 00000000 __dso_handle + 0
+000000be 00001504 R_PPC_ADDR16_LO 00000000 __dso_handle + 0
+000000c0 0000160a R_PPC_REL24 00000000 __cxa_atexit + 0
+
+Relocation section '.rela.ctors' at offset 0x890 contains 1 entries:
+ Offset Info Type Sym.Value Sym. Name + Addend
+00000000 00000201 R_PPC_ADDR32 00000000 .text + dc
+
+Relocation section '.rela.eh_frame' at offset 0x89c contains 3 entries:
+ Offset Info Type Sym.Value Sym. Name + Addend
+00000011 00001701 R_PPC_ADDR32 00000000 __gxx_personality_v0 + 0
+00000020 00000201 R_PPC_ADDR32 00000000 .text + 0
+00000040 00000201 R_PPC_ADDR32 00000000 .text + 5c
+
+There are no unwind sections in this file.
+
+Symbol table '.symtab' contains 24 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 00000000 0 FILE LOCAL DEFAULT ABS test_ppc.cpp
+ 2: 00000000 0 SECTION LOCAL DEFAULT 1
+ 3: 00000000 0 SECTION LOCAL DEFAULT 3
+ 4: 00000000 0 SECTION LOCAL DEFAULT 4
+ 5: 00000000 0 SECTION LOCAL DEFAULT 5
+ 6: 0000005c 128 FUNC LOCAL DEFAULT 1 _Z41__static_initializati
+ 7: 00000000 1 OBJECT LOCAL DEFAULT 4 _ZStL8__ioinit
+ 8: 000000dc 60 FUNC LOCAL DEFAULT 1 _GLOBAL__I_main
+ 9: 00000000 0 SECTION LOCAL DEFAULT 6
+ 10: 00000000 0 SECTION LOCAL DEFAULT 8
+ 11: 00000000 0 SECTION LOCAL DEFAULT 11
+ 12: 00000000 0 SECTION LOCAL DEFAULT 10
+ 13: 00000000 0 SECTION LOCAL DEFAULT 12
+ 14: 00000000 92 FUNC GLOBAL DEFAULT 1 main
+ 15: 00000000 0 NOTYPE GLOBAL DEFAULT UND _ZSt4cout
+ 16: 00000000 0 NOTYPE GLOBAL DEFAULT UND _ZStlsISt11char_traitsIcE
+ 17: 00000000 0 NOTYPE GLOBAL DEFAULT UND _ZSt4endlIcSt11char_trait
+ 18: 00000000 0 NOTYPE GLOBAL DEFAULT UND _ZNSolsEPFRSoS_E
+ 19: 00000000 0 NOTYPE GLOBAL DEFAULT UND _ZNSt8ios_base4InitC1Ev
+ 20: 00000000 0 NOTYPE GLOBAL DEFAULT UND _ZNSt8ios_base4InitD1Ev
+ 21: 00000000 0 NOTYPE GLOBAL DEFAULT UND __dso_handle
+ 22: 00000000 0 NOTYPE GLOBAL DEFAULT UND __cxa_atexit
+ 23: 00000000 0 NOTYPE GLOBAL DEFAULT UND __gxx_personality_v0
+
+No version information found in this file.
+Attribute Section: gnu
+File Attributes
+ Tag_GNU_Power_ABI_FP: Hard float
+ Tag_GNU_Power_ABI_Vector: Generic
+ Tag_GNU_Power_ABI_Struct_Return: Memory
diff --git a/utils/bcmregtool/elfio/elf_examples/write_exe_i386_32_match b/utils/bcmregtool/elfio/elf_examples/write_exe_i386_32_match
new file mode 100644
index 0000000..472539f
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/write_exe_i386_32_match
Binary files differ
diff --git a/utils/bcmregtool/elfio/elf_examples/write_exe_i386_32_work_dump.txt b/utils/bcmregtool/elfio/elf_examples/write_exe_i386_32_work_dump.txt
new file mode 100644
index 0000000..ca06c1d
--- /dev/null
+++ b/utils/bcmregtool/elfio/elf_examples/write_exe_i386_32_work_dump.txt
@@ -0,0 +1,71 @@
+
+write_exe_i386_32_work: file format elf32-i386
+write_exe_i386_32_work
+architecture: i386, flags 0x00000102:
+EXEC_P, D_PAGED
+start address 0x08048080
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
+ filesz 0x0000009d memsz 0x0000009d flags r-x
+ LOAD off 0x000000a0 vaddr 0x080490a0 paddr 0x080490a0 align 2**12
+ filesz 0x0000000e memsz 0x0000000e flags rw-
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 .text 0000001d 08048080 08048080 00000080 2**4
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 .data 0000000e 080490a0 080490a0 000000a0 2**2
+ CONTENTS, ALLOC, LOAD, DATA
+ 2 .note 00000020 00000000 00000000 000000ae 2**0
+ CONTENTS, READONLY
+SYMBOL TABLE:
+no symbols
+
+
+
+Disassembly of section .text:
+
+08048080 <.text>:
+ 8048080: b8 04 00 00 00 mov $0x4,%eax
+ 8048085: bb 01 00 00 00 mov $0x1,%ebx
+ 804808a: b9 a0 90 04 08 mov $0x80490a0,%ecx
+ 804808f: ba 0e 00 00 00 mov $0xe,%edx
+ 8048094: cd 80 int $0x80
+ 8048096: b8 01 00 00 00 mov $0x1,%eax
+ 804809b: cd 80 int $0x80
+
+Disassembly of section .data:
+
+080490a0 <.data>:
+ 80490a0: 48 dec %eax
+ 80490a1: 65 gs
+ 80490a2: 6c insb (%dx),%es:(%edi)
+ 80490a3: 6c insb (%dx),%es:(%edi)
+ 80490a4: 6f outsl %ds:(%esi),(%dx)
+ 80490a5: 2c 20 sub $0x20,%al
+ 80490a7: 57 push %edi
+ 80490a8: 6f outsl %ds:(%esi),(%dx)
+ 80490a9: 72 6c jb 0x8049117
+ 80490ab: 64 21 0a and %ecx,%fs:(%edx)
+
+Disassembly of section .note:
+
+00000000 <.note>:
+ 0: 11 00 adc %eax,(%eax)
+ 2: 00 00 add %al,(%eax)
+ 4: 00 00 add %al,(%eax)
+ 6: 00 00 add %al,(%eax)
+ 8: 77 00 ja 0xa
+ a: 00 00 add %al,(%eax)
+ c: 43 inc %ebx
+ d: 72 65 jb 0x74
+ f: 61 popa
+ 10: 74 65 je 0x77
+ 12: 64 20 62 79 and %ah,%fs:0x79(%edx)
+ 16: 20 45 4c and %al,0x4c(%ebp)
+ 19: 46 inc %esi
+ 1a: 49 dec %ecx
+ 1b: 4f dec %edi
+ 1c: 00 00 add %al,(%eax)
+ ...
diff --git a/utils/bcmregtool/elfio/elfio/elf_types.hpp b/utils/bcmregtool/elfio/elfio/elf_types.hpp
new file mode 100644
index 0000000..a83e2cf
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elf_types.hpp
@@ -0,0 +1,851 @@
+/*
+Copyright (C) 2001-2015 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 ELFTYPES_H
+#define ELFTYPES_H
+
+#ifndef ELFIO_NO_OWN_TYPES
+ #if !defined(ELFIO_NO_CSTDINT) && !defined(ELFIO_NO_INTTYPES)
+ #include <stdint.h>
+ #else
+ typedef unsigned char uint8_t;
+ typedef signed char int8_t;
+ typedef unsigned short uint16_t;
+ typedef signed short int16_t;
+ #ifdef _MSC_VER
+ typedef unsigned __int32 uint32_t;
+ typedef signed __int32 int32_t;
+ typedef unsigned __int64 uint64_t;
+ typedef signed __int64 int64_t;
+ #else
+ typedef unsigned int uint32_t;
+ typedef signed int int32_t;
+ typedef unsigned long long uint64_t;
+ typedef signed long long int64_t;
+ #endif // _MSC_VER
+ #endif // ELFIO_NO_CSTDINT
+#endif // ELFIO_NO_OWN_TYPES
+
+namespace ELFIO {
+
+// Attention! Platform depended definitions.
+typedef uint16_t Elf_Half;
+typedef uint32_t Elf_Word;
+typedef int32_t Elf_Sword;
+typedef uint64_t Elf_Xword;
+typedef int64_t Elf_Sxword;
+
+typedef uint32_t Elf32_Addr;
+typedef uint32_t Elf32_Off;
+typedef uint64_t Elf64_Addr;
+typedef uint64_t Elf64_Off;
+
+#define Elf32_Half Elf_Half
+#define Elf64_Half Elf_Half
+#define Elf32_Word Elf_Word
+#define Elf64_Word Elf_Word
+#define Elf32_Sword Elf_Sword
+#define Elf64_Sword Elf_Sword
+
+///////////////////////
+// ELF Header Constants
+
+// File type
+#define ET_NONE 0
+#define ET_REL 1
+#define ET_EXEC 2
+#define ET_DYN 3
+#define ET_CORE 4
+#define ET_LOOS 0xFE00
+#define ET_HIOS 0xFEFF
+#define ET_LOPROC 0xFF00
+#define ET_HIPROC 0xFFFF
+
+
+#define EM_NONE 0 // No machine
+#define EM_M32 1 // AT&T WE 32100
+#define EM_SPARC 2 // SUN SPARC
+#define EM_386 3 // Intel 80386
+#define EM_68K 4 // Motorola m68k family
+#define EM_88K 5 // Motorola m88k family
+#define EM_486 6 // Intel 80486// Reserved for future use
+#define EM_860 7 // Intel 80860
+#define EM_MIPS 8 // MIPS R3000 (officially, big-endian only)
+#define EM_S370 9 // IBM System/370
+#define EM_MIPS_RS3_LE 10 // MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated
+#define EM_res011 11 // Reserved
+#define EM_res012 12 // Reserved
+#define EM_res013 13 // Reserved
+#define EM_res014 14 // Reserved
+#define EM_PARISC 15 // HPPA
+#define EM_res016 16 // Reserved
+#define EM_VPP550 17 // Fujitsu VPP500
+#define EM_SPARC32PLUS 18 // Sun's "v8plus"
+#define EM_960 19 // Intel 80960
+#define EM_PPC 20 // PowerPC
+#define EM_PPC64 21 // 64-bit PowerPC
+#define EM_S390 22 // IBM S/390
+#define EM_SPU 23 // Sony/Toshiba/IBM SPU
+#define EM_res024 24 // Reserved
+#define EM_res025 25 // Reserved
+#define EM_res026 26 // Reserved
+#define EM_res027 27 // Reserved
+#define EM_res028 28 // Reserved
+#define EM_res029 29 // Reserved
+#define EM_res030 30 // Reserved
+#define EM_res031 31 // Reserved
+#define EM_res032 32 // Reserved
+#define EM_res033 33 // Reserved
+#define EM_res034 34 // Reserved
+#define EM_res035 35 // Reserved
+#define EM_V800 36 // NEC V800 series
+#define EM_FR20 37 // Fujitsu FR20
+#define EM_RH32 38 // TRW RH32
+#define EM_MCORE 39 // Motorola M*Core // May also be taken by Fujitsu MMA
+#define EM_RCE 39 // Old name for MCore
+#define EM_ARM 40 // ARM
+#define EM_OLD_ALPHA 41 // Digital Alpha
+#define EM_SH 42 // Renesas (formerly Hitachi) / SuperH SH
+#define EM_SPARCV9 43 // SPARC v9 64-bit
+#define EM_TRICORE 44 // Siemens Tricore embedded processor
+#define EM_ARC 45 // ARC Cores
+#define EM_H8_300 46 // Renesas (formerly Hitachi) H8/300
+#define EM_H8_300H 47 // Renesas (formerly Hitachi) H8/300H
+#define EM_H8S 48 // Renesas (formerly Hitachi) H8S
+#define EM_H8_500 49 // Renesas (formerly Hitachi) H8/500
+#define EM_IA_64 50 // Intel IA-64 Processor
+#define EM_MIPS_X 51 // Stanford MIPS-X
+#define EM_COLDFIRE 52 // Motorola Coldfire
+#define EM_68HC12 53 // Motorola M68HC12
+#define EM_MMA 54 // Fujitsu Multimedia Accelerator
+#define EM_PCP 55 // Siemens PCP
+#define EM_NCPU 56 // Sony nCPU embedded RISC processor
+#define EM_NDR1 57 // Denso NDR1 microprocesspr
+#define EM_STARCORE 58 // Motorola Star*Core processor
+#define EM_ME16 59 // Toyota ME16 processor
+#define EM_ST100 60 // STMicroelectronics ST100 processor
+#define EM_TINYJ 61 // Advanced Logic Corp. TinyJ embedded processor
+#define EM_X86_64 62 // Advanced Micro Devices X86-64 processor
+#define EM_PDSP 63 // Sony DSP Processor
+#define EM_PDP10 64 // Digital Equipment Corp. PDP-10
+#define EM_PDP11 65 // Digital Equipment Corp. PDP-11
+#define EM_FX66 66 // Siemens FX66 microcontroller
+#define EM_ST9PLUS 67 // STMicroelectronics ST9+ 8/16 bit microcontroller
+#define EM_ST7 68 // STMicroelectronics ST7 8-bit microcontroller
+#define EM_68HC16 69 // Motorola MC68HC16 Microcontroller
+#define EM_68HC11 70 // Motorola MC68HC11 Microcontroller
+#define EM_68HC08 71 // Motorola MC68HC08 Microcontroller
+#define EM_68HC05 72 // Motorola MC68HC05 Microcontroller
+#define EM_SVX 73 // Silicon Graphics SVx
+#define EM_ST19 74 // STMicroelectronics ST19 8-bit cpu
+#define EM_VAX 75 // Digital VAX
+#define EM_CRIS 76 // Axis Communications 32-bit embedded processor
+#define EM_JAVELIN 77 // Infineon Technologies 32-bit embedded cpu
+#define EM_FIREPATH 78 // Element 14 64-bit DSP processor
+#define EM_ZSP 79 // LSI Logic's 16-bit DSP processor
+#define EM_MMIX 80 // Donald Knuth's educational 64-bit processor
+#define EM_HUANY 81 // Harvard's machine-independent format
+#define EM_PRISM 82 // SiTera Prism
+#define EM_AVR 83 // Atmel AVR 8-bit microcontroller
+#define EM_FR30 84 // Fujitsu FR30
+#define EM_D10V 85 // Mitsubishi D10V
+#define EM_D30V 86 // Mitsubishi D30V
+#define EM_V850 87 // NEC v850
+#define EM_M32R 88 // Renesas M32R (formerly Mitsubishi M32R)
+#define EM_MN10300 89 // Matsushita MN10300
+#define EM_MN10200 90 // Matsushita MN10200
+#define EM_PJ 91 // picoJava
+#define EM_OPENRISC 92 // OpenRISC 32-bit embedded processor
+#define EM_ARC_A5 93 // ARC Cores Tangent-A5
+#define EM_XTENSA 94 // Tensilica Xtensa Architecture
+#define EM_VIDEOCORE 95 // Alphamosaic VideoCore processor
+#define EM_TMM_GPP 96 // Thompson Multimedia General Purpose Processor
+#define EM_NS32K 97 // National Semiconductor 32000 series
+#define EM_TPC 98 // Tenor Network TPC processor
+#define EM_SNP1K 99 // Trebia SNP 1000 processor
+#define EM_ST200 100 // STMicroelectronics ST200 microcontroller
+#define EM_IP2K 101 // Ubicom IP2022 micro controller
+#define EM_MAX 102 // MAX Processor
+#define EM_CR 103 // National Semiconductor CompactRISC
+#define EM_F2MC16 104 // Fujitsu F2MC16
+#define EM_MSP430 105 // TI msp430 micro controller
+#define EM_BLACKFIN 106 // ADI Blackfin
+#define EM_SE_C33 107 // S1C33 Family of Seiko Epson processors
+#define EM_SEP 108 // Sharp embedded microprocessor
+#define EM_ARCA 109 // Arca RISC Microprocessor
+#define EM_UNICORE 110 // Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University
+#define EM_EXCESS 111 // eXcess: 16/32/64-bit configurable embedded CPU
+#define EM_DXP 112 // Icera Semiconductor Inc. Deep Execution Processor
+#define EM_ALTERA_NIOS2 113 // Altera Nios II soft-core processor
+#define EM_CRX 114 // National Semiconductor CRX
+#define EM_XGATE 115 // Motorola XGATE embedded processor
+#define EM_C166 116 // Infineon C16x/XC16x processor
+#define EM_M16C 117 // Renesas M16C series microprocessors
+#define EM_DSPIC30F 118 // Microchip Technology dsPIC30F Digital Signal Controller
+#define EM_CE 119 // Freescale Communication Engine RISC core
+#define EM_M32C 120 // Renesas M32C series microprocessors
+#define EM_res121 121 // Reserved
+#define EM_res122 122 // Reserved
+#define EM_res123 123 // Reserved
+#define EM_res124 124 // Reserved
+#define EM_res125 125 // Reserved
+#define EM_res126 126 // Reserved
+#define EM_res127 127 // Reserved
+#define EM_res128 128 // Reserved
+#define EM_res129 129 // Reserved
+#define EM_res130 130 // Reserved
+#define EM_TSK3000 131 // Altium TSK3000 core
+#define EM_RS08 132 // Freescale RS08 embedded processor
+#define EM_res133 133 // Reserved
+#define EM_ECOG2 134 // Cyan Technology eCOG2 microprocessor
+#define EM_SCORE 135 // Sunplus Score
+#define EM_SCORE7 135 // Sunplus S+core7 RISC processor
+#define EM_DSP24 136 // New Japan Radio (NJR) 24-bit DSP Processor
+#define EM_VIDEOCORE3 137 // Broadcom VideoCore III processor
+#define EM_LATTICEMICO32 138 // RISC processor for Lattice FPGA architecture
+#define EM_SE_C17 139 // Seiko Epson C17 family
+#define EM_TI_C6000 140 // Texas Instruments TMS320C6000 DSP family
+#define EM_TI_C2000 141 // Texas Instruments TMS320C2000 DSP family
+#define EM_TI_C5500 142 // Texas Instruments TMS320C55x DSP family
+#define EM_res143 143 // Reserved
+#define EM_res144 144 // Reserved
+#define EM_res145 145 // Reserved
+#define EM_res146 146 // Reserved
+#define EM_res147 147 // Reserved
+#define EM_res148 148 // Reserved
+#define EM_res149 149 // Reserved
+#define EM_res150 150 // Reserved
+#define EM_res151 151 // Reserved
+#define EM_res152 152 // Reserved
+#define EM_res153 153 // Reserved
+#define EM_res154 154 // Reserved
+#define EM_res155 155 // Reserved
+#define EM_res156 156 // Reserved
+#define EM_res157 157 // Reserved
+#define EM_res158 158 // Reserved
+#define EM_res159 159 // Reserved
+#define EM_MMDSP_PLUS 160 // STMicroelectronics 64bit VLIW Data Signal Processor
+#define EM_CYPRESS_M8C 161 // Cypress M8C microprocessor
+#define EM_R32C 162 // Renesas R32C series microprocessors
+#define EM_TRIMEDIA 163 // NXP Semiconductors TriMedia architecture family
+#define EM_QDSP6 164 // QUALCOMM DSP6 Processor
+#define EM_8051 165 // Intel 8051 and variants
+#define EM_STXP7X 166 // STMicroelectronics STxP7x family
+#define EM_NDS32 167 // Andes Technology compact code size embedded RISC processor family
+#define EM_ECOG1 168 // Cyan Technology eCOG1X family
+#define EM_ECOG1X 168 // Cyan Technology eCOG1X family
+#define EM_MAXQ30 169 // Dallas Semiconductor MAXQ30 Core Micro-controllers
+#define EM_XIMO16 170 // New Japan Radio (NJR) 16-bit DSP Processor
+#define EM_MANIK 171 // M2000 Reconfigurable RISC Microprocessor
+#define EM_CRAYNV2 172 // Cray Inc. NV2 vector architecture
+#define EM_RX 173 // Renesas RX family
+#define EM_METAG 174 // Imagination Technologies META processor architecture
+#define EM_MCST_ELBRUS 175 // MCST Elbrus general purpose hardware architecture
+#define EM_ECOG16 176 // Cyan Technology eCOG16 family
+#define EM_CR16 177 // National Semiconductor CompactRISC 16-bit processor
+#define EM_ETPU 178 // Freescale Extended Time Processing Unit
+#define EM_SLE9X 179 // Infineon Technologies SLE9X core
+#define EM_L1OM 180 // Intel L1OM
+#define EM_INTEL181 181 // Reserved by Intel
+#define EM_INTEL182 182 // Reserved by Intel
+#define EM_res183 183 // Reserved by ARM
+#define EM_res184 184 // Reserved by ARM
+#define EM_AVR32 185 // Atmel Corporation 32-bit microprocessor family
+#define EM_STM8 186 // STMicroeletronics STM8 8-bit microcontroller
+#define EM_TILE64 187 // Tilera TILE64 multicore architecture family
+#define EM_TILEPRO 188 // Tilera TILEPro multicore architecture family
+#define EM_MICROBLAZE 189 // Xilinx MicroBlaze 32-bit RISC soft processor core
+#define EM_CUDA 190 // NVIDIA CUDA architecture
+#define EM_TILEGX 191 // Tilera TILE-Gx multicore architecture family
+#define EM_CLOUDSHIELD 192 // CloudShield architecture family
+#define EM_COREA_1ST 193 // KIPO-KAIST Core-A 1st generation processor family
+#define EM_COREA_2ND 194 // KIPO-KAIST Core-A 2nd generation processor family
+#define EM_ARC_COMPACT2 195 // Synopsys ARCompact V2
+#define EM_OPEN8 196 // Open8 8-bit RISC soft processor core
+#define EM_RL78 197 // Renesas RL78 family
+#define EM_VIDEOCORE5 198 // Broadcom VideoCore V processor
+#define EM_78KOR 199 // Renesas 78KOR family
+#define EM_56800EX 200 // Freescale 56800EX Digital Signal Controller (DSC)
+#define EM_BA1 201 // Beyond BA1 CPU architecture
+#define EM_BA2 202 // Beyond BA2 CPU architecture
+#define EM_XCORE 203 // XMOS xCORE processor family
+#define EM_MCHP_PIC 204 // Microchip 8-bit PIC(r) family
+#define EM_INTEL205 205 // Reserved by Intel
+#define EM_INTEL206 206 // Reserved by Intel
+#define EM_INTEL207 207 // Reserved by Intel
+#define EM_INTEL208 208 // Reserved by Intel
+#define EM_INTEL209 209 // Reserved by Intel
+#define EM_KM32 210 // KM211 KM32 32-bit processor
+#define EM_KMX32 211 // KM211 KMX32 32-bit processor
+#define EM_KMX16 212 // KM211 KMX16 16-bit processor
+#define EM_KMX8 213 // KM211 KMX8 8-bit processor
+#define EM_KVARC 214 // KM211 KVARC processor
+#define EM_CDP 215 // Paneve CDP architecture family
+#define EM_COGE 216 // Cognitive Smart Memory Processor
+#define EM_COOL 217 // iCelero CoolEngine
+#define EM_NORC 218 // Nanoradio Optimized RISC
+#define EM_CSR_KALIMBA 219 // CSR Kalimba architecture family
+#define EM_Z80 220 // Zilog Z80
+#define EM_VISIUM 221 // Controls and Data Services VISIUMcore processor
+#define EM_FT32 222 // FTDI Chip FT32 high performance 32-bit RISC architecture
+#define EM_MOXIE 223 // Moxie processor family
+#define EM_AMDGPU 224 // AMD GPU architecture
+#define EM_RISCV 243 // RISC-V
+#define EM_LANAI 244 // Lanai processor
+#define EM_CEVA 245 // CEVA Processor Architecture Family
+#define EM_CEVA_X2 246 // CEVA X2 Processor Family
+#define EM_BPF 247 // Linux BPF – in-kernel virtual machine
+
+// File version
+#define EV_NONE 0
+#define EV_CURRENT 1
+
+// Identification index
+#define EI_MAG0 0
+#define EI_MAG1 1
+#define EI_MAG2 2
+#define EI_MAG3 3
+#define EI_CLASS 4
+#define EI_DATA 5
+#define EI_VERSION 6
+#define EI_OSABI 7
+#define EI_ABIVERSION 8
+#define EI_PAD 9
+#define EI_NIDENT 16
+
+// Magic number
+#define ELFMAG0 0x7F
+#define ELFMAG1 'E'
+#define ELFMAG2 'L'
+#define ELFMAG3 'F'
+
+// File class
+#define ELFCLASSNONE 0
+#define ELFCLASS32 1
+#define ELFCLASS64 2
+
+// Encoding
+#define ELFDATANONE 0
+#define ELFDATA2LSB 1
+#define ELFDATA2MSB 2
+
+// OS extensions
+#define ELFOSABI_NONE 0 // No extensions or unspecified
+#define ELFOSABI_HPUX 1 // Hewlett-Packard HP-UX
+#define ELFOSABI_NETBSD 2 // NetBSD
+#define ELFOSABI_LINUX 3 // Linux
+#define ELFOSABI_SOLARIS 6 // Sun Solaris
+#define ELFOSABI_AIX 7 // AIX
+#define ELFOSABI_IRIX 8 // IRIX
+#define ELFOSABI_FREEBSD 9 // FreeBSD
+#define ELFOSABI_TRU64 10 // Compaq TRU64 UNIX
+#define ELFOSABI_MODESTO 11 // Novell Modesto
+#define ELFOSABI_OPENBSD 12 // Open BSD
+#define ELFOSABI_OPENVMS 13 // Open VMS
+#define ELFOSABI_NSK 14 // Hewlett-Packard Non-Stop Kernel
+#define ELFOSABI_AROS 15 // Amiga Research OS
+#define ELFOSABI_FENIXOS 16 // The FenixOS highly scalable multi-core OS
+// 64-255 Architecture-specific value range
+#define ELFOSABI_AMDGPU_HSA 64 // AMDGPU OS for HSA compatible compute
+ // kernels.
+#define ELFOSABI_AMDGPU_PAL 65 // AMDGPU OS for AMD PAL compatible graphics
+ // shaders and compute kernels.
+#define ELFOSABI_AMDGPU_MESA3D 66 // AMDGPU OS for Mesa3D compatible graphics
+ // shaders and compute kernels.
+
+
+// AMDGPU specific e_flags
+#define EF_AMDGPU_MACH 0x0ff // AMDGPU processor selection mask.
+#define EF_AMDGPU_XNACK 0x100 // Indicates if the XNACK target feature is
+ // enabled for all code contained in the ELF.
+// AMDGPU processors
+#define EF_AMDGPU_MACH_NONE 0x000 // Unspecified processor.
+#define EF_AMDGPU_MACH_R600_R600 0x001
+#define EF_AMDGPU_MACH_R600_R630 0x002
+#define EF_AMDGPU_MACH_R600_RS880 0x003
+#define EF_AMDGPU_MACH_R600_RV670 0x004
+#define EF_AMDGPU_MACH_R600_RV710 0x005
+#define EF_AMDGPU_MACH_R600_RV730 0x006
+#define EF_AMDGPU_MACH_R600_RV770 0x007
+#define EF_AMDGPU_MACH_R600_CEDAR 0x008
+#define EF_AMDGPU_MACH_R600_CYPRESS 0x009
+#define EF_AMDGPU_MACH_R600_JUNIPER 0x00a
+#define EF_AMDGPU_MACH_R600_REDWOOD 0x00b
+#define EF_AMDGPU_MACH_R600_SUMO 0x00c
+#define EF_AMDGPU_MACH_R600_BARTS 0x00d
+#define EF_AMDGPU_MACH_R600_CAICOS 0x00e
+#define EF_AMDGPU_MACH_R600_CAYMAN 0x00f
+#define EF_AMDGPU_MACH_R600_TURKS 0x010
+#define EF_AMDGPU_MACH_R600_RESERVED_FIRST 0x011
+#define EF_AMDGPU_MACH_R600_RESERVED_LAST 0x01f
+#define EF_AMDGPU_MACH_R600_FIRST EF_AMDGPU_MACH_R600_R600
+#define EF_AMDGPU_MACH_R600_LAST EF_AMDGPU_MACH_R600_TURKS
+#define EF_AMDGPU_MACH_AMDGCN_GFX600 0x020
+#define EF_AMDGPU_MACH_AMDGCN_GFX601 0x021
+#define EF_AMDGPU_MACH_AMDGCN_GFX700 0x022
+#define EF_AMDGPU_MACH_AMDGCN_GFX701 0x023
+#define EF_AMDGPU_MACH_AMDGCN_GFX702 0x024
+#define EF_AMDGPU_MACH_AMDGCN_GFX703 0x025
+#define EF_AMDGPU_MACH_AMDGCN_GFX704 0x026
+#define EF_AMDGPU_MACH_AMDGCN_GFX801 0x028
+#define EF_AMDGPU_MACH_AMDGCN_GFX802 0x029
+#define EF_AMDGPU_MACH_AMDGCN_GFX803 0x02a
+#define EF_AMDGPU_MACH_AMDGCN_GFX810 0x02b
+#define EF_AMDGPU_MACH_AMDGCN_GFX900 0x02c
+#define EF_AMDGPU_MACH_AMDGCN_GFX902 0x02d
+#define EF_AMDGPU_MACH_AMDGCN_GFX904 0x02e
+#define EF_AMDGPU_MACH_AMDGCN_GFX906 0x02f
+#define EF_AMDGPU_MACH_AMDGCN_RESERVED0 0x027
+#define EF_AMDGPU_MACH_AMDGCN_RESERVED1 0x030
+#define EF_AMDGPU_MACH_AMDGCN_FIRST EF_AMDGPU_MACH_AMDGCN_GFX600
+#define EF_AMDGPU_MACH_AMDGCN_LAST EF_AMDGPU_MACH_AMDGCN_GFX906
+
+/////////////////////
+// Sections constants
+
+// Section indexes
+#define SHN_UNDEF 0
+#define SHN_LORESERVE 0xFF00
+#define SHN_LOPROC 0xFF00
+#define SHN_HIPROC 0xFF1F
+#define SHN_LOOS 0xFF20
+#define SHN_HIOS 0xFF3F
+#define SHN_ABS 0xFFF1
+#define SHN_COMMON 0xFFF2
+#define SHN_XINDEX 0xFFFF
+#define SHN_HIRESERVE 0xFFFF
+
+// Section types
+#define SHT_NULL 0
+#define SHT_PROGBITS 1
+#define SHT_SYMTAB 2
+#define SHT_STRTAB 3
+#define SHT_RELA 4
+#define SHT_HASH 5
+#define SHT_DYNAMIC 6
+#define SHT_NOTE 7
+#define SHT_NOBITS 8
+#define SHT_REL 9
+#define SHT_SHLIB 10
+#define SHT_DYNSYM 11
+#define SHT_INIT_ARRAY 14
+#define SHT_FINI_ARRAY 15
+#define SHT_PREINIT_ARRAY 16
+#define SHT_GROUP 17
+#define SHT_SYMTAB_SHNDX 18
+#define SHT_LOOS 0x60000000
+#define SHT_HIOS 0x6fffffff
+#define SHT_LOPROC 0x70000000
+#define SHT_HIPROC 0x7FFFFFFF
+#define SHT_LOUSER 0x80000000
+#define SHT_HIUSER 0xFFFFFFFF
+
+// Section attribute flags
+#define SHF_WRITE 0x1
+#define SHF_ALLOC 0x2
+#define SHF_EXECINSTR 0x4
+#define SHF_MERGE 0x10
+#define SHF_STRINGS 0x20
+#define SHF_INFO_LINK 0x40
+#define SHF_LINK_ORDER 0x80
+#define SHF_OS_NONCONFORMING 0x100
+#define SHF_GROUP 0x200
+#define SHF_TLS 0x400
+#define SHF_MASKOS 0x0ff00000
+#define SHF_MASKPROC 0xF0000000
+
+// Section group flags
+#define GRP_COMDAT 0x1
+#define GRP_MASKOS 0x0ff00000
+#define GRP_MASKPROC 0xf0000000
+
+// Symbol binding
+#define STB_LOCAL 0
+#define STB_GLOBAL 1
+#define STB_WEAK 2
+#define STB_LOOS 10
+#define STB_HIOS 12
+#define STB_MULTIDEF 13
+#define STB_LOPROC 13
+#define STB_HIPROC 15
+
+// Note types
+#define NT_AMDGPU_METADATA 1
+#define NT_AMD_AMDGPU_HSA_METADATA 10
+#define NT_AMD_AMDGPU_ISA 11
+#define NT_AMD_AMDGPU_PAL_METADATA 12
+
+// Symbol types
+#define STT_NOTYPE 0
+#define STT_OBJECT 1
+#define STT_FUNC 2
+#define STT_SECTION 3
+#define STT_FILE 4
+#define STT_COMMON 5
+#define STT_TLS 6
+#define STT_LOOS 10
+#define STT_AMDGPU_HSA_KERNEL 10
+#define STT_HIOS 12
+#define STT_LOPROC 13
+#define STT_HIPROC 15
+
+// Symbol visibility
+#define STV_DEFAULT 0
+#define STV_INTERNAL 1
+#define STV_HIDDEN 2
+#define STV_PROTECTED 3
+
+// Undefined name
+#define STN_UNDEF 0
+
+// Relocation types
+#define R_386_NONE 0
+#define R_X86_64_NONE 0
+#define R_AMDGPU_NONE 0
+#define R_386_32 1
+#define R_X86_64_64 1
+#define R_AMDGPU_ABS32_LO 1
+#define R_386_PC32 2
+#define R_X86_64_PC32 2
+#define R_AMDGPU_ABS32_HI 2
+#define R_386_GOT32 3
+#define R_X86_64_GOT32 3
+#define R_AMDGPU_ABS64 3
+#define R_386_PLT32 4
+#define R_X86_64_PLT32 4
+#define R_AMDGPU_REL32 4
+#define R_386_COPY 5
+#define R_X86_64_COPY 5
+#define R_AMDGPU_REL64 5
+#define R_386_GLOB_DAT 6
+#define R_X86_64_GLOB_DAT 6
+#define R_AMDGPU_ABS32 6
+#define R_386_JMP_SLOT 7
+#define R_X86_64_JUMP_SLOT 7
+#define R_AMDGPU_GOTPCREL 7
+#define R_386_RELATIVE 8
+#define R_X86_64_RELATIVE 8
+#define R_AMDGPU_GOTPCREL32_LO 8
+#define R_386_GOTOFF 9
+#define R_X86_64_GOTPCREL 9
+#define R_AMDGPU_GOTPCREL32_HI 9
+#define R_386_GOTPC 10
+#define R_X86_64_32 10
+#define R_AMDGPU_REL32_LO 10
+#define R_386_32PLT 11
+#define R_X86_64_32S 11
+#define R_AMDGPU_REL32_HI 11
+#define R_X86_64_16 12
+#define R_X86_64_PC16 13
+#define R_AMDGPU_RELATIVE64 13
+#define R_386_TLS_TPOFF 14
+#define R_X86_64_8 14
+#define R_386_TLS_IE 15
+#define R_X86_64_PC8 15
+#define R_386_TLS_GOTIE 16
+#define R_X86_64_DTPMOD64 16
+#define R_386_TLS_LE 17
+#define R_X86_64_DTPOFF64 17
+#define R_386_TLS_GD 18
+#define R_X86_64_TPOFF64 18
+#define R_386_TLS_LDM 19
+#define R_X86_64_TLSGD 19
+#define R_386_16 20
+#define R_X86_64_TLSLD 20
+#define R_386_PC16 21
+#define R_X86_64_DTPOFF32 21
+#define R_386_8 22
+#define R_X86_64_GOTTPOFF 22
+#define R_386_PC8 23
+#define R_X86_64_TPOFF32 23
+#define R_386_TLS_GD_32 24
+#define R_X86_64_PC64 24
+#define R_386_TLS_GD_PUSH 25
+#define R_X86_64_GOTOFF64 25
+#define R_386_TLS_GD_CALL 26
+#define R_X86_64_GOTPC32 26
+#define R_386_TLS_GD_POP 27
+#define R_X86_64_GOT64 27
+#define R_386_TLS_LDM_32 28
+#define R_X86_64_GOTPCREL64 28
+#define R_386_TLS_LDM_PUSH 29
+#define R_X86_64_GOTPC64 29
+#define R_386_TLS_LDM_CALL 30
+#define R_X86_64_GOTPLT64 30
+#define R_386_TLS_LDM_POP 31
+#define R_X86_64_PLTOFF64 31
+#define R_386_TLS_LDO_32 32
+#define R_386_TLS_IE_32 33
+#define R_386_TLS_LE_32 34
+#define R_X86_64_GOTPC32_TLSDESC 34
+#define R_386_TLS_DTPMOD32 35
+#define R_X86_64_TLSDESC_CALL 35
+#define R_386_TLS_DTPOFF32 36
+#define R_X86_64_TLSDESC 36
+#define R_386_TLS_TPOFF32 37
+#define R_X86_64_IRELATIVE 37
+#define R_386_SIZE32 38
+#define R_386_TLS_GOTDESC 39
+#define R_386_TLS_DESC_CALL 40
+#define R_386_TLS_DESC 41
+#define R_386_IRELATIVE 42
+#define R_386_GOT32X 43
+#define R_X86_64_GNU_VTINHERIT 250
+#define R_X86_64_GNU_VTENTRY 251
+
+// Segment types
+#define PT_NULL 0
+#define PT_LOAD 1
+#define PT_DYNAMIC 2
+#define PT_INTERP 3
+#define PT_NOTE 4
+#define PT_SHLIB 5
+#define PT_PHDR 6
+#define PT_TLS 7
+#define PT_LOOS 0x60000000
+#define PT_HIOS 0x6fffffff
+#define PT_LOPROC 0x70000000
+#define PT_HIPROC 0x7FFFFFFF
+
+// Segment flags
+#define PF_X 1 // Execute
+#define PF_W 2 // Write
+#define PF_R 4 // Read
+#define PF_MASKOS 0x0ff00000 // Unspecified
+#define PF_MASKPROC 0xf0000000 // Unspecified
+
+// Dynamic Array Tags
+#define DT_NULL 0
+#define DT_NEEDED 1
+#define DT_PLTRELSZ 2
+#define DT_PLTGOT 3
+#define DT_HASH 4
+#define DT_STRTAB 5
+#define DT_SYMTAB 6
+#define DT_RELA 7
+#define DT_RELASZ 8
+#define DT_RELAENT 9
+#define DT_STRSZ 10
+#define DT_SYMENT 11
+#define DT_INIT 12
+#define DT_FINI 13
+#define DT_SONAME 14
+#define DT_RPATH 15
+#define DT_SYMBOLIC 16
+#define DT_REL 17
+#define DT_RELSZ 18
+#define DT_RELENT 19
+#define DT_PLTREL 20
+#define DT_DEBUG 21
+#define DT_TEXTREL 22
+#define DT_JMPREL 23
+#define DT_BIND_NOW 24
+#define DT_INIT_ARRAY 25
+#define DT_FINI_ARRAY 26
+#define DT_INIT_ARRAYSZ 27
+#define DT_FINI_ARRAYSZ 28
+#define DT_RUNPATH 29
+#define DT_FLAGS 30
+#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
+#define DT_HIPROC 0x7FFFFFFF
+
+// DT_FLAGS values
+#define DF_ORIGIN 0x1
+#define DF_SYMBOLIC 0x2
+#define DF_TEXTREL 0x4
+#define DF_BIND_NOW 0x8
+#define DF_STATIC_TLS 0x10
+
+
+// ELF file header
+struct Elf32_Ehdr {
+ unsigned char e_ident[EI_NIDENT];
+ Elf_Half e_type;
+ Elf_Half e_machine;
+ Elf_Word e_version;
+ Elf32_Addr e_entry;
+ Elf32_Off e_phoff;
+ Elf32_Off e_shoff;
+ Elf_Word e_flags;
+ Elf_Half e_ehsize;
+ Elf_Half e_phentsize;
+ Elf_Half e_phnum;
+ Elf_Half e_shentsize;
+ Elf_Half e_shnum;
+ Elf_Half e_shstrndx;
+};
+
+struct Elf64_Ehdr {
+ unsigned char e_ident[EI_NIDENT];
+ Elf_Half e_type;
+ Elf_Half e_machine;
+ Elf_Word e_version;
+ Elf64_Addr e_entry;
+ Elf64_Off e_phoff;
+ Elf64_Off e_shoff;
+ Elf_Word e_flags;
+ Elf_Half e_ehsize;
+ Elf_Half e_phentsize;
+ Elf_Half e_phnum;
+ Elf_Half e_shentsize;
+ Elf_Half e_shnum;
+ Elf_Half e_shstrndx;
+};
+
+
+// Section header
+struct Elf32_Shdr {
+ Elf_Word sh_name;
+ Elf_Word sh_type;
+ Elf_Word sh_flags;
+ Elf32_Addr sh_addr;
+ Elf32_Off sh_offset;
+ Elf_Word sh_size;
+ Elf_Word sh_link;
+ Elf_Word sh_info;
+ Elf_Word sh_addralign;
+ Elf_Word sh_entsize;
+};
+
+struct Elf64_Shdr {
+ Elf_Word sh_name;
+ Elf_Word sh_type;
+ Elf_Xword sh_flags;
+ Elf64_Addr sh_addr;
+ Elf64_Off sh_offset;
+ Elf_Xword sh_size;
+ Elf_Word sh_link;
+ Elf_Word sh_info;
+ Elf_Xword sh_addralign;
+ Elf_Xword sh_entsize;
+};
+
+
+// Segment header
+struct Elf32_Phdr {
+ Elf_Word p_type;
+ Elf32_Off p_offset;
+ Elf32_Addr p_vaddr;
+ Elf32_Addr p_paddr;
+ Elf_Word p_filesz;
+ Elf_Word p_memsz;
+ Elf_Word p_flags;
+ Elf_Word p_align;
+};
+
+struct Elf64_Phdr {
+ Elf_Word p_type;
+ Elf_Word p_flags;
+ Elf64_Off p_offset;
+ Elf64_Addr p_vaddr;
+ Elf64_Addr p_paddr;
+ Elf_Xword p_filesz;
+ Elf_Xword p_memsz;
+ Elf_Xword p_align;
+};
+
+
+// Symbol table entry
+struct Elf32_Sym {
+ Elf_Word st_name;
+ Elf32_Addr st_value;
+ Elf_Word st_size;
+ unsigned char st_info;
+ unsigned char st_other;
+ Elf_Half st_shndx;
+};
+
+struct Elf64_Sym {
+ Elf_Word st_name;
+ unsigned char st_info;
+ unsigned char st_other;
+ Elf_Half st_shndx;
+ Elf64_Addr st_value;
+ Elf_Xword st_size;
+};
+
+
+#define ELF_ST_BIND(i) ((i)>>4)
+#define ELF_ST_TYPE(i) ((i)&0xf)
+#define ELF_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
+
+#define ELF_ST_VISIBILITY(o) ((o)&0x3)
+
+
+// Relocation entries
+struct Elf32_Rel {
+ Elf32_Addr r_offset;
+ Elf_Word r_info;
+};
+
+struct Elf32_Rela {
+ Elf32_Addr r_offset;
+ Elf_Word r_info;
+ Elf_Sword r_addend;
+};
+
+struct Elf64_Rel {
+ Elf64_Addr r_offset;
+ Elf_Xword r_info;
+};
+
+struct Elf64_Rela {
+ Elf64_Addr r_offset;
+ Elf_Xword r_info;
+ Elf_Sxword r_addend;
+};
+
+
+#define ELF32_R_SYM(i) ((i)>>8)
+#define ELF32_R_TYPE(i) ((unsigned char)(i))
+#define ELF32_R_INFO(s,t) (((s)<<8 )+(unsigned char)(t))
+
+#define ELF64_R_SYM(i) ((i)>>32)
+#define ELF64_R_TYPE(i) ((i)&0xffffffffL)
+#define ELF64_R_INFO(s,t) ((((int64_t)s)<<32)+((t)&0xffffffffL))
+
+// Dynamic structure
+struct Elf32_Dyn {
+ Elf_Sword d_tag;
+ union {
+ Elf_Word d_val;
+ Elf32_Addr d_ptr;
+ } d_un;
+};
+
+struct Elf64_Dyn {
+ Elf_Sxword d_tag;
+ union {
+ Elf_Xword d_val;
+ Elf64_Addr d_ptr;
+ } d_un;
+};
+
+} // namespace ELFIO
+
+#endif // ELFTYPES_H
diff --git a/utils/bcmregtool/elfio/elfio/elfio.hpp b/utils/bcmregtool/elfio/elfio/elfio.hpp
new file mode 100644
index 0000000..a4052bd
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio.hpp
@@ -0,0 +1,947 @@
+/*
+Copyright (C) 2001-2015 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_HPP
+#define ELFIO_HPP
+
+#ifdef _MSC_VER
+#pragma warning ( push )
+#pragma warning(disable:4996)
+#pragma warning(disable:4355)
+#pragma warning(disable:4244)
+#endif
+
+#include <string>
+#include <iostream>
+#include <fstream>
+#include <algorithm>
+#include <vector>
+#include <deque>
+#include <iterator>
+#include <typeinfo>
+
+#include <elfio/elf_types.hpp>
+#include <elfio/elfio_utils.hpp>
+#include <elfio/elfio_header.hpp>
+#include <elfio/elfio_section.hpp>
+#include <elfio/elfio_segment.hpp>
+#include <elfio/elfio_strings.hpp>
+
+#define ELFIO_HEADER_ACCESS_GET( TYPE, FNAME ) \
+TYPE \
+get_##FNAME() const \
+{ \
+ return header? header->get_##FNAME() : 0; \
+}
+
+#define ELFIO_HEADER_ACCESS_GET_SET( TYPE, FNAME ) \
+TYPE \
+get_##FNAME() const \
+{ \
+ return header? header->get_##FNAME() : 0; \
+} \
+void \
+set_##FNAME( TYPE val ) \
+{ \
+ if (header) { \
+ header->set_##FNAME( val ); \
+ } \
+} \
+
+namespace ELFIO {
+
+//------------------------------------------------------------------------------
+class elfio
+{
+ public:
+//------------------------------------------------------------------------------
+ elfio() : sections( this ), segments( this )
+ {
+ header = 0;
+ current_file_pos = 0;
+ create( ELFCLASS32, ELFDATA2LSB );
+ }
+
+//------------------------------------------------------------------------------
+ ~elfio()
+ {
+ clean();
+ }
+
+//------------------------------------------------------------------------------
+ void create( unsigned char file_class, unsigned char encoding )
+ {
+ clean();
+ convertor.setup( encoding );
+ header = create_header( file_class, encoding );
+ create_mandatory_sections();
+ }
+
+//------------------------------------------------------------------------------
+ bool load( const std::string& file_name )
+ {
+ std::ifstream stream;
+ stream.open( file_name.c_str(), std::ios::in | std::ios::binary );
+ if ( !stream ) {
+ return false;
+ }
+
+ return load(stream);
+ }
+
+//------------------------------------------------------------------------------
+ bool load( std::istream &stream )
+ {
+ clean();
+
+ unsigned char e_ident[EI_NIDENT];
+ // Read ELF file signature
+ stream.read( reinterpret_cast<char*>( &e_ident ), sizeof( e_ident ) );
+
+ // Is it ELF file?
+ if ( stream.gcount() != sizeof( e_ident ) ||
+ e_ident[EI_MAG0] != ELFMAG0 ||
+ e_ident[EI_MAG1] != ELFMAG1 ||
+ e_ident[EI_MAG2] != ELFMAG2 ||
+ e_ident[EI_MAG3] != ELFMAG3 ) {
+ return false;
+ }
+
+ if ( ( e_ident[EI_CLASS] != ELFCLASS64 ) &&
+ ( e_ident[EI_CLASS] != ELFCLASS32 )) {
+ return false;
+ }
+
+ convertor.setup( e_ident[EI_DATA] );
+ header = create_header( e_ident[EI_CLASS], e_ident[EI_DATA] );
+ if ( 0 == header ) {
+ return false;
+ }
+ if ( !header->load( stream ) ) {
+ return false;
+ }
+
+ load_sections( stream );
+ bool is_still_good = load_segments( stream );
+ return is_still_good;
+ }
+
+//------------------------------------------------------------------------------
+ bool save( const std::string& file_name )
+ {
+ std::ofstream f( file_name.c_str(), std::ios::out | std::ios::binary );
+
+ if ( !f || !header) {
+ return false;
+ }
+
+ bool is_still_good = true;
+ // Define layout specific header fields
+ // The position of the segment table is fixed after the header.
+ // The position of the section table is variable and needs to be fixed
+ // before saving.
+ header->set_segments_num( segments.size() );
+ header->set_segments_offset( segments.size() ? header->get_header_size() : 0 );
+ header->set_sections_num( sections.size() );
+ header->set_sections_offset( 0 );
+
+ // Layout the first section right after the segment table
+ current_file_pos = header->get_header_size() +
+ header->get_segment_entry_size() * header->get_segments_num();
+
+ calc_segment_alignment();
+
+ is_still_good = layout_segments_and_their_sections();
+ is_still_good = is_still_good && layout_sections_without_segments();
+ is_still_good = is_still_good && layout_section_table();
+
+ is_still_good = is_still_good && save_header( f );
+ is_still_good = is_still_good && save_sections( f );
+ is_still_good = is_still_good && save_segments( f );
+
+ f.close();
+
+ return is_still_good;
+ }
+
+//------------------------------------------------------------------------------
+ // ELF header access functions
+ ELFIO_HEADER_ACCESS_GET( unsigned char, class );
+ ELFIO_HEADER_ACCESS_GET( unsigned char, elf_version );
+ ELFIO_HEADER_ACCESS_GET( unsigned char, encoding );
+ ELFIO_HEADER_ACCESS_GET( Elf_Word, version );
+ ELFIO_HEADER_ACCESS_GET( Elf_Half, header_size );
+ ELFIO_HEADER_ACCESS_GET( Elf_Half, section_entry_size );
+ ELFIO_HEADER_ACCESS_GET( Elf_Half, segment_entry_size );
+
+ ELFIO_HEADER_ACCESS_GET_SET( unsigned char, os_abi );
+ ELFIO_HEADER_ACCESS_GET_SET( unsigned char, abi_version );
+ ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, type );
+ ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, machine );
+ ELFIO_HEADER_ACCESS_GET_SET( Elf_Word, flags );
+ ELFIO_HEADER_ACCESS_GET_SET( Elf64_Addr, entry );
+ ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, sections_offset );
+ ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, segments_offset );
+ ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, section_name_str_index );
+
+//------------------------------------------------------------------------------
+ const endianess_convertor& get_convertor() const
+ {
+ return convertor;
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Xword get_default_entry_size( Elf_Word section_type ) const
+ {
+ switch( section_type ) {
+ case SHT_RELA:
+ if ( header->get_class() == ELFCLASS64 ) {
+ return sizeof( Elf64_Rela );
+ }
+ else {
+ return sizeof( Elf32_Rela );
+ }
+ case SHT_REL:
+ if ( header->get_class() == ELFCLASS64 ) {
+ return sizeof( Elf64_Rel );
+ }
+ else {
+ return sizeof( Elf32_Rel );
+ }
+ case SHT_SYMTAB:
+ if ( header->get_class() == ELFCLASS64 ) {
+ return sizeof( Elf64_Sym );
+ }
+ else {
+ return sizeof( Elf32_Sym );
+ }
+ case SHT_DYNAMIC:
+ if ( header->get_class() == ELFCLASS64 ) {
+ return sizeof( Elf64_Dyn );
+ }
+ else {
+ return sizeof( Elf32_Dyn );
+ }
+ default:
+ return 0;
+ }
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ bool is_offset_in_section( Elf64_Off offset, const section* sec ) const {
+ return offset >= sec->get_offset() && offset < sec->get_offset()+sec->get_size();
+ }
+
+//------------------------------------------------------------------------------
+ public:
+
+ //! returns an empty string if no problems are detected,
+ //! or a string containing an error message if problems are found
+ std::string validate() const {
+
+ // check for overlapping sections in the file
+ for ( int i = 0; i < sections.size(); ++i) {
+ for ( int j = i+1; j < sections.size(); ++j ) {
+ const section* a = sections[i];
+ const section* b = sections[j];
+ if ( !(a->get_type() & SHT_NOBITS)
+ && !(b->get_type() & SHT_NOBITS)
+ && (a->get_size() > 0)
+ && (b->get_size() > 0)
+ && (a->get_offset() > 0)
+ && (b->get_offset() > 0)) {
+ if ( is_offset_in_section( a->get_offset(), b )
+ || is_offset_in_section( a->get_offset()+a->get_size()-1, b )
+ || is_offset_in_section( b->get_offset(), a )
+ || is_offset_in_section( b->get_offset()+b->get_size()-1, a )) {
+ return "Sections " + a->get_name() + " and " + b->get_name() + " overlap in file";
+ }
+ }
+ }
+ }
+
+ // more checks to be added here...
+
+ return "";
+ }
+
+//------------------------------------------------------------------------------
+ private:
+//------------------------------------------------------------------------------
+ void clean()
+ {
+ delete header;
+ header = 0;
+
+ std::vector<section*>::const_iterator it;
+ for ( it = sections_.begin(); it != sections_.end(); ++it ) {
+ delete *it;
+ }
+ sections_.clear();
+
+ std::vector<segment*>::const_iterator it1;
+ for ( it1 = segments_.begin(); it1 != segments_.end(); ++it1 ) {
+ delete *it1;
+ }
+ segments_.clear();
+ }
+
+//------------------------------------------------------------------------------
+ elf_header* create_header( unsigned char file_class, unsigned char encoding )
+ {
+ elf_header* new_header = 0;
+
+ if ( file_class == ELFCLASS64 ) {
+ new_header = new elf_header_impl< Elf64_Ehdr >( &convertor,
+ encoding );
+ }
+ else if ( file_class == ELFCLASS32 ) {
+ new_header = new elf_header_impl< Elf32_Ehdr >( &convertor,
+ encoding );
+ }
+ else {
+ return 0;
+ }
+
+ return new_header;
+ }
+
+//------------------------------------------------------------------------------
+ section* create_section()
+ {
+ section* new_section;
+ unsigned char file_class = get_class();
+
+ if ( file_class == ELFCLASS64 ) {
+ new_section = new section_impl<Elf64_Shdr>( &convertor );
+ }
+ else if ( file_class == ELFCLASS32 ) {
+ new_section = new section_impl<Elf32_Shdr>( &convertor );
+ }
+ else {
+ return 0;
+ }
+
+ new_section->set_index( (Elf_Half)sections_.size() );
+ sections_.push_back( new_section );
+
+ return new_section;
+ }
+
+
+//------------------------------------------------------------------------------
+ segment* create_segment()
+ {
+ segment* new_segment;
+ unsigned char file_class = header->get_class();
+
+ if ( file_class == ELFCLASS64 ) {
+ new_segment = new segment_impl<Elf64_Phdr>( &convertor );
+ }
+ else if ( file_class == ELFCLASS32 ) {
+ new_segment = new segment_impl<Elf32_Phdr>( &convertor );
+ }
+ else {
+ return 0;
+ }
+
+ new_segment->set_index( (Elf_Half)segments_.size() );
+ segments_.push_back( new_segment );
+
+ return new_segment;
+ }
+
+//------------------------------------------------------------------------------
+ void create_mandatory_sections()
+ {
+ // Create null section without calling to 'add_section' as no string
+ // section containing section names exists yet
+ section* sec0 = create_section();
+ sec0->set_index( 0 );
+ sec0->set_name( "" );
+ sec0->set_name_string_offset( 0 );
+
+ set_section_name_str_index( 1 );
+ section* shstrtab = sections.add( ".shstrtab" );
+ shstrtab->set_type( SHT_STRTAB );
+ shstrtab->set_addr_align( 1 );
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Half load_sections( std::istream& stream )
+ {
+ Elf_Half entry_size = header->get_section_entry_size();
+ Elf_Half num = header->get_sections_num();
+ Elf64_Off offset = header->get_sections_offset();
+
+ for ( Elf_Half i = 0; i < num; ++i ) {
+ section* sec = create_section();
+ sec->load( stream, (std::streamoff)offset + i * entry_size );
+ sec->set_index( i );
+ // To mark that the section is not permitted to reassign address
+ // during layout calculation
+ sec->set_address( sec->get_address() );
+ }
+
+ Elf_Half shstrndx = get_section_name_str_index();
+
+ if ( SHN_UNDEF != shstrndx ) {
+ string_section_accessor str_reader( sections[shstrndx] );
+ for ( Elf_Half i = 0; i < num; ++i ) {
+ Elf_Word section_offset = sections[i]->get_name_string_offset();
+ const char* p = str_reader.get_string( section_offset );
+ if ( p != 0 ) {
+ sections[i]->set_name( p );
+ }
+ }
+ }
+
+ return num;
+ }
+
+//------------------------------------------------------------------------------
+ //! Checks whether the addresses of the section entirely fall within the given segment.
+ //! It doesn't matter if the addresses are memory addresses, or file offsets,
+ //! they just need to be in the same address space
+ bool is_sect_in_seg ( Elf64_Off sect_begin, Elf_Xword sect_size, Elf64_Off seg_begin, Elf64_Off seg_end ) {
+ return seg_begin <= sect_begin
+ && sect_begin + sect_size <= seg_end
+ && sect_begin < seg_end; // this is important criteria when sect_size == 0
+ // Example: seg_begin=10, seg_end=12 (-> covering the bytes 10 and 11)
+ // sect_begin=12, sect_size=0 -> shall return false!
+ }
+
+//------------------------------------------------------------------------------
+ bool load_segments( std::istream& stream )
+ {
+ Elf_Half entry_size = header->get_segment_entry_size();
+ Elf_Half num = header->get_segments_num();
+ Elf64_Off offset = header->get_segments_offset();
+
+ for ( Elf_Half i = 0; i < num; ++i ) {
+ segment* seg;
+ unsigned char file_class = header->get_class();
+
+ if ( file_class == ELFCLASS64 ) {
+ seg = new segment_impl<Elf64_Phdr>( &convertor );
+ }
+ else if ( file_class == ELFCLASS32 ) {
+ seg = new segment_impl<Elf32_Phdr>( &convertor );
+ }
+ else {
+ return false;
+ }
+
+ seg->load( stream, (std::streamoff)offset + i * entry_size );
+ seg->set_index( i );
+
+ // Add sections to the segments (similar to readelfs algorithm)
+ Elf64_Off segBaseOffset = seg->get_offset();
+ Elf64_Off segEndOffset = segBaseOffset + seg->get_file_size();
+ Elf64_Off segVBaseAddr = seg->get_virtual_address();
+ Elf64_Off segVEndAddr = segVBaseAddr + seg->get_memory_size();
+ for( Elf_Half j = 0; j < sections.size(); ++j ) {
+ const section* psec = sections[j];
+
+ // SHF_ALLOC sections are matched based on the virtual address
+ // otherwise the file offset is matched
+ if( psec->get_flags() & SHF_ALLOC
+ ? is_sect_in_seg( psec->get_address(), psec->get_size(), segVBaseAddr, segVEndAddr )
+ : is_sect_in_seg( psec->get_offset(), psec->get_size(), segBaseOffset, segEndOffset )) {
+ // Alignment of segment shall not be updated, to preserve original value
+ // It will be re-calculated on saving.
+ seg->add_section_index( psec->get_index(), 0 );
+ }
+ }
+
+ // Add section into the segments' container
+ segments_.push_back( seg );
+ }
+
+ return true;
+ }
+
+//------------------------------------------------------------------------------
+ bool save_header( std::ofstream& f )
+ {
+ return header->save( f );
+ }
+
+//------------------------------------------------------------------------------
+ bool save_sections( std::ofstream& f )
+ {
+ for ( unsigned int i = 0; i < sections_.size(); ++i ) {
+ section *sec = sections_.at(i);
+
+ std::streampos headerPosition =
+ (std::streamoff)header->get_sections_offset() +
+ header->get_section_entry_size() * sec->get_index();
+
+ sec->save(f,headerPosition,sec->get_offset());
+ }
+ return true;
+ }
+
+//------------------------------------------------------------------------------
+ bool save_segments( std::ofstream& f )
+ {
+ for ( unsigned int i = 0; i < segments_.size(); ++i ) {
+ segment *seg = segments_.at(i);
+
+ std::streampos headerPosition = header->get_segments_offset() +
+ header->get_segment_entry_size()*seg->get_index();
+
+ seg->save( f, headerPosition, seg->get_offset() );
+ }
+ return true;
+ }
+
+//------------------------------------------------------------------------------
+ bool is_section_without_segment( unsigned int section_index )
+ {
+ bool found = false;
+
+ for ( unsigned int j = 0; !found && ( j < segments.size() ); ++j ) {
+ for ( unsigned int k = 0;
+ !found && ( k < segments[j]->get_sections_num() );
+ ++k ) {
+ found = segments[j]->get_section_index_at( k ) == section_index;
+ }
+ }
+
+ return !found;
+ }
+
+//------------------------------------------------------------------------------
+ bool is_subsequence_of( segment* seg1, segment* seg2 )
+ {
+ // Return 'true' if sections of seg1 are a subset of sections in seg2
+ const std::vector<Elf_Half>& sections1 = seg1->get_sections();
+ const std::vector<Elf_Half>& sections2 = seg2->get_sections();
+
+ bool found = false;
+ if ( sections1.size() < sections2.size() ) {
+ found = std::includes( sections2.begin(), sections2.end(),
+ sections1.begin(), sections1.end() );
+ }
+
+ return found;
+ }
+
+//------------------------------------------------------------------------------
+ std::vector<segment*> get_ordered_segments( )
+ {
+ std::vector<segment*> res;
+ std::deque<segment*> worklist;
+
+ res.reserve(segments.size());
+ std::copy( segments_.begin(), segments_.end(),
+ std::back_inserter( worklist )) ;
+
+ // Bring the segments which start at address 0 to the front
+ size_t nextSlot = 0;
+ for( size_t i = 0; i < worklist.size(); ++i ) {
+ if( i != nextSlot && worklist[i]->is_offset_initialized()
+ && worklist[i]->get_offset() == 0 ) {
+ if (worklist[nextSlot]->get_offset() == 0) {
+ ++nextSlot;
+ }
+ std::swap(worklist[i],worklist[nextSlot]);
+ ++nextSlot;
+ }
+ }
+
+ while ( !worklist.empty() ) {
+ segment *seg = worklist.front();
+ worklist.pop_front();
+
+ size_t i = 0;
+ for ( ; i < worklist.size(); ++i ) {
+ if ( is_subsequence_of( seg, worklist[i] ) ) {
+ break;
+ }
+ }
+
+ if ( i < worklist.size() )
+ worklist.push_back(seg);
+ else
+ res.push_back(seg);
+ }
+
+ return res;
+ }
+
+
+//------------------------------------------------------------------------------
+ bool layout_sections_without_segments( )
+ {
+ for ( unsigned int i = 0; i < sections_.size(); ++i ) {
+ if ( is_section_without_segment( i ) ) {
+ section *sec = sections_[i];
+
+ Elf_Xword section_align = sec->get_addr_align();
+ if ( section_align > 1 && current_file_pos % section_align != 0 ) {
+ current_file_pos += section_align -
+ current_file_pos % section_align;
+ }
+
+ if ( 0 != sec->get_index() )
+ sec->set_offset(current_file_pos);
+
+ if ( SHT_NOBITS != sec->get_type() &&
+ SHT_NULL != sec->get_type() ) {
+ current_file_pos += sec->get_size();
+ }
+ }
+ }
+
+ return true;
+ }
+
+
+//------------------------------------------------------------------------------
+ void calc_segment_alignment( )
+ {
+ for( std::vector<segment*>::iterator s = segments_.begin(); s != segments_.end(); ++s ) {
+ segment* seg = *s;
+ for ( int i = 0; i < seg->get_sections_num(); ++i ) {
+ section* sect = sections_[ seg->get_section_index_at(i) ];
+ if ( sect->get_addr_align() > seg->get_align() ) {
+ seg->set_align( sect->get_addr_align() );
+ }
+ }
+ }
+ }
+
+//------------------------------------------------------------------------------
+ bool layout_segments_and_their_sections( )
+ {
+ std::vector<segment*> worklist;
+ std::vector<bool> section_generated(sections.size(),false);
+
+ // Get segments in a order in where segments which contain a
+ // sub sequence of other segments are located at the end
+ worklist = get_ordered_segments();
+
+ for ( unsigned int i = 0; i < worklist.size(); ++i ) {
+ Elf_Xword segment_memory = 0;
+ Elf_Xword segment_filesize = 0;
+ Elf_Xword seg_start_pos = current_file_pos;
+ segment* seg = worklist[i];
+
+ // Special case: PHDR segment
+ // This segment contains the program headers but no sections
+ if ( seg->get_type() == PT_PHDR && seg->get_sections_num() == 0 ) {
+ seg_start_pos = header->get_segments_offset();
+ segment_memory = segment_filesize =
+ header->get_segment_entry_size() * header->get_segments_num();
+ }
+ // Special case:
+ // Segments which start with the NULL section and have further sections
+ else if ( seg->get_sections_num() > 1
+ && sections[seg->get_section_index_at( 0 )]->get_type() == SHT_NULL ) {
+ seg_start_pos = 0;
+ if ( seg->get_sections_num() ) {
+ segment_memory = segment_filesize = current_file_pos;
+ }
+ }
+ // New segments with not generated sections
+ // have to be aligned
+ else if ( seg->get_sections_num()
+ && !section_generated[seg->get_section_index_at( 0 )] ) {
+ Elf_Xword align = seg->get_align() > 0 ? seg->get_align() : 1;
+ Elf64_Off cur_page_alignment = current_file_pos % align;
+ Elf64_Off req_page_alignment = seg->get_virtual_address() % align;
+ Elf64_Off error = req_page_alignment - cur_page_alignment;
+
+ current_file_pos += ( seg->get_align() + error ) % align;
+ seg_start_pos = current_file_pos;
+ }
+ else if ( seg->get_sections_num() ) {
+ seg_start_pos = sections[seg->get_section_index_at( 0 )]->get_offset();
+ }
+
+ // Write segment's data
+ for ( unsigned int j = 0; j < seg->get_sections_num(); ++j ) {
+ Elf_Half index = seg->get_section_index_at( j );
+
+ section* sec = sections[ index ];
+
+ // The NULL section is always generated
+ if ( SHT_NULL == sec->get_type()) {
+ section_generated[index] = true;
+ continue;
+ }
+
+ Elf_Xword secAlign = 0;
+ // Fix up the alignment
+ if ( !section_generated[index] && sec->is_address_initialized()
+ && SHT_NOBITS != sec->get_type()
+ && SHT_NULL != sec->get_type()
+ && 0 != sec->get_size() ) {
+ // Align the sections based on the virtual addresses
+ // when possible (this is what matters for execution)
+ Elf64_Off req_offset = sec->get_address() - seg->get_virtual_address();
+ Elf64_Off cur_offset = current_file_pos - seg_start_pos;
+ if ( req_offset < cur_offset) {
+ // something has gone awfully wrong, abort!
+ // secAlign would turn out negative, seeking backwards and overwriting previous data
+ return false;
+ }
+ secAlign = req_offset - cur_offset;
+ }
+ else if (!section_generated[index] && !sec->is_address_initialized() ) {
+ // If no address has been specified then only the section
+ // alignment constraint has to be matched
+ Elf_Xword align = sec->get_addr_align();
+ if (align == 0) {
+ align = 1;
+ }
+ Elf64_Off error = current_file_pos % align;
+ secAlign = ( align - error ) % align;
+ }
+ else if (section_generated[index] ) {
+ // Alignment for already generated sections
+ secAlign = sec->get_offset() - seg_start_pos - segment_filesize;
+ }
+
+ // Determine the segment file and memory sizes
+ // Special case .tbss section (NOBITS) in non TLS segment
+ if ( (sec->get_flags() & SHF_ALLOC)
+ && !( (sec->get_flags() & SHF_TLS) && (seg->get_type() != PT_TLS)
+ && ( SHT_NOBITS == sec->get_type())) )
+ segment_memory += sec->get_size() + secAlign;
+ if ( SHT_NOBITS != sec->get_type() && SHT_NULL != sec->get_type() )
+ segment_filesize += sec->get_size() + secAlign;
+
+ // Nothing to be done when generating nested segments
+ if(section_generated[index]) {
+ continue;
+ }
+
+ current_file_pos += secAlign;
+
+ // Set the section addresses when missing
+ if ( !sec->is_address_initialized() )
+ sec->set_address( seg->get_virtual_address()
+ + current_file_pos - seg_start_pos);
+
+ if ( 0 != sec->get_index() )
+ sec->set_offset(current_file_pos);
+
+ if ( SHT_NOBITS != sec->get_type() && SHT_NULL != sec->get_type() )
+ current_file_pos += sec->get_size();
+ section_generated[index] = true;
+ }
+
+ seg->set_file_size( segment_filesize );
+
+ // If we already have a memory size from loading an elf file (value > 0),
+ // it must not shrink!
+ // Memory size may be bigger than file size and it is the loader's job to do something
+ // with the surplus bytes in memory, like initializing them with a defined value.
+ if ( seg->get_memory_size() < segment_memory ) {
+ seg->set_memory_size( segment_memory );
+ }
+
+ seg->set_offset(seg_start_pos);
+ }
+
+ return true;
+ }
+
+//------------------------------------------------------------------------------
+ bool layout_section_table()
+ {
+ // Simply place the section table at the end for now
+ Elf64_Off alignmentError = current_file_pos % 4;
+ current_file_pos += ( 4 - alignmentError ) % 4;
+ header->set_sections_offset(current_file_pos);
+ return true;
+ }
+
+
+//------------------------------------------------------------------------------
+ public:
+ friend class Sections;
+ class Sections {
+ public:
+//------------------------------------------------------------------------------
+ Sections( elfio* parent_ ) :
+ parent( parent_ )
+ {
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Half size() const
+ {
+ return (Elf_Half)parent->sections_.size();
+ }
+
+//------------------------------------------------------------------------------
+ section* operator[]( unsigned int index ) const
+ {
+ section* sec = 0;
+
+ if ( index < parent->sections_.size() ) {
+ sec = parent->sections_[index];
+ }
+
+ return sec;
+ }
+
+//------------------------------------------------------------------------------
+ section* operator[]( const std::string& name ) const
+ {
+ section* sec = 0;
+
+ std::vector<section*>::const_iterator it;
+ for ( it = parent->sections_.begin();
+ it != parent->sections_.end();
+ ++it ) {
+ if ( (*it)->get_name() == name ) {
+ sec = *it;
+ break;
+ }
+ }
+
+ return sec;
+ }
+
+//------------------------------------------------------------------------------
+ section* add( const std::string& name )
+ {
+ section* new_section = parent->create_section();
+ new_section->set_name( name );
+
+ Elf_Half str_index = parent->get_section_name_str_index();
+ section* string_table( parent->sections_[str_index] );
+ string_section_accessor str_writer( string_table );
+ Elf_Word pos = str_writer.add_string( name );
+ new_section->set_name_string_offset( pos );
+
+ return new_section;
+ }
+
+//------------------------------------------------------------------------------
+ std::vector<section*>::iterator begin() {
+ return parent->sections_.begin();
+ }
+
+//------------------------------------------------------------------------------
+ std::vector<section*>::iterator end() {
+ return parent->sections_.end();
+ }
+
+//------------------------------------------------------------------------------
+ std::vector<section*>::const_iterator begin() const {
+ return parent->sections_.cbegin();
+ }
+
+//------------------------------------------------------------------------------
+ std::vector<section*>::const_iterator end() const {
+ return parent->sections_.cend();
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ elfio* parent;
+ } sections;
+
+//------------------------------------------------------------------------------
+ public:
+ friend class Segments;
+ class Segments {
+ public:
+//------------------------------------------------------------------------------
+ Segments( elfio* parent_ ) :
+ parent( parent_ )
+ {
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Half size() const
+ {
+ return (Elf_Half)parent->segments_.size();
+ }
+
+//------------------------------------------------------------------------------
+ segment* operator[]( unsigned int index ) const
+ {
+ return parent->segments_[index];
+ }
+
+
+//------------------------------------------------------------------------------
+ segment* add()
+ {
+ return parent->create_segment();
+ }
+
+//------------------------------------------------------------------------------
+ std::vector<segment*>::iterator begin() {
+ return parent->segments_.begin();
+ }
+
+//------------------------------------------------------------------------------
+ std::vector<segment*>::iterator end() {
+ return parent->segments_.end();
+ }
+
+//------------------------------------------------------------------------------
+ std::vector<segment*>::const_iterator begin() const {
+ return parent->segments_.cbegin();
+ }
+
+//------------------------------------------------------------------------------
+ std::vector<segment*>::const_iterator end() const {
+ return parent->segments_.cend();
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ elfio* parent;
+ } segments;
+
+//------------------------------------------------------------------------------
+ private:
+ elf_header* header;
+ std::vector<section*> sections_;
+ std::vector<segment*> segments_;
+ endianess_convertor convertor;
+
+ Elf_Xword current_file_pos;
+};
+
+} // namespace ELFIO
+
+#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 )
+#endif
+
+#endif // ELFIO_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_dump.hpp b/utils/bcmregtool/elfio/elfio/elfio_dump.hpp
new file mode 100644
index 0000000..913011e
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_dump.hpp
@@ -0,0 +1,976 @@
+/*
+Copyright (C) 2001-2015 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_DUMP_HPP
+#define ELFIO_DUMP_HPP
+
+#include <algorithm>
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <iomanip>
+#include <elfio/elfio.hpp>
+
+namespace ELFIO {
+
+
+static struct class_table_t {
+ const char key;
+ const char* str;
+} class_table [] =
+{
+ { ELFCLASS32, "ELF32" },
+ { ELFCLASS64, "ELF64" },
+};
+
+
+static struct endian_table_t {
+ const char key;
+ const char* str;
+} endian_table [] =
+{
+ { ELFDATANONE, "None" },
+ { ELFDATA2LSB, "Little endian" },
+ { ELFDATA2MSB, "Big endian" },
+};
+
+
+static struct version_table_t {
+ const Elf64_Word key;
+ const char* str;
+} version_table [] =
+{
+ { EV_NONE , "None" },
+ { EV_CURRENT, "Current" },
+};
+
+
+static struct type_table_t {
+ const Elf32_Half key;
+ const char* str;
+} type_table [] =
+{
+ { ET_NONE, "No file type" },
+ { ET_REL , "Relocatable file" },
+ { ET_EXEC, "Executable file" },
+ { ET_DYN , "Shared object file" },
+ { ET_CORE, "Core file" },
+};
+
+
+static struct machine_table_t {
+ const Elf64_Half key;
+ const char* str;
+} machine_table [] =
+{
+ { EM_NONE , "No machine" },
+ { EM_M32 , "AT&T WE 32100" },
+ { EM_SPARC , "SUN SPARC" },
+ { EM_386 , "Intel 80386" },
+ { EM_68K , "Motorola m68k family" },
+ { EM_88K , "Motorola m88k family" },
+ { EM_486 , "Intel 80486// Reserved for future use" },
+ { EM_860 , "Intel 80860" },
+ { EM_MIPS , "MIPS R3000 (officially, big-endian only)" },
+ { EM_S370 , "IBM System/370" },
+ { EM_MIPS_RS3_LE , "MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated" },
+ { EM_res011 , "Reserved" },
+ { EM_res012 , "Reserved" },
+ { EM_res013 , "Reserved" },
+ { EM_res014 , "Reserved" },
+ { EM_PARISC , "HPPA" },
+ { EM_res016 , "Reserved" },
+ { EM_VPP550 , "Fujitsu VPP500" },
+ { EM_SPARC32PLUS , "Sun's v8plus" },
+ { EM_960 , "Intel 80960" },
+ { EM_PPC , "PowerPC" },
+ { EM_PPC64 , "64-bit PowerPC" },
+ { EM_S390 , "IBM S/390" },
+ { EM_SPU , "Sony/Toshiba/IBM SPU" },
+ { EM_res024 , "Reserved" },
+ { EM_res025 , "Reserved" },
+ { EM_res026 , "Reserved" },
+ { EM_res027 , "Reserved" },
+ { EM_res028 , "Reserved" },
+ { EM_res029 , "Reserved" },
+ { EM_res030 , "Reserved" },
+ { EM_res031 , "Reserved" },
+ { EM_res032 , "Reserved" },
+ { EM_res033 , "Reserved" },
+ { EM_res034 , "Reserved" },
+ { EM_res035 , "Reserved" },
+ { EM_V800 , "NEC V800 series" },
+ { EM_FR20 , "Fujitsu FR20" },
+ { EM_RH32 , "TRW RH32" },
+ { EM_MCORE , "Motorola M*Core // May also be taken by Fujitsu MMA" },
+ { EM_RCE , "Old name for MCore" },
+ { EM_ARM , "ARM" },
+ { EM_OLD_ALPHA , "Digital Alpha" },
+ { EM_SH , "Renesas (formerly Hitachi) / SuperH SH" },
+ { EM_SPARCV9 , "SPARC v9 64-bit" },
+ { EM_TRICORE , "Siemens Tricore embedded processor" },
+ { EM_ARC , "ARC Cores" },
+ { EM_H8_300 , "Renesas (formerly Hitachi) H8/300" },
+ { EM_H8_300H , "Renesas (formerly Hitachi) H8/300H" },
+ { EM_H8S , "Renesas (formerly Hitachi) H8S" },
+ { EM_H8_500 , "Renesas (formerly Hitachi) H8/500" },
+ { EM_IA_64 , "Intel IA-64 Processor" },
+ { EM_MIPS_X , "Stanford MIPS-X" },
+ { EM_COLDFIRE , "Motorola Coldfire" },
+ { EM_68HC12 , "Motorola M68HC12" },
+ { EM_MMA , "Fujitsu Multimedia Accelerator" },
+ { EM_PCP , "Siemens PCP" },
+ { EM_NCPU , "Sony nCPU embedded RISC processor" },
+ { EM_NDR1 , "Denso NDR1 microprocesspr" },
+ { EM_STARCORE , "Motorola Star*Core processor" },
+ { EM_ME16 , "Toyota ME16 processor" },
+ { EM_ST100 , "STMicroelectronics ST100 processor" },
+ { EM_TINYJ , "Advanced Logic Corp. TinyJ embedded processor" },
+ { EM_X86_64 , "Advanced Micro Devices X86-64 processor" },
+ { EM_PDSP , "Sony DSP Processor" },
+ { EM_PDP10 , "Digital Equipment Corp. PDP-10" },
+ { EM_PDP11 , "Digital Equipment Corp. PDP-11" },
+ { EM_FX66 , "Siemens FX66 microcontroller" },
+ { EM_ST9PLUS , "STMicroelectronics ST9+ 8/16 bit microcontroller" },
+ { EM_ST7 , "STMicroelectronics ST7 8-bit microcontroller" },
+ { EM_68HC16 , "Motorola MC68HC16 Microcontroller" },
+ { EM_68HC11 , "Motorola MC68HC11 Microcontroller" },
+ { EM_68HC08 , "Motorola MC68HC08 Microcontroller" },
+ { EM_68HC05 , "Motorola MC68HC05 Microcontroller" },
+ { EM_SVX , "Silicon Graphics SVx" },
+ { EM_ST19 , "STMicroelectronics ST19 8-bit cpu" },
+ { EM_VAX , "Digital VAX" },
+ { EM_CRIS , "Axis Communications 32-bit embedded processor" },
+ { EM_JAVELIN , "Infineon Technologies 32-bit embedded cpu" },
+ { EM_FIREPATH , "Element 14 64-bit DSP processor" },
+ { EM_ZSP , "LSI Logic's 16-bit DSP processor" },
+ { EM_MMIX , "Donald Knuth's educational 64-bit processor" },
+ { EM_HUANY , "Harvard's machine-independent format" },
+ { EM_PRISM , "SiTera Prism" },
+ { EM_AVR , "Atmel AVR 8-bit microcontroller" },
+ { EM_FR30 , "Fujitsu FR30" },
+ { EM_D10V , "Mitsubishi D10V" },
+ { EM_D30V , "Mitsubishi D30V" },
+ { EM_V850 , "NEC v850" },
+ { EM_M32R , "Renesas M32R (formerly Mitsubishi M32R)" },
+ { EM_MN10300 , "Matsushita MN10300" },
+ { EM_MN10200 , "Matsushita MN10200" },
+ { EM_PJ , "picoJava" },
+ { EM_OPENRISC , "OpenRISC 32-bit embedded processor" },
+ { EM_ARC_A5 , "ARC Cores Tangent-A5" },
+ { EM_XTENSA , "Tensilica Xtensa Architecture" },
+ { EM_VIDEOCORE , "Alphamosaic VideoCore processor" },
+ { EM_TMM_GPP , "Thompson Multimedia General Purpose Processor" },
+ { EM_NS32K , "National Semiconductor 32000 series" },
+ { EM_TPC , "Tenor Network TPC processor" },
+ { EM_SNP1K , "Trebia SNP 1000 processor" },
+ { EM_ST200 , "STMicroelectronics ST200 microcontroller" },
+ { EM_IP2K , "Ubicom IP2022 micro controller" },
+ { EM_MAX , "MAX Processor" },
+ { EM_CR , "National Semiconductor CompactRISC" },
+ { EM_F2MC16 , "Fujitsu F2MC16" },
+ { EM_MSP430 , "TI msp430 micro controller" },
+ { EM_BLACKFIN , "ADI Blackfin" },
+ { EM_SE_C33 , "S1C33 Family of Seiko Epson processors" },
+ { EM_SEP , "Sharp embedded microprocessor" },
+ { EM_ARCA , "Arca RISC Microprocessor" },
+ { EM_UNICORE , "Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University" },
+ { EM_EXCESS , "eXcess: 16/32/64-bit configurable embedded CPU" },
+ { EM_DXP , "Icera Semiconductor Inc. Deep Execution Processor" },
+ { EM_ALTERA_NIOS2 , "Altera Nios II soft-core processor" },
+ { EM_CRX , "National Semiconductor CRX" },
+ { EM_XGATE , "Motorola XGATE embedded processor" },
+ { EM_C166 , "Infineon C16x/XC16x processor" },
+ { EM_M16C , "Renesas M16C series microprocessors" },
+ { EM_DSPIC30F , "Microchip Technology dsPIC30F Digital Signal Controller" },
+ { EM_CE , "Freescale Communication Engine RISC core" },
+ { EM_M32C , "Renesas M32C series microprocessors" },
+ { EM_res121 , "Reserved" },
+ { EM_res122 , "Reserved" },
+ { EM_res123 , "Reserved" },
+ { EM_res124 , "Reserved" },
+ { EM_res125 , "Reserved" },
+ { EM_res126 , "Reserved" },
+ { EM_res127 , "Reserved" },
+ { EM_res128 , "Reserved" },
+ { EM_res129 , "Reserved" },
+ { EM_res130 , "Reserved" },
+ { EM_TSK3000 , "Altium TSK3000 core" },
+ { EM_RS08 , "Freescale RS08 embedded processor" },
+ { EM_res133 , "Reserved" },
+ { EM_ECOG2 , "Cyan Technology eCOG2 microprocessor" },
+ { EM_SCORE , "Sunplus Score" },
+ { EM_SCORE7 , "Sunplus S+core7 RISC processor" },
+ { EM_DSP24 , "New Japan Radio (NJR) 24-bit DSP Processor" },
+ { EM_VIDEOCORE3 , "Broadcom VideoCore III processor" },
+ { EM_LATTICEMICO32, "RISC processor for Lattice FPGA architecture" },
+ { EM_SE_C17 , "Seiko Epson C17 family" },
+ { EM_TI_C6000 , "Texas Instruments TMS320C6000 DSP family" },
+ { EM_TI_C2000 , "Texas Instruments TMS320C2000 DSP family" },
+ { EM_TI_C5500 , "Texas Instruments TMS320C55x DSP family" },
+ { EM_res143 , "Reserved" },
+ { EM_res144 , "Reserved" },
+ { EM_res145 , "Reserved" },
+ { EM_res146 , "Reserved" },
+ { EM_res147 , "Reserved" },
+ { EM_res148 , "Reserved" },
+ { EM_res149 , "Reserved" },
+ { EM_res150 , "Reserved" },
+ { EM_res151 , "Reserved" },
+ { EM_res152 , "Reserved" },
+ { EM_res153 , "Reserved" },
+ { EM_res154 , "Reserved" },
+ { EM_res155 , "Reserved" },
+ { EM_res156 , "Reserved" },
+ { EM_res157 , "Reserved" },
+ { EM_res158 , "Reserved" },
+ { EM_res159 , "Reserved" },
+ { EM_MMDSP_PLUS , "STMicroelectronics 64bit VLIW Data Signal Processor" },
+ { EM_CYPRESS_M8C , "Cypress M8C microprocessor" },
+ { EM_R32C , "Renesas R32C series microprocessors" },
+ { EM_TRIMEDIA , "NXP Semiconductors TriMedia architecture family" },
+ { EM_QDSP6 , "QUALCOMM DSP6 Processor" },
+ { EM_8051 , "Intel 8051 and variants" },
+ { EM_STXP7X , "STMicroelectronics STxP7x family" },
+ { EM_NDS32 , "Andes Technology compact code size embedded RISC processor family" },
+ { EM_ECOG1 , "Cyan Technology eCOG1X family" },
+ { EM_ECOG1X , "Cyan Technology eCOG1X family" },
+ { EM_MAXQ30 , "Dallas Semiconductor MAXQ30 Core Micro-controllers" },
+ { EM_XIMO16 , "New Japan Radio (NJR) 16-bit DSP Processor" },
+ { EM_MANIK , "M2000 Reconfigurable RISC Microprocessor" },
+ { EM_CRAYNV2 , "Cray Inc. NV2 vector architecture" },
+ { EM_RX , "Renesas RX family" },
+ { EM_METAG , "Imagination Technologies META processor architecture" },
+ { EM_MCST_ELBRUS , "MCST Elbrus general purpose hardware architecture" },
+ { EM_ECOG16 , "Cyan Technology eCOG16 family" },
+ { EM_CR16 , "National Semiconductor CompactRISC 16-bit processor" },
+ { EM_ETPU , "Freescale Extended Time Processing Unit" },
+ { EM_SLE9X , "Infineon Technologies SLE9X core" },
+ { EM_L1OM , "Intel L1OM" },
+ { EM_INTEL181 , "Reserved by Intel" },
+ { EM_INTEL182 , "Reserved by Intel" },
+ { EM_res183 , "Reserved by ARM" },
+ { EM_res184 , "Reserved by ARM" },
+ { EM_AVR32 , "Atmel Corporation 32-bit microprocessor family" },
+ { EM_STM8 , "STMicroeletronics STM8 8-bit microcontroller" },
+ { EM_TILE64 , "Tilera TILE64 multicore architecture family" },
+ { EM_TILEPRO , "Tilera TILEPro multicore architecture family" },
+ { EM_MICROBLAZE , "Xilinx MicroBlaze 32-bit RISC soft processor core" },
+ { EM_CUDA , "NVIDIA CUDA architecture " },
+};
+
+
+static struct section_type_table_t {
+ const Elf64_Half key;
+ const char* str;
+} section_type_table [] =
+{
+ { SHT_NULL , "NULL" },
+ { SHT_PROGBITS , "PROGBITS" },
+ { SHT_SYMTAB , "SYMTAB" },
+ { SHT_STRTAB , "STRTAB" },
+ { SHT_RELA , "RELA" },
+ { SHT_HASH , "HASH" },
+ { SHT_DYNAMIC , "DYNAMIC" },
+ { SHT_NOTE , "NOTE" },
+ { SHT_NOBITS , "NOBITS" },
+ { SHT_REL , "REL" },
+ { SHT_SHLIB , "SHLIB" },
+ { SHT_DYNSYM , "DYNSYM" },
+ { SHT_INIT_ARRAY , "INIT_ARRAY" },
+ { SHT_FINI_ARRAY , "FINI_ARRAY" },
+ { SHT_PREINIT_ARRAY, "PREINIT_ARRAY" },
+ { SHT_GROUP , "GROUP" },
+ { SHT_SYMTAB_SHNDX , "SYMTAB_SHNDX " },
+};
+
+
+static struct segment_type_table_t {
+ const Elf_Word key;
+ const char* str;
+} segment_type_table [] =
+{
+ { PT_NULL , "NULL" },
+ { PT_LOAD , "LOAD" },
+ { PT_DYNAMIC, "DYNAMIC" },
+ { PT_INTERP , "INTERP" },
+ { PT_NOTE , "NOTE" },
+ { PT_SHLIB , "SHLIB" },
+ { PT_PHDR , "PHDR" },
+ { PT_TLS , "TLS" },
+};
+
+
+static struct segment_flag_table_t {
+ const Elf_Word key;
+ const char* str;
+} segment_flag_table [] =
+{
+ { 0, "" },
+ { 1, "X" },
+ { 2, "W" },
+ { 3, "WX" },
+ { 4, "R" },
+ { 5, "RX" },
+ { 6, "RW" },
+ { 7, "RWX" },
+};
+
+
+static struct symbol_bind_t {
+ const Elf_Word key;
+ const char* str;
+} symbol_bind_table [] =
+{
+ { STB_LOCAL , "LOCAL" },
+ { STB_GLOBAL , "GLOBAL" },
+ { STB_WEAK , "WEAK" },
+ { STB_LOOS , "LOOS" },
+ { STB_HIOS , "HIOS" },
+ { STB_MULTIDEF, "MULTIDEF" },
+ { STB_LOPROC , "LOPROC" },
+ { STB_HIPROC , "HIPROC" },
+};
+
+
+static struct symbol_type_t {
+ const Elf_Word key;
+ const char* str;
+} symbol_type_table [] =
+{
+ { STT_NOTYPE , "NOTYPE" },
+ { STT_OBJECT , "OBJECT" },
+ { STT_FUNC , "FUNC" },
+ { STT_SECTION, "SECTION" },
+ { STT_FILE , "FILE" },
+ { STT_COMMON , "COMMON" },
+ { STT_TLS , "TLS" },
+ { STT_LOOS , "LOOS" },
+ { STT_HIOS , "HIOS" },
+ { STT_LOPROC , "LOPROC" },
+ { STT_HIPROC , "HIPROC" },
+};
+
+
+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" },
+};
+
+static const ELFIO::Elf_Xword MAX_DATA_ENTRIES = 64;
+
+//------------------------------------------------------------------------------
+class dump
+{
+#define DUMP_DEC_FORMAT( width ) std::setw(width) << std::setfill( ' ' ) << \
+ std::dec << std::right
+#define DUMP_HEX_FORMAT( width ) std::setw(width) << std::setfill( '0' ) << \
+ std::hex << std::right
+#define DUMP_STR_FORMAT( width ) std::setw(width) << std::setfill( ' ' ) << \
+ std::hex << std::left
+
+ public:
+//------------------------------------------------------------------------------
+ static void
+ header( std::ostream& out, const elfio& reader )
+ {
+ if (!reader.get_header_size())
+ {
+ return;
+ }
+ out << "ELF Header" << std::endl << std::endl
+ << " Class: " << str_class( reader.get_class() ) << std::endl
+ << " Encoding: " << str_endian( reader.get_encoding() ) << std::endl
+ << " ELFVersion: " << str_version( reader.get_elf_version() ) << std::endl
+ << " Type: " << str_type( reader.get_type() ) << std::endl
+ << " Machine: " << str_machine( reader.get_machine() ) << std::endl
+ << " Version: " << str_version( reader.get_version() ) << std::endl
+ << " Entry: " << "0x" << std::hex << reader.get_entry() << std::endl
+ << " Flags: " << "0x" << std::hex << reader.get_flags() << std::endl
+ << std::endl;
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ section_headers( std::ostream& out, const elfio& reader )
+ {
+ Elf_Half n = reader.sections.size();
+
+ if ( n == 0 ) {
+ return;
+ }
+
+ out << "Section Headers:" << std::endl;
+ if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit
+ out << "[ Nr ] Type Addr Size ES Flg Lk Inf Al Name" << std::endl;
+ }
+ else { // Output for 64-bit
+ out << "[ Nr ] Type Addr Size ES Flg" << std::endl
+ << " Lk Inf Al Name" << std::endl;
+ }
+
+ for ( Elf_Half i = 0; i < n; ++i ) { // For all sections
+ section* sec = reader.sections[i];
+ section_header( out, i, sec, reader.get_class() );
+ }
+
+ out << "Key to Flags: W (write), A (alloc), X (execute)\n\n"
+ << std::endl;
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ section_header( std::ostream& out, Elf_Half no, const section* sec,
+ unsigned char elf_class )
+ {
+ std::ios_base::fmtflags original_flags = out.flags();
+
+ if ( elf_class == ELFCLASS32 ) { // Output for 32-bit
+ out << "["
+ << DUMP_DEC_FORMAT( 5 ) << no
+ << "] "
+ << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) << " "
+ << DUMP_HEX_FORMAT( 8 ) << sec->get_address() << " "
+ << DUMP_HEX_FORMAT( 8 ) << sec->get_size() << " "
+ << DUMP_HEX_FORMAT( 2 ) << sec->get_entry_size() << " "
+ << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) << " "
+ << DUMP_HEX_FORMAT( 2 ) << sec->get_link() << " "
+ << DUMP_HEX_FORMAT( 3 ) << sec->get_info() << " "
+ << DUMP_HEX_FORMAT( 2 ) << sec->get_addr_align() << " "
+ << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " "
+ << std::endl;
+ }
+ else { // Output for 64-bit
+ out << "["
+ << DUMP_DEC_FORMAT( 5 ) << no
+ << "] "
+ << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) << " "
+ << DUMP_HEX_FORMAT( 16 ) << sec->get_address() << " "
+ << DUMP_HEX_FORMAT( 16 ) << sec->get_size() << " "
+ << DUMP_HEX_FORMAT( 4 ) << sec->get_entry_size() << " "
+ << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) << " "
+ << std::endl
+ << " "
+ << DUMP_HEX_FORMAT( 4 ) << sec->get_link() << " "
+ << DUMP_HEX_FORMAT( 4 ) << sec->get_info() << " "
+ << DUMP_HEX_FORMAT( 4 ) << sec->get_addr_align() << " "
+ << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " "
+ << std::endl;
+ }
+
+ out.flags(original_flags);
+
+ return;
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ segment_headers( std::ostream& out, const elfio& reader )
+ {
+ Elf_Half n = reader.segments.size();
+ if ( n == 0 ) {
+ return;
+ }
+
+ out << "Segment headers:" << std::endl;
+ if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit
+ out << "[ Nr ] Type VirtAddr PhysAddr FileSize Mem.Size Flags Align"
+ << std::endl;
+ }
+ else { // Output for 64-bit
+ out << "[ Nr ] Type VirtAddr PhysAddr Flags" << std::endl
+ << " FileSize Mem.Size Align"
+ << std::endl;
+ }
+
+ for ( Elf_Half i = 0; i < n; ++i ) {
+ segment* seg = reader.segments[i];
+ segment_header( out, i, seg, reader.get_class() );
+ }
+
+ out << std::endl;
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ segment_header( std::ostream& out, Elf_Half no, const segment* seg,
+ unsigned int elf_class )
+ {
+ std::ios_base::fmtflags original_flags = out.flags();
+
+ if ( elf_class == ELFCLASS32 ) { // Output for 32-bit
+ out << "["
+ << DUMP_DEC_FORMAT( 5 ) << no
+ << "] "
+ << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) << " "
+ << DUMP_HEX_FORMAT( 8 ) << seg->get_virtual_address() << " "
+ << DUMP_HEX_FORMAT( 8 ) << seg->get_physical_address() << " "
+ << DUMP_HEX_FORMAT( 8 ) << seg->get_file_size() << " "
+ << DUMP_HEX_FORMAT( 8 ) << seg->get_memory_size() << " "
+ << DUMP_STR_FORMAT( 8 ) << str_segment_flag( seg->get_flags() ) << " "
+ << DUMP_HEX_FORMAT( 8 ) << seg->get_align() << " "
+ << std::endl;
+ }
+ else { // Output for 64-bit
+ out << "["
+ << DUMP_DEC_FORMAT( 5 ) << no
+ << "] "
+ << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) << " "
+ << DUMP_HEX_FORMAT( 16 ) << seg->get_virtual_address() << " "
+ << DUMP_HEX_FORMAT( 16 ) << seg->get_physical_address() << " "
+ << DUMP_STR_FORMAT( 16 ) << str_segment_flag( seg->get_flags() ) << " "
+ << std::endl
+ << " "
+ << DUMP_HEX_FORMAT( 16 ) << seg->get_file_size() << " "
+ << DUMP_HEX_FORMAT( 16 ) << seg->get_memory_size() << " "
+ << DUMP_HEX_FORMAT( 16 ) << seg->get_align() << " "
+ << std::endl;
+ }
+
+ out.flags(original_flags);
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ symbol_tables( 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_SYMTAB == sec->get_type() || SHT_DYNSYM == sec->get_type() ) {
+ symbol_section_accessor symbols( reader, sec );
+
+ Elf_Xword sym_no = symbols.get_symbols_num();
+ if ( sym_no > 0 ) {
+ out << "Symbol table (" << sec->get_name() << ")" << std::endl;
+ if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit
+ out << "[ Nr ] Value Size Type Bind Sect Name"
+ << std::endl;
+ }
+ else { // Output for 64-bit
+ out << "[ Nr ] Value Size Type Bind Sect" << std::endl
+ << " Name"
+ << std::endl;
+ }
+ for ( Elf_Half i = 0; i < sym_no; ++i ) {
+ std::string name;
+ Elf64_Addr value = 0;
+ Elf_Xword size = 0;
+ unsigned char bind = 0;
+ unsigned char type = 0;
+ Elf_Half section = 0;
+ unsigned char other = 0;
+ symbols.get_symbol( i, name, value, size, bind, type, section, other );
+ symbol_table( out, i, name, value, size, bind, type, section, reader.get_class() );
+ }
+
+ out << std::endl;
+ }
+ }
+ }
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ symbol_table( std::ostream& out,
+ Elf_Half no,
+ std::string& name,
+ Elf64_Addr value,
+ Elf_Xword size,
+ unsigned char bind,
+ unsigned char type,
+ Elf_Half section,
+ unsigned int elf_class )
+ {
+ std::ios_base::fmtflags original_flags = out.flags();
+
+ if ( elf_class == ELFCLASS32 ) { // Output for 32-bit
+ out << "["
+ << DUMP_DEC_FORMAT( 5 ) << no
+ << "] "
+ << DUMP_HEX_FORMAT( 8 ) << value << " "
+ << DUMP_HEX_FORMAT( 8 ) << size << " "
+ << DUMP_STR_FORMAT( 7 ) << str_symbol_type( type ) << " "
+ << DUMP_STR_FORMAT( 8 ) << str_symbol_bind( bind ) << " "
+ << DUMP_DEC_FORMAT( 5 ) << section << " "
+ << DUMP_STR_FORMAT( 1 ) << name << " "
+ << std::endl;
+ }
+ else { // Output for 64-bit
+ out << "["
+ << DUMP_DEC_FORMAT( 5 ) << no
+ << "] "
+ << DUMP_HEX_FORMAT( 16 ) << value << " "
+ << DUMP_HEX_FORMAT( 16 ) << size << " "
+ << DUMP_STR_FORMAT( 7 ) << str_symbol_type( type ) << " "
+ << DUMP_STR_FORMAT( 8 ) << str_symbol_bind( bind ) << " "
+ << DUMP_DEC_FORMAT( 5 ) << section << " "
+ << std::endl
+ << " "
+ << DUMP_STR_FORMAT( 1 ) << name << " "
+ << std::endl;
+ }
+
+ out.flags(original_flags);
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ notes( std::ostream& out, const elfio& reader )
+ {
+ Elf_Half no = reader.sections.size();
+ for ( Elf_Half i = 0; i < no; ++i ) { // For all sections
+ section* sec = reader.sections[i];
+ if ( SHT_NOTE == sec->get_type() ) { // Look at notes
+ note_section_accessor notes( reader, sec );
+ int no_notes = notes.get_notes_num();
+ if ( no > 0 ) {
+ out << "Note section (" << sec->get_name() << ")" << std::endl
+ << " No Type Name"
+ << std::endl;
+ for ( int j = 0; j < no_notes; ++j ) { // For all notes
+ Elf_Word type;
+ std::string name;
+ void* desc;
+ Elf_Word descsz;
+
+ if ( notes.get_note(j, type, name, desc, descsz) ) {
+ // 'name' usually contains \0 at the end. Try to fix it
+ name = name.c_str();
+ note( out, j, type, name );
+ }
+ }
+
+ out << std::endl;
+ }
+ }
+ }
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ note( std::ostream& out,
+ int no,
+ Elf_Word type,
+ const std::string& name )
+ {
+ out << " ["
+ << DUMP_DEC_FORMAT( 2 ) << no
+ << "] "
+ << DUMP_HEX_FORMAT( 8 ) << type << " "
+ << DUMP_STR_FORMAT( 1 ) << name
+ << 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 ( Elf_Xword i = 0; i < dyn_no; ++i ) {
+ Elf_Xword tag = 0;
+ Elf_Xword value = 0;
+ 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;
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ section_data( std::ostream& out, const section* sec )
+ {
+ std::ios_base::fmtflags original_flags = out.flags();
+
+ out << sec->get_name() << std::endl;
+ const char* pdata = sec->get_data();
+ if ( pdata ){
+ ELFIO::Elf_Xword i;
+ for ( i = 0; i < std::min( sec->get_size(), MAX_DATA_ENTRIES ); ++i ) {
+ if ( i % 16 == 0 ) {
+ out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]";
+ }
+
+ out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF );
+
+ if ( i % 16 == 15 ) {
+ out << std::endl;
+ }
+ }
+ if ( i % 16 != 0 ) {
+ out << std::endl;
+ }
+
+ out.flags(original_flags);
+ }
+
+ return;
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ section_datas( std::ostream& out, const elfio& reader )
+ {
+ Elf_Half n = reader.sections.size();
+
+ if ( n == 0 ) {
+ return;
+ }
+
+ out << "Section Data:" << std::endl;
+
+ for ( Elf_Half i = 1; i < n; ++i ) { // For all sections
+ section* sec = reader.sections[i];
+ if ( sec->get_type() == SHT_NOBITS ) {
+ continue;
+ }
+ section_data( out, sec );
+ }
+
+ out << std::endl;
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ segment_data( std::ostream& out, Elf_Half no, const segment* seg )
+ {
+ std::ios_base::fmtflags original_flags = out.flags();
+
+ out << "Segment # " << no << std::endl;
+ const char* pdata = seg->get_data();
+ if ( pdata ) {
+ ELFIO::Elf_Xword i;
+ for ( i = 0; i < std::min( seg->get_file_size(), MAX_DATA_ENTRIES ); ++i ) {
+ if ( i % 16 == 0 ) {
+ out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]";
+ }
+
+ out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF );
+
+ if ( i % 16 == 15 ) {
+ out << std::endl;
+ }
+ }
+ if ( i % 16 != 0 ) {
+ out << std::endl;
+ }
+
+ out.flags(original_flags);
+ }
+
+ return;
+ }
+
+//------------------------------------------------------------------------------
+ static void
+ segment_datas( std::ostream& out, const elfio& reader )
+ {
+ Elf_Half n = reader.segments.size();
+
+ if ( n == 0 ) {
+ return;
+ }
+
+ out << "Segment Data:" << std::endl;
+
+ for ( Elf_Half i = 0; i < n; ++i ) { // For all sections
+ segment* seg = reader.segments[i];
+ segment_data( out, i, seg );
+ }
+
+ out << std::endl;
+ }
+
+ private:
+//------------------------------------------------------------------------------
+ template< typename T, typename K >
+ std::string
+ static
+ find_value_in_table( const T& table, const K& key )
+ {
+ std::string res = "?";
+ for ( unsigned int i = 0; i < sizeof( table )/sizeof( table[0] ); ++i ) {
+ if ( table[i].key == key ) {
+ res = table[i].str;
+ break;
+ }
+ }
+
+ return res;
+ }
+
+
+//------------------------------------------------------------------------------
+ template< typename T, typename K >
+ static
+ std::string
+ format_assoc( const T& table, const K& key )
+ {
+ std::string str = find_value_in_table( table, key );
+ if ( str == "?" ) {
+ std::ostringstream oss;
+ oss << str << " (0x" << std::hex << key << ")";
+ str = oss.str();
+ }
+
+ return str;
+ }
+
+
+//------------------------------------------------------------------------------
+ template< typename T >
+ static
+ std::string
+ format_assoc( const T& table, const char key )
+ {
+ return format_assoc( table, (const int)key );
+ }
+
+
+//------------------------------------------------------------------------------
+ static
+ std::string
+ section_flags( Elf_Xword flags )
+ {
+ std::string ret = "";
+ if ( flags & SHF_WRITE ) {
+ ret += "W";
+ }
+ if ( flags & SHF_ALLOC ) {
+ ret += "A";
+ }
+ if ( flags & SHF_EXECINSTR ) {
+ ret += "X";
+ }
+
+ return ret;
+ }
+
+
+//------------------------------------------------------------------------------
+#define STR_FUNC_TABLE( name ) \
+ template< typename T > \
+ static \
+ std::string \
+ str_##name( const T key ) \
+ { \
+ return format_assoc( name##_table, key ); \
+ }
+
+ STR_FUNC_TABLE( class )
+ STR_FUNC_TABLE( endian )
+ STR_FUNC_TABLE( version )
+ STR_FUNC_TABLE( type )
+ STR_FUNC_TABLE( machine )
+ STR_FUNC_TABLE( section_type )
+ STR_FUNC_TABLE( segment_type )
+ 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
+#undef DUMP_HEX_FORMAT
+#undef DUMP_STR_FORMAT
+}; // class dump
+
+
+}; // namespace ELFIO
+
+#endif // ELFIO_DUMP_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_dynamic.hpp b/utils/bcmregtool/elfio/elfio/elfio_dynamic.hpp
new file mode 100644
index 0000000..64f13b9
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_dynamic.hpp
@@ -0,0 +1,257 @@
+/*
+Copyright (C) 2001-2015 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 {
+
+//------------------------------------------------------------------------------
+template< class S >
+class dynamic_section_accessor_template
+{
+ public:
+//------------------------------------------------------------------------------
+ dynamic_section_accessor_template( const elfio& elf_file_, S* 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[ get_string_table_index() ];
+ const char* result = strsec.get_string( value );
+ if ( 0 == result ) {
+ str.clear();
+ return false;
+ }
+ str = result;
+ }
+ else {
+ str.clear();
+ }
+
+ return true;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ add_entry( Elf_Xword& tag,
+ Elf_Xword& value )
+ {
+ if ( elf_file.get_class() == ELFCLASS32 ) {
+ generic_add_entry< Elf32_Dyn >( tag, value );
+ }
+ else {
+ generic_add_entry< Elf64_Dyn >( tag, value );
+ }
+ }
+
+//------------------------------------------------------------------------------
+ void
+ add_entry( Elf_Xword& tag,
+ std::string& str )
+ {
+ string_section_accessor strsec =
+ elf_file.sections[ get_string_table_index() ];
+ Elf_Xword value = strsec.add_string( str );
+ add_entry( tag, value );
+ }
+
+//------------------------------------------------------------------------------
+ private:
+//------------------------------------------------------------------------------
+ Elf_Half
+ get_string_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();
+
+ // Check unusual case when dynamic section has no data
+ if( dynamic_section->get_data() == 0 ||
+ ( index + 1 ) * dynamic_section->get_entry_size() > dynamic_section->get_size() ) {
+ tag = DT_NULL;
+ value = 0;
+ return;
+ }
+
+ 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:
+ case DT_SYMBOLIC:
+ case DT_TEXTREL:
+ case DT_BIND_NOW:
+ 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:
+ 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;
+ }
+ }
+
+//------------------------------------------------------------------------------
+ template< class T >
+ void
+ generic_add_entry( Elf_Xword tag, Elf_Xword value )
+ {
+ const endianess_convertor& convertor = elf_file.get_convertor();
+
+ T entry;
+
+ switch ( tag ) {
+ case DT_NULL:
+ case DT_SYMBOLIC:
+ case DT_TEXTREL:
+ case DT_BIND_NOW:
+ value = 0;
+ 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:
+ entry.d_un.d_val = convertor( value );
+ 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:
+ entry.d_un.d_ptr = convertor( value );
+ break;
+ }
+
+ entry.d_tag = convertor( tag );
+
+ dynamic_section->append_data( reinterpret_cast<char*>( &entry ), sizeof( entry ) );
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ const elfio& elf_file;
+ S* dynamic_section;
+};
+
+using dynamic_section_accessor = dynamic_section_accessor_template<section>;
+using const_dynamic_section_accessor = dynamic_section_accessor_template<const section>;
+
+} // namespace ELFIO
+
+#endif // ELFIO_DYNAMIC_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_header.hpp b/utils/bcmregtool/elfio/elfio/elfio_header.hpp
new file mode 100644
index 0000000..6f8da02
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_header.hpp
@@ -0,0 +1,145 @@
+/*
+Copyright (C) 2001-2015 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 ELF_HEADER_HPP
+#define ELF_HEADER_HPP
+
+#include <iostream>
+
+namespace ELFIO {
+
+class elf_header
+{
+ public:
+ virtual ~elf_header() {};
+ virtual bool load( std::istream& stream ) = 0;
+ virtual bool save( std::ostream& stream ) const = 0;
+
+ // ELF header functions
+ ELFIO_GET_ACCESS_DECL( unsigned char, class );
+ ELFIO_GET_ACCESS_DECL( unsigned char, elf_version );
+ ELFIO_GET_ACCESS_DECL( unsigned char, encoding );
+ ELFIO_GET_ACCESS_DECL( Elf_Half, header_size );
+ ELFIO_GET_ACCESS_DECL( Elf_Half, section_entry_size );
+ ELFIO_GET_ACCESS_DECL( Elf_Half, segment_entry_size );
+
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Word, version );
+ ELFIO_GET_SET_ACCESS_DECL( unsigned char, os_abi );
+ ELFIO_GET_SET_ACCESS_DECL( unsigned char, abi_version );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Half, type );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Half, machine );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags );
+ ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, entry );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Half, sections_num );
+ ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, sections_offset );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Half, segments_num );
+ ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, segments_offset );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Half, section_name_str_index );
+};
+
+
+template< class T > struct elf_header_impl_types;
+template<> struct elf_header_impl_types<Elf32_Ehdr> {
+ typedef Elf32_Phdr Phdr_type;
+ typedef Elf32_Shdr Shdr_type;
+ static const unsigned char file_class = ELFCLASS32;
+};
+template<> struct elf_header_impl_types<Elf64_Ehdr> {
+ typedef Elf64_Phdr Phdr_type;
+ typedef Elf64_Shdr Shdr_type;
+ static const unsigned char file_class = ELFCLASS64;
+};
+
+template< class T > class elf_header_impl : public elf_header
+{
+ public:
+ elf_header_impl( endianess_convertor* convertor_,
+ unsigned char encoding )
+ {
+ convertor = convertor_;
+
+ std::fill_n( reinterpret_cast<char*>( &header ), sizeof( header ), '\0' );
+
+ header.e_ident[EI_MAG0] = ELFMAG0;
+ header.e_ident[EI_MAG1] = ELFMAG1;
+ header.e_ident[EI_MAG2] = ELFMAG2;
+ header.e_ident[EI_MAG3] = ELFMAG3;
+ header.e_ident[EI_CLASS] = elf_header_impl_types<T>::file_class;
+ header.e_ident[EI_DATA] = encoding;
+ header.e_ident[EI_VERSION] = EV_CURRENT;
+ header.e_version = (*convertor)( (Elf_Word)EV_CURRENT );
+ header.e_ehsize = ( sizeof( header ) );
+ header.e_ehsize = (*convertor)( header.e_ehsize );
+ header.e_shstrndx = (*convertor)( (Elf_Half)1 );
+ header.e_phentsize = sizeof( typename elf_header_impl_types<T>::Phdr_type );
+ header.e_shentsize = sizeof( typename elf_header_impl_types<T>::Shdr_type );
+ header.e_phentsize = (*convertor)( header.e_phentsize );
+ header.e_shentsize = (*convertor)( header.e_shentsize );
+ }
+
+ bool
+ load( std::istream& stream )
+ {
+ stream.seekg( 0 );
+ stream.read( reinterpret_cast<char*>( &header ), sizeof( header ) );
+
+ return (stream.gcount() == sizeof( header ) );
+ }
+
+ bool
+ save( std::ostream& stream ) const
+ {
+ stream.seekp( 0 );
+ stream.write( reinterpret_cast<const char*>( &header ), sizeof( header ) );
+
+ return stream.good();
+ }
+
+ // ELF header functions
+ ELFIO_GET_ACCESS( unsigned char, class, header.e_ident[EI_CLASS] );
+ ELFIO_GET_ACCESS( unsigned char, elf_version, header.e_ident[EI_VERSION] );
+ ELFIO_GET_ACCESS( unsigned char, encoding, header.e_ident[EI_DATA] );
+ ELFIO_GET_ACCESS( Elf_Half, header_size, header.e_ehsize );
+ ELFIO_GET_ACCESS( Elf_Half, section_entry_size, header.e_shentsize );
+ ELFIO_GET_ACCESS( Elf_Half, segment_entry_size, header.e_phentsize );
+
+ ELFIO_GET_SET_ACCESS( Elf_Word, version, header.e_version);
+ ELFIO_GET_SET_ACCESS( unsigned char, os_abi, header.e_ident[EI_OSABI] );
+ ELFIO_GET_SET_ACCESS( unsigned char, abi_version, header.e_ident[EI_ABIVERSION] );
+ ELFIO_GET_SET_ACCESS( Elf_Half, type, header.e_type );
+ ELFIO_GET_SET_ACCESS( Elf_Half, machine, header.e_machine );
+ ELFIO_GET_SET_ACCESS( Elf_Word, flags, header.e_flags );
+ ELFIO_GET_SET_ACCESS( Elf_Half, section_name_str_index, header.e_shstrndx );
+ ELFIO_GET_SET_ACCESS( Elf64_Addr, entry, header.e_entry );
+ ELFIO_GET_SET_ACCESS( Elf_Half, sections_num, header.e_shnum );
+ ELFIO_GET_SET_ACCESS( Elf64_Off, sections_offset, header.e_shoff );
+ ELFIO_GET_SET_ACCESS( Elf_Half, segments_num, header.e_phnum );
+ ELFIO_GET_SET_ACCESS( Elf64_Off, segments_offset, header.e_phoff );
+
+ private:
+ T header;
+ endianess_convertor* convertor;
+};
+
+} // namespace ELFIO
+
+#endif // ELF_HEADER_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_note.hpp b/utils/bcmregtool/elfio/elfio/elfio_note.hpp
new file mode 100644
index 0000000..8619c73
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_note.hpp
@@ -0,0 +1,170 @@
+/*
+Copyright (C) 2001-2015 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_NOTE_HPP
+#define ELFIO_NOTE_HPP
+
+namespace ELFIO {
+
+//------------------------------------------------------------------------------
+// There are discrepancies in documentations. SCO documentation
+// (http://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section)
+// requires 8 byte entries alignment for 64-bit ELF file,
+// but Oracle's definition uses the same structure
+// for 32-bit and 64-bit formats.
+// (https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-18048.html)
+//
+// It looks like EM_X86_64 Linux implementation is similar to Oracle's
+// definition. Therefore, the same alignment works for both formats
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+template< class S >
+class note_section_accessor_template
+{
+ public:
+//------------------------------------------------------------------------------
+ note_section_accessor_template( const elfio& elf_file_, S* section_ ) :
+ elf_file( elf_file_ ), note_section( section_ )
+ {
+ process_section();
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Word
+ get_notes_num() const
+ {
+ return (Elf_Word)note_start_positions.size();
+ }
+
+//------------------------------------------------------------------------------
+ bool
+ get_note( Elf_Word index,
+ Elf_Word& type,
+ std::string& name,
+ void*& desc,
+ Elf_Word& descSize ) const
+ {
+ if ( index >= note_section->get_size() ) {
+ return false;
+ }
+
+ const char* pData = note_section->get_data() + note_start_positions[index];
+ int align = sizeof( Elf_Word );
+
+ const endianess_convertor& convertor = elf_file.get_convertor();
+ type = convertor( *(const Elf_Word*)( pData + 2*align ) );
+ Elf_Word namesz = convertor( *(const Elf_Word*)( pData ) );
+ descSize = convertor( *(const Elf_Word*)( pData + sizeof( namesz ) ) );
+ Elf_Xword max_name_size = note_section->get_size() - note_start_positions[index];
+ if ( namesz > max_name_size ||
+ namesz + descSize > max_name_size ) {
+ return false;
+ }
+ name.assign( pData + 3*align, namesz - 1);
+ if ( 0 == descSize ) {
+ desc = 0;
+ }
+ else {
+ desc = const_cast<char*> ( pData + 3*align +
+ ( ( namesz + align - 1 )/align )*align );
+ }
+
+ return true;
+ }
+
+//------------------------------------------------------------------------------
+ void add_note( Elf_Word type,
+ const std::string& name,
+ const void* desc,
+ Elf_Word descSize )
+ {
+ const endianess_convertor& convertor = elf_file.get_convertor();
+
+ int align = sizeof( Elf_Word );
+ Elf_Word nameLen = (Elf_Word)name.size() + 1;
+ Elf_Word nameLenConv = convertor( nameLen );
+ std::string buffer( reinterpret_cast<char*>( &nameLenConv ), align );
+ Elf_Word descSizeConv = convertor( descSize );
+ buffer.append( reinterpret_cast<char*>( &descSizeConv ), align );
+ type = convertor( type );
+ buffer.append( reinterpret_cast<char*>( &type ), align );
+ buffer.append( name );
+ buffer.append( 1, '\x00' );
+ const char pad[] = { '\0', '\0', '\0', '\0' };
+ if ( nameLen % align != 0 ) {
+ buffer.append( pad, align - nameLen % align );
+ }
+ if ( desc != 0 && descSize != 0 ) {
+ buffer.append( reinterpret_cast<const char*>( desc ), descSize );
+ if ( descSize % align != 0 ) {
+ buffer.append( pad, align - descSize % align );
+ }
+ }
+
+ note_start_positions.push_back( note_section->get_size() );
+ note_section->append_data( buffer );
+ }
+
+ private:
+//------------------------------------------------------------------------------
+ void process_section()
+ {
+ const endianess_convertor& convertor = elf_file.get_convertor();
+ const char* data = note_section->get_data();
+ Elf_Xword size = note_section->get_size();
+ Elf_Xword current = 0;
+
+ note_start_positions.clear();
+
+ // Is it empty?
+ if ( 0 == data || 0 == size ) {
+ return;
+ }
+
+ int align = sizeof( Elf_Word );
+ while ( current + 3*align <= size ) {
+ note_start_positions.push_back( current );
+ Elf_Word namesz = convertor(
+ *(const Elf_Word*)( data + current ) );
+ Elf_Word descsz = convertor(
+ *(const Elf_Word*)( data + current + sizeof( namesz ) ) );
+
+ current += 3*sizeof( Elf_Word ) +
+ ( ( namesz + align - 1 ) / align ) * align +
+ ( ( descsz + align - 1 ) / align ) * align;
+ }
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ const elfio& elf_file;
+ S* note_section;
+ std::vector<Elf_Xword> note_start_positions;
+};
+
+using note_section_accessor = note_section_accessor_template<section>;
+using const_note_section_accessor = note_section_accessor_template<const section>;
+
+} // namespace ELFIO
+
+#endif // ELFIO_NOTE_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_relocation.hpp b/utils/bcmregtool/elfio/elfio/elfio_relocation.hpp
new file mode 100644
index 0000000..238598e
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_relocation.hpp
@@ -0,0 +1,373 @@
+/*
+Copyright (C) 2001-2015 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_RELOCATION_HPP
+#define ELFIO_RELOCATION_HPP
+
+namespace ELFIO {
+
+template<typename T> struct get_sym_and_type;
+template<> struct get_sym_and_type< Elf32_Rel >
+{
+ static int get_r_sym( Elf_Xword info )
+ {
+ return ELF32_R_SYM( (Elf_Word)info );
+ }
+ static int get_r_type( Elf_Xword info )
+ {
+ return ELF32_R_TYPE( (Elf_Word)info );
+ }
+};
+template<> struct get_sym_and_type< Elf32_Rela >
+{
+ static int get_r_sym( Elf_Xword info )
+ {
+ return ELF32_R_SYM( (Elf_Word)info );
+ }
+ static int get_r_type( Elf_Xword info )
+ {
+ return ELF32_R_TYPE( (Elf_Word)info );
+ }
+};
+template<> struct get_sym_and_type< Elf64_Rel >
+{
+ static int get_r_sym( Elf_Xword info )
+ {
+ return ELF64_R_SYM( info );
+ }
+ static int get_r_type( Elf_Xword info )
+ {
+ return ELF64_R_TYPE( info );
+ }
+};
+template<> struct get_sym_and_type< Elf64_Rela >
+{
+ static int get_r_sym( Elf_Xword info )
+ {
+ return ELF64_R_SYM( info );
+ }
+ static int get_r_type( Elf_Xword info )
+ {
+ return ELF64_R_TYPE( info );
+ }
+};
+
+
+//------------------------------------------------------------------------------
+template< class S >
+class relocation_section_accessor_template
+{
+ public:
+//------------------------------------------------------------------------------
+ relocation_section_accessor_template( const elfio& elf_file_, S* section_ ) :
+ elf_file( elf_file_ ),
+ relocation_section( section_ )
+ {
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Xword
+ get_entries_num() const
+ {
+ Elf_Xword nRet = 0;
+
+ if ( 0 != relocation_section->get_entry_size() ) {
+ nRet = relocation_section->get_size() / relocation_section->get_entry_size();
+ }
+
+ return nRet;
+ }
+
+//------------------------------------------------------------------------------
+ bool
+ get_entry( Elf_Xword index,
+ Elf64_Addr& offset,
+ Elf_Word& symbol,
+ Elf_Word& type,
+ Elf_Sxword& addend ) const
+ {
+ if ( index >= get_entries_num() ) { // Is index valid
+ return false;
+ }
+
+ if ( elf_file.get_class() == ELFCLASS32 ) {
+ if ( SHT_REL == relocation_section->get_type() ) {
+ generic_get_entry_rel< Elf32_Rel >( index, offset, symbol,
+ type, addend );
+ }
+ else if ( SHT_RELA == relocation_section->get_type() ) {
+ generic_get_entry_rela< Elf32_Rela >( index, offset, symbol,
+ type, addend );
+ }
+ }
+ else {
+ if ( SHT_REL == relocation_section->get_type() ) {
+ generic_get_entry_rel< Elf64_Rel >( index, offset, symbol,
+ type, addend );
+ }
+ else if ( SHT_RELA == relocation_section->get_type() ) {
+ generic_get_entry_rela< Elf64_Rela >( index, offset, symbol,
+ type, addend );
+ }
+ }
+
+ return true;
+ }
+
+//------------------------------------------------------------------------------
+ bool
+ get_entry( Elf_Xword index,
+ Elf64_Addr& offset,
+ Elf64_Addr& symbolValue,
+ std::string& symbolName,
+ Elf_Word& type,
+ Elf_Sxword& addend,
+ Elf_Sxword& calcValue ) const
+ {
+ // Do regular job
+ Elf_Word symbol;
+ bool ret = get_entry( index, offset, symbol, type, addend );
+
+ // Find the symbol
+ Elf_Xword size;
+ unsigned char bind;
+ unsigned char symbolType;
+ Elf_Half section;
+ unsigned char other;
+
+ symbol_section_accessor symbols( elf_file, elf_file.sections[get_symbol_table_index()] );
+ ret = ret && symbols.get_symbol( symbol, symbolName, symbolValue,
+ size, bind, symbolType, section, other );
+
+ if ( ret ) { // Was it successful?
+ switch ( type ) {
+ case R_386_NONE: // none
+ calcValue = 0;
+ break;
+ case R_386_32: // S + A
+ calcValue = symbolValue + addend;
+ break;
+ case R_386_PC32: // S + A - P
+ calcValue = symbolValue + addend - offset;
+ break;
+ case R_386_GOT32: // G + A - P
+ calcValue = 0;
+ break;
+ case R_386_PLT32: // L + A - P
+ calcValue = 0;
+ break;
+ case R_386_COPY: // none
+ calcValue = 0;
+ break;
+ case R_386_GLOB_DAT: // S
+ case R_386_JMP_SLOT: // S
+ calcValue = symbolValue;
+ break;
+ case R_386_RELATIVE: // B + A
+ calcValue = addend;
+ break;
+ case R_386_GOTOFF: // S + A - GOT
+ calcValue = 0;
+ break;
+ case R_386_GOTPC: // GOT + A - P
+ calcValue = 0;
+ break;
+ default: // Not recognized symbol!
+ calcValue = 0;
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ add_entry( Elf64_Addr offset, Elf_Xword info )
+ {
+ if ( elf_file.get_class() == ELFCLASS32 ) {
+ generic_add_entry< Elf32_Rel >( offset, info );
+ }
+ else {
+ generic_add_entry< Elf64_Rel >( offset, info );
+ }
+ }
+
+//------------------------------------------------------------------------------
+ void
+ add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type )
+ {
+ Elf_Xword info;
+ if ( elf_file.get_class() == ELFCLASS32 ) {
+ info = ELF32_R_INFO( (Elf_Xword)symbol, type );
+ }
+ else {
+ info = ELF64_R_INFO((Elf_Xword)symbol, type );
+ }
+
+ add_entry( offset, info );
+ }
+
+//------------------------------------------------------------------------------
+ void
+ add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend )
+ {
+ if ( elf_file.get_class() == ELFCLASS32 ) {
+ generic_add_entry< Elf32_Rela >( offset, info, addend );
+ }
+ else {
+ generic_add_entry< Elf64_Rela >( offset, info, addend );
+ }
+ }
+
+//------------------------------------------------------------------------------
+ void
+ add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type,
+ Elf_Sxword addend )
+ {
+ Elf_Xword info;
+ if ( elf_file.get_class() == ELFCLASS32 ) {
+ info = ELF32_R_INFO( (Elf_Xword)symbol, type );
+ }
+ else {
+ info = ELF64_R_INFO( (Elf_Xword)symbol, type );
+ }
+
+ add_entry( offset, info, addend );
+ }
+
+//------------------------------------------------------------------------------
+ void
+ add_entry( string_section_accessor str_writer,
+ const char* str,
+ symbol_section_accessor sym_writer,
+ Elf64_Addr value,
+ Elf_Word size,
+ unsigned char sym_info,
+ unsigned char other,
+ Elf_Half shndx,
+ Elf64_Addr offset,
+ unsigned char type )
+ {
+ Elf_Word str_index = str_writer.add_string( str );
+ Elf_Word sym_index = sym_writer.add_symbol( str_index, value, size,
+ sym_info, other, shndx );
+ add_entry( offset, sym_index, type );
+ }
+
+//------------------------------------------------------------------------------
+ private:
+//------------------------------------------------------------------------------
+ Elf_Half
+ get_symbol_table_index() const
+ {
+ return (Elf_Half)relocation_section->get_link();
+ }
+
+//------------------------------------------------------------------------------
+ template< class T >
+ void
+ generic_get_entry_rel( Elf_Xword index,
+ Elf64_Addr& offset,
+ Elf_Word& symbol,
+ Elf_Word& type,
+ Elf_Sxword& addend ) const
+ {
+ const endianess_convertor& convertor = elf_file.get_convertor();
+
+ const T* pEntry = reinterpret_cast<const T*>(
+ relocation_section->get_data() +
+ index * relocation_section->get_entry_size() );
+ offset = convertor( pEntry->r_offset );
+ Elf_Xword tmp = convertor( pEntry->r_info );
+ symbol = get_sym_and_type<T>::get_r_sym( tmp );
+ type = get_sym_and_type<T>::get_r_type( tmp );
+ addend = 0;
+ }
+
+//------------------------------------------------------------------------------
+ template< class T >
+ void
+ generic_get_entry_rela( Elf_Xword index,
+ Elf64_Addr& offset,
+ Elf_Word& symbol,
+ Elf_Word& type,
+ Elf_Sxword& addend ) const
+ {
+ const endianess_convertor& convertor = elf_file.get_convertor();
+
+ const T* pEntry = reinterpret_cast<const T*>(
+ relocation_section->get_data() +
+ index * relocation_section->get_entry_size() );
+ offset = convertor( pEntry->r_offset );
+ Elf_Xword tmp = convertor( pEntry->r_info );
+ symbol = get_sym_and_type<T>::get_r_sym( tmp );
+ type = get_sym_and_type<T>::get_r_type( tmp );
+ addend = convertor( pEntry->r_addend );
+ }
+
+//------------------------------------------------------------------------------
+ template< class T >
+ void
+ generic_add_entry( Elf64_Addr offset, Elf_Xword info )
+ {
+ const endianess_convertor& convertor = elf_file.get_convertor();
+
+ T entry;
+ entry.r_offset = offset;
+ entry.r_info = info;
+ entry.r_offset = convertor( entry.r_offset );
+ entry.r_info = convertor( entry.r_info );
+
+ relocation_section->append_data( reinterpret_cast<char*>( &entry ), sizeof( entry ) );
+ }
+
+//------------------------------------------------------------------------------
+ template< class T >
+ void
+ generic_add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend )
+ {
+ const endianess_convertor& convertor = elf_file.get_convertor();
+
+ T entry;
+ entry.r_offset = offset;
+ entry.r_info = info;
+ entry.r_addend = addend;
+ entry.r_offset = convertor( entry.r_offset );
+ entry.r_info = convertor( entry.r_info );
+ entry.r_addend = convertor( entry.r_addend );
+
+ relocation_section->append_data( reinterpret_cast<char*>( &entry ), sizeof( entry ) );
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ const elfio& elf_file;
+ S* relocation_section;
+};
+
+using relocation_section_accessor = relocation_section_accessor_template<section>;
+using const_relocation_section_accessor = relocation_section_accessor_template<const section>;
+
+} // namespace ELFIO
+
+#endif // ELFIO_RELOCATION_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_section.hpp b/utils/bcmregtool/elfio/elfio/elfio_section.hpp
new file mode 100644
index 0000000..cb188c1
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_section.hpp
@@ -0,0 +1,313 @@
+/*
+Copyright (C) 2001-2015 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_SECTION_HPP
+#define ELFIO_SECTION_HPP
+
+#include <string>
+#include <iostream>
+
+namespace ELFIO {
+
+class section
+{
+ friend class elfio;
+ public:
+ virtual ~section() {};
+
+ ELFIO_GET_ACCESS_DECL ( Elf_Half, index );
+ ELFIO_GET_SET_ACCESS_DECL( std::string, name );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, flags );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Word, info );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Word, link );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, addr_align );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, entry_size );
+ ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, address );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, size );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Word, name_string_offset );
+ ELFIO_GET_ACCESS_DECL ( Elf64_Off, offset );
+ size_t stream_size;
+ size_t get_stream_size() const
+ {
+ return stream_size;
+ }
+
+ void set_stream_size(size_t value)
+ {
+ stream_size = value;
+ }
+
+ virtual const char* get_data() const = 0;
+ virtual void set_data( const char* pData, Elf_Word size ) = 0;
+ virtual void set_data( const std::string& data ) = 0;
+ virtual void append_data( const char* pData, Elf_Word size ) = 0;
+ virtual void append_data( const std::string& data ) = 0;
+
+ protected:
+ ELFIO_SET_ACCESS_DECL( Elf64_Off, offset );
+ ELFIO_SET_ACCESS_DECL( Elf_Half, index );
+
+ virtual void load( std::istream& f,
+ std::streampos header_offset ) = 0;
+ virtual void save( std::ostream& f,
+ std::streampos header_offset,
+ std::streampos data_offset ) = 0;
+ virtual bool is_address_initialized() const = 0;
+};
+
+
+template< class T >
+class section_impl : public section
+{
+ public:
+//------------------------------------------------------------------------------
+ section_impl( const endianess_convertor* convertor_ ) : convertor( convertor_ )
+ {
+ std::fill_n( reinterpret_cast<char*>( &header ), sizeof( header ), '\0' );
+ is_address_set = false;
+ data = 0;
+ data_size = 0;
+ }
+
+//------------------------------------------------------------------------------
+ ~section_impl()
+ {
+ delete [] data;
+ }
+
+//------------------------------------------------------------------------------
+ // Section info functions
+ ELFIO_GET_SET_ACCESS( Elf_Word, type, header.sh_type );
+ ELFIO_GET_SET_ACCESS( Elf_Xword, flags, header.sh_flags );
+ ELFIO_GET_SET_ACCESS( Elf_Xword, size, header.sh_size );
+ ELFIO_GET_SET_ACCESS( Elf_Word, link, header.sh_link );
+ ELFIO_GET_SET_ACCESS( Elf_Word, info, header.sh_info );
+ ELFIO_GET_SET_ACCESS( Elf_Xword, addr_align, header.sh_addralign );
+ ELFIO_GET_SET_ACCESS( Elf_Xword, entry_size, header.sh_entsize );
+ ELFIO_GET_SET_ACCESS( Elf_Word, name_string_offset, header.sh_name );
+ ELFIO_GET_ACCESS ( Elf64_Addr, address, header.sh_addr );
+
+//------------------------------------------------------------------------------
+ Elf_Half
+ get_index() const
+ {
+ return index;
+ }
+
+
+//------------------------------------------------------------------------------
+ std::string
+ get_name() const
+ {
+ return name;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ set_name( std::string name_ )
+ {
+ name = name_;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ set_address( Elf64_Addr value )
+ {
+ header.sh_addr = value;
+ header.sh_addr = (*convertor)( header.sh_addr );
+ is_address_set = true;
+ }
+
+//------------------------------------------------------------------------------
+ bool
+ is_address_initialized() const
+ {
+ return is_address_set;
+ }
+
+//------------------------------------------------------------------------------
+ const char*
+ get_data() const
+ {
+ return data;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ set_data( const char* raw_data, Elf_Word size )
+ {
+ if ( get_type() != SHT_NOBITS ) {
+ delete [] data;
+ try {
+ data = new char[size];
+ } catch (const std::bad_alloc&) {
+ data = 0;
+ data_size = 0;
+ size = 0;
+ }
+ if ( 0 != data && 0 != raw_data ) {
+ data_size = size;
+ std::copy( raw_data, raw_data + size, data );
+ }
+ }
+
+ set_size( size );
+ }
+
+//------------------------------------------------------------------------------
+ void
+ set_data( const std::string& str_data )
+ {
+ return set_data( str_data.c_str(), (Elf_Word)str_data.size() );
+ }
+
+//------------------------------------------------------------------------------
+ void
+ append_data( const char* raw_data, Elf_Word size )
+ {
+ if ( get_type() != SHT_NOBITS ) {
+ if ( get_size() + size < data_size ) {
+ std::copy( raw_data, raw_data + size, data + get_size() );
+ }
+ else {
+ data_size = 2*( data_size + size);
+ char* new_data;
+ try {
+ new_data = new char[data_size];
+ } catch (const std::bad_alloc&) {
+ new_data = 0;
+ size = 0;
+ }
+ if ( 0 != new_data ) {
+ std::copy( data, data + get_size(), new_data );
+ std::copy( raw_data, raw_data + size, new_data + get_size() );
+ delete [] data;
+ data = new_data;
+ }
+ }
+ set_size( get_size() + size );
+ }
+ }
+
+//------------------------------------------------------------------------------
+ void
+ append_data( const std::string& str_data )
+ {
+ return append_data( str_data.c_str(), (Elf_Word)str_data.size() );
+ }
+
+//------------------------------------------------------------------------------
+ protected:
+//------------------------------------------------------------------------------
+ ELFIO_GET_SET_ACCESS( Elf64_Off, offset, header.sh_offset );
+
+//------------------------------------------------------------------------------
+ void
+ set_index( Elf_Half value )
+ {
+ index = value;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ load( std::istream& stream,
+ std::streampos header_offset )
+ {
+ std::fill_n( reinterpret_cast<char*>( &header ), sizeof( header ), '\0' );
+
+ stream.seekg ( 0, stream.end );
+ set_stream_size ( stream.tellg() );
+
+ stream.seekg( header_offset );
+ stream.read( reinterpret_cast<char*>( &header ), sizeof( header ) );
+
+
+ Elf_Xword size = get_size();
+ if ( 0 == data && SHT_NULL != get_type() && SHT_NOBITS != get_type() && size < get_stream_size()) {
+ try {
+ data = new char[size + 1];
+ } catch (const std::bad_alloc&) {
+ data = 0;
+ data_size = 0;
+ }
+ if ( 0 != size ) {
+ stream.seekg( (*convertor)( header.sh_offset ) );
+ stream.read( data, size );
+ data[size] = 0; //ensure data is ended with 0 to avoid oob read
+ data_size = size;
+ }
+ }
+ }
+
+//------------------------------------------------------------------------------
+ void
+ save( std::ostream& f,
+ std::streampos header_offset,
+ std::streampos data_offset )
+ {
+ if ( 0 != get_index() ) {
+ header.sh_offset = data_offset;
+ header.sh_offset = (*convertor)( header.sh_offset );
+ }
+
+ save_header( f, header_offset );
+ if ( get_type() != SHT_NOBITS && get_type() != SHT_NULL &&
+ get_size() != 0 && data != 0 ) {
+ save_data( f, data_offset );
+ }
+ }
+
+//------------------------------------------------------------------------------
+ private:
+//------------------------------------------------------------------------------
+ void
+ save_header( std::ostream& f,
+ std::streampos header_offset ) const
+ {
+ f.seekp( header_offset );
+ f.write( reinterpret_cast<const char*>( &header ), sizeof( header ) );
+ }
+
+//------------------------------------------------------------------------------
+ void
+ save_data( std::ostream& f,
+ std::streampos data_offset ) const
+ {
+ f.seekp( data_offset );
+ f.write( get_data(), get_size() );
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ T header;
+ Elf_Half index;
+ std::string name;
+ char* data;
+ Elf_Word data_size;
+ const endianess_convertor* convertor;
+ bool is_address_set;
+};
+
+} // namespace ELFIO
+
+#endif // ELFIO_SECTION_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_segment.hpp b/utils/bcmregtool/elfio/elfio/elfio_segment.hpp
new file mode 100644
index 0000000..249c6f3
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_segment.hpp
@@ -0,0 +1,244 @@
+/*
+Copyright (C) 2001-2015 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_SEGMENT_HPP
+#define ELFIO_SEGMENT_HPP
+
+#include <iostream>
+#include <vector>
+
+namespace ELFIO {
+
+class segment
+{
+ friend class elfio;
+ public:
+ virtual ~segment() {};
+
+ ELFIO_GET_ACCESS_DECL ( Elf_Half, index );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, align );
+ ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, virtual_address );
+ ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, physical_address );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, file_size );
+ ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, memory_size );
+ ELFIO_GET_ACCESS_DECL( Elf64_Off, offset );
+
+ virtual const char* get_data() const = 0;
+
+ virtual Elf_Half add_section_index( Elf_Half index, Elf_Xword addr_align ) = 0;
+ virtual Elf_Half get_sections_num() const = 0;
+ virtual Elf_Half get_section_index_at( Elf_Half num ) const = 0;
+ virtual bool is_offset_initialized() const = 0;
+
+ protected:
+ ELFIO_SET_ACCESS_DECL( Elf64_Off, offset );
+ ELFIO_SET_ACCESS_DECL( Elf_Half, index );
+
+ virtual const std::vector<Elf_Half>& get_sections() const = 0;
+ virtual void load( std::istream& stream, std::streampos header_offset ) = 0;
+ virtual void save( std::ostream& f, std::streampos header_offset,
+ std::streampos data_offset ) = 0;
+};
+
+
+//------------------------------------------------------------------------------
+template< class T >
+class segment_impl : public segment
+{
+ public:
+//------------------------------------------------------------------------------
+ segment_impl( endianess_convertor* convertor_ ) :
+ convertor( convertor_ )
+ {
+ is_offset_set = false;
+ std::fill_n( reinterpret_cast<char*>( &ph ), sizeof( ph ), '\0' );
+ data = 0;
+ }
+
+//------------------------------------------------------------------------------
+ virtual ~segment_impl()
+ {
+ delete [] data;
+ }
+
+//------------------------------------------------------------------------------
+ // Section info functions
+ ELFIO_GET_SET_ACCESS( Elf_Word, type, ph.p_type );
+ ELFIO_GET_SET_ACCESS( Elf_Word, flags, ph.p_flags );
+ ELFIO_GET_SET_ACCESS( Elf_Xword, align, ph.p_align );
+ ELFIO_GET_SET_ACCESS( Elf64_Addr, virtual_address, ph.p_vaddr );
+ ELFIO_GET_SET_ACCESS( Elf64_Addr, physical_address, ph.p_paddr );
+ ELFIO_GET_SET_ACCESS( Elf_Xword, file_size, ph.p_filesz );
+ ELFIO_GET_SET_ACCESS( Elf_Xword, memory_size, ph.p_memsz );
+ ELFIO_GET_ACCESS( Elf64_Off, offset, ph.p_offset );
+ size_t stream_size;
+
+//------------------------------------------------------------------------------
+ size_t
+ get_stream_size() const
+ {
+ return stream_size;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ set_stream_size(size_t value)
+ {
+ stream_size = value;
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Half
+ get_index() const
+ {
+ return index;
+ }
+
+//------------------------------------------------------------------------------
+ const char*
+ get_data() const
+ {
+ return data;
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Half
+ add_section_index( Elf_Half sec_index, Elf_Xword addr_align )
+ {
+ sections.push_back( sec_index );
+ if ( addr_align > get_align() ) {
+ set_align( addr_align );
+ }
+
+ return (Elf_Half)sections.size();
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Half
+ get_sections_num() const
+ {
+ return (Elf_Half)sections.size();
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Half
+ get_section_index_at( Elf_Half num ) const
+ {
+ if ( num < sections.size() ) {
+ return sections[num];
+ }
+
+ return Elf_Half(-1);
+ }
+
+//------------------------------------------------------------------------------
+ protected:
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+ void
+ set_offset( Elf64_Off value )
+ {
+ ph.p_offset = value;
+ ph.p_offset = (*convertor)( ph.p_offset );
+ is_offset_set = true;
+ }
+
+//------------------------------------------------------------------------------
+ bool
+ is_offset_initialized() const
+ {
+ return is_offset_set;
+ }
+
+//------------------------------------------------------------------------------
+ const std::vector<Elf_Half>&
+ get_sections() const
+ {
+ return sections;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ set_index( Elf_Half value )
+ {
+ index = value;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ load( std::istream& stream,
+ std::streampos header_offset )
+ {
+
+ stream.seekg ( 0, stream.end );
+ set_stream_size ( stream.tellg() );
+
+ stream.seekg( header_offset );
+ stream.read( reinterpret_cast<char*>( &ph ), sizeof( ph ) );
+ is_offset_set = true;
+
+ if ( PT_NULL != get_type() && 0 != get_file_size() ) {
+ stream.seekg( (*convertor)( ph.p_offset ) );
+ Elf_Xword size = get_file_size();
+ if ( size > get_stream_size() ) {
+ data = 0;
+ } else {
+ try {
+ data = new char[size + 1];
+ } catch (const std::bad_alloc&) {
+ data = 0;
+ }
+ if ( 0 != data ) {
+ stream.read( data, size );
+ data[size] = 0;
+ }
+ }
+ }
+ }
+
+//------------------------------------------------------------------------------
+ void save( std::ostream& f,
+ std::streampos header_offset,
+ std::streampos data_offset )
+ {
+ ph.p_offset = data_offset;
+ ph.p_offset = (*convertor)(ph.p_offset);
+ f.seekp( header_offset );
+ f.write( reinterpret_cast<const char*>( &ph ), sizeof( ph ) );
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ T ph;
+ Elf_Half index;
+ char* data;
+ std::vector<Elf_Half> sections;
+ endianess_convertor* convertor;
+ bool is_offset_set;
+};
+
+} // namespace ELFIO
+
+#endif // ELFIO_SEGMENT_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_strings.hpp b/utils/bcmregtool/elfio/elfio/elfio_strings.hpp
new file mode 100644
index 0000000..552f000
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_strings.hpp
@@ -0,0 +1,100 @@
+/*
+Copyright (C) 2001-2015 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_STRINGS_HPP
+#define ELFIO_STRINGS_HPP
+
+#include <cstdlib>
+#include <cstring>
+#include <string>
+
+namespace ELFIO {
+
+//------------------------------------------------------------------------------
+template< class S >
+class string_section_accessor_template
+{
+ public:
+//------------------------------------------------------------------------------
+ string_section_accessor_template( S* section_ ) :
+ string_section( section_ )
+ {
+ }
+
+
+//------------------------------------------------------------------------------
+ const char*
+ get_string( Elf_Word index ) const
+ {
+ if ( string_section ) {
+ if ( index < string_section->get_size() ) {
+ const char* data = string_section->get_data();
+ if ( 0 != data ) {
+ return data + index;
+ }
+ }
+ }
+
+ return 0;
+ }
+
+
+//------------------------------------------------------------------------------
+ Elf_Word
+ add_string( const char* str )
+ {
+ Elf_Word current_position = 0;
+
+ if (string_section) {
+ // Strings are addeded to the end of the current section data
+ current_position = (Elf_Word)string_section->get_size();
+
+ if ( current_position == 0 ) {
+ char empty_string = '\0';
+ string_section->append_data( &empty_string, 1 );
+ current_position++;
+ }
+ string_section->append_data( str, (Elf_Word)std::strlen( str ) + 1 );
+ }
+
+ return current_position;
+ }
+
+
+//------------------------------------------------------------------------------
+ Elf_Word
+ add_string( const std::string& str )
+ {
+ return add_string( str.c_str() );
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ S* string_section;
+};
+
+using string_section_accessor = string_section_accessor_template<section>;
+using const_string_section_accessor = string_section_accessor_template<const section>;
+
+} // namespace ELFIO
+
+#endif // ELFIO_STRINGS_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_symbols.hpp b/utils/bcmregtool/elfio/elfio/elfio_symbols.hpp
new file mode 100644
index 0000000..d18756a
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_symbols.hpp
@@ -0,0 +1,282 @@
+/*
+Copyright (C) 2001-2015 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_SYMBOLS_HPP
+#define ELFIO_SYMBOLS_HPP
+
+namespace ELFIO {
+
+//------------------------------------------------------------------------------
+template< class S >
+class symbol_section_accessor_template
+{
+ public:
+//------------------------------------------------------------------------------
+ symbol_section_accessor_template( const elfio& elf_file_, S* symbol_section_ ) :
+ elf_file( elf_file_ ),
+ symbol_section( symbol_section_ )
+ {
+ find_hash_section();
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Xword
+ get_symbols_num() const
+ {
+ Elf_Xword nRet = 0;
+ if ( 0 != symbol_section->get_entry_size() ) {
+ nRet = symbol_section->get_size() / symbol_section->get_entry_size();
+ }
+
+ return nRet;
+ }
+
+//------------------------------------------------------------------------------
+ bool
+ get_symbol( Elf_Xword index,
+ std::string& name,
+ Elf64_Addr& value,
+ Elf_Xword& size,
+ unsigned char& bind,
+ unsigned char& type,
+ Elf_Half& section_index,
+ unsigned char& other ) const
+ {
+ bool ret = false;
+
+ if ( elf_file.get_class() == ELFCLASS32 ) {
+ ret = generic_get_symbol<Elf32_Sym>( index, name, value, size, bind,
+ type, section_index, other );
+ }
+ else {
+ ret = generic_get_symbol<Elf64_Sym>( index, name, value, size, bind,
+ type, section_index, other );
+ }
+
+ return ret;
+ }
+
+//------------------------------------------------------------------------------
+ bool
+ get_symbol( const std::string& name,
+ Elf64_Addr& value,
+ Elf_Xword& size,
+ unsigned char& bind,
+ unsigned char& type,
+ Elf_Half& section_index,
+ unsigned char& other ) const
+ {
+ bool ret = false;
+
+ if ( 0 != get_hash_table_index() ) {
+ Elf_Word nbucket = *(const Elf_Word*)hash_section->get_data();
+ Elf_Word nchain = *(const Elf_Word*)( hash_section->get_data() +
+ sizeof( Elf_Word ) );
+ Elf_Word val = elf_hash( (const unsigned char*)name.c_str() );
+
+ Elf_Word y = *(const Elf_Word*)( hash_section->get_data() +
+ ( 2 + val % nbucket ) * sizeof( Elf_Word ) );
+ std::string str;
+ get_symbol( y, str, value, size, bind, type, section_index, other );
+ while ( str != name && STN_UNDEF != y && y < nchain ) {
+ y = *(const Elf_Word*)( hash_section->get_data() +
+ ( 2 + nbucket + y ) * sizeof( Elf_Word ) );
+ get_symbol( y, str, value, size, bind, type, section_index, other );
+ }
+ if ( str == name ) {
+ ret = true;
+ }
+ }
+
+ return ret;
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Word
+ add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size,
+ unsigned char info, unsigned char other,
+ Elf_Half shndx )
+ {
+ Elf_Word nRet;
+
+ if ( symbol_section->get_size() == 0 ) {
+ if ( elf_file.get_class() == ELFCLASS32 ) {
+ nRet = generic_add_symbol<Elf32_Sym>( 0, 0, 0, 0, 0, 0 );
+ }
+ else {
+ nRet = generic_add_symbol<Elf64_Sym>( 0, 0, 0, 0, 0, 0 );
+ }
+ }
+
+ if ( elf_file.get_class() == ELFCLASS32 ) {
+ nRet = generic_add_symbol<Elf32_Sym>( name, value, size, info, other,
+ shndx );
+ }
+ else {
+ nRet = generic_add_symbol<Elf64_Sym>( name, value, size, info, other,
+ shndx );
+ }
+
+ return nRet;
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Word
+ add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size,
+ unsigned char bind, unsigned char type, unsigned char other,
+ Elf_Half shndx )
+ {
+ return add_symbol( name, value, size, ELF_ST_INFO( bind, type ), other, shndx );
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Word
+ add_symbol( string_section_accessor& pStrWriter, const char* str,
+ Elf64_Addr value, Elf_Xword size,
+ unsigned char info, unsigned char other,
+ Elf_Half shndx )
+ {
+ Elf_Word index = pStrWriter.add_string( str );
+ return add_symbol( index, value, size, info, other, shndx );
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Word
+ add_symbol( string_section_accessor& pStrWriter, const char* str,
+ Elf64_Addr value, Elf_Xword size,
+ unsigned char bind, unsigned char type, unsigned char other,
+ Elf_Half shndx )
+ {
+ return add_symbol( pStrWriter, str, value, size, ELF_ST_INFO( bind, type ), other, shndx );
+ }
+
+//------------------------------------------------------------------------------
+ private:
+//------------------------------------------------------------------------------
+ void
+ find_hash_section()
+ {
+ hash_section = 0;
+ hash_section_index = 0;
+ Elf_Half nSecNo = elf_file.sections.size();
+ for ( Elf_Half i = 0; i < nSecNo && 0 == hash_section_index; ++i ) {
+ const section* sec = elf_file.sections[i];
+ if ( sec->get_link() == symbol_section->get_index() ) {
+ hash_section = sec;
+ hash_section_index = i;
+ }
+ }
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Half
+ get_string_table_index() const
+ {
+ return (Elf_Half)symbol_section->get_link();
+ }
+
+//------------------------------------------------------------------------------
+ Elf_Half
+ get_hash_table_index() const
+ {
+ return hash_section_index;
+ }
+
+//------------------------------------------------------------------------------
+ template< class T >
+ bool
+ generic_get_symbol( Elf_Xword index,
+ std::string& name, Elf64_Addr& value,
+ Elf_Xword& size,
+ unsigned char& bind, unsigned char& type,
+ Elf_Half& section_index,
+ unsigned char& other ) const
+ {
+ bool ret = false;
+
+ if ( index < get_symbols_num() ) {
+ const T* pSym = reinterpret_cast<const T*>(
+ symbol_section->get_data() +
+ index * symbol_section->get_entry_size() );
+
+ const endianess_convertor& convertor = elf_file.get_convertor();
+
+ section* string_section = elf_file.sections[get_string_table_index()];
+ string_section_accessor str_reader( string_section );
+ const char* pStr = str_reader.get_string( convertor( pSym->st_name ) );
+ if ( 0 != pStr ) {
+ name = pStr;
+ }
+ value = convertor( pSym->st_value );
+ size = convertor( pSym->st_size );
+ bind = ELF_ST_BIND( pSym->st_info );
+ type = ELF_ST_TYPE( pSym->st_info );
+ section_index = convertor( pSym->st_shndx );
+ other = pSym->st_other;
+
+ ret = true;
+ }
+
+ return ret;
+ }
+
+//------------------------------------------------------------------------------
+ template< class T >
+ Elf_Word
+ generic_add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size,
+ unsigned char info, unsigned char other,
+ Elf_Half shndx )
+ {
+ const endianess_convertor& convertor = elf_file.get_convertor();
+
+ T entry;
+ entry.st_name = convertor( name );
+ entry.st_value = value;
+ entry.st_value = convertor( entry.st_value );
+ entry.st_size = size;
+ entry.st_size = convertor( entry.st_size );
+ entry.st_info = convertor( info );
+ entry.st_other = convertor( other );
+ entry.st_shndx = convertor( shndx );
+
+ symbol_section->append_data( reinterpret_cast<char*>( &entry ),
+ sizeof( entry ) );
+
+ Elf_Word nRet = symbol_section->get_size() / sizeof( entry ) - 1;
+
+ return nRet;
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ const elfio& elf_file;
+ S* symbol_section;
+ Elf_Half hash_section_index;
+ const section* hash_section;
+};
+
+using symbol_section_accessor = symbol_section_accessor_template<section>;
+using const_symbol_section_accessor = symbol_section_accessor_template<const section>;
+
+} // namespace ELFIO
+
+#endif // ELFIO_SYMBOLS_HPP
diff --git a/utils/bcmregtool/elfio/elfio/elfio_utils.hpp b/utils/bcmregtool/elfio/elfio/elfio_utils.hpp
new file mode 100644
index 0000000..2baf5a7
--- /dev/null
+++ b/utils/bcmregtool/elfio/elfio/elfio_utils.hpp
@@ -0,0 +1,209 @@
+/*
+Copyright (C) 2001-2015 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_UTILS_HPP
+#define ELFIO_UTILS_HPP
+
+#define ELFIO_GET_ACCESS( TYPE, NAME, FIELD ) \
+ TYPE get_##NAME() const \
+ { \
+ return (*convertor)( FIELD ); \
+ }
+#define ELFIO_SET_ACCESS( TYPE, NAME, FIELD ) \
+ void set_##NAME( TYPE value ) \
+ { \
+ FIELD = value; \
+ FIELD = (*convertor)( FIELD ); \
+ }
+#define ELFIO_GET_SET_ACCESS( TYPE, NAME, FIELD ) \
+ TYPE get_##NAME() const \
+ { \
+ return (*convertor)( FIELD ); \
+ } \
+ void set_##NAME( TYPE value ) \
+ { \
+ FIELD = value; \
+ FIELD = (*convertor)( FIELD ); \
+ }
+
+#define ELFIO_GET_ACCESS_DECL( TYPE, NAME ) \
+ virtual TYPE get_##NAME() const = 0
+
+#define ELFIO_SET_ACCESS_DECL( TYPE, NAME ) \
+ virtual void set_##NAME( TYPE value ) = 0
+
+#define ELFIO_GET_SET_ACCESS_DECL( TYPE, NAME ) \
+ virtual TYPE get_##NAME() const = 0; \
+ virtual void set_##NAME( TYPE value ) = 0
+
+namespace ELFIO {
+
+//------------------------------------------------------------------------------
+class endianess_convertor {
+ public:
+//------------------------------------------------------------------------------
+ endianess_convertor()
+ {
+ need_conversion = false;
+ }
+
+//------------------------------------------------------------------------------
+ void
+ setup( unsigned char elf_file_encoding )
+ {
+ need_conversion = ( elf_file_encoding != get_host_encoding() );
+ }
+
+//------------------------------------------------------------------------------
+ uint64_t
+ operator()( uint64_t value ) const
+ {
+ if ( !need_conversion ) {
+ return value;
+ }
+ value =
+ ( ( value & 0x00000000000000FFull ) << 56 ) |
+ ( ( value & 0x000000000000FF00ull ) << 40 ) |
+ ( ( value & 0x0000000000FF0000ull ) << 24 ) |
+ ( ( value & 0x00000000FF000000ull ) << 8 ) |
+ ( ( value & 0x000000FF00000000ull ) >> 8 ) |
+ ( ( value & 0x0000FF0000000000ull ) >> 24 ) |
+ ( ( value & 0x00FF000000000000ull ) >> 40 ) |
+ ( ( value & 0xFF00000000000000ull ) >> 56 );
+
+ return value;
+ }
+
+//------------------------------------------------------------------------------
+ int64_t
+ operator()( int64_t value ) const
+ {
+ if ( !need_conversion ) {
+ return value;
+ }
+ return (int64_t)(*this)( (uint64_t)value );
+ }
+
+//------------------------------------------------------------------------------
+ uint32_t
+ operator()( uint32_t value ) const
+ {
+ if ( !need_conversion ) {
+ return value;
+ }
+ value =
+ ( ( value & 0x000000FF ) << 24 ) |
+ ( ( value & 0x0000FF00 ) << 8 ) |
+ ( ( value & 0x00FF0000 ) >> 8 ) |
+ ( ( value & 0xFF000000 ) >> 24 );
+
+ return value;
+ }
+
+//------------------------------------------------------------------------------
+ int32_t
+ operator()( int32_t value ) const
+ {
+ if ( !need_conversion ) {
+ return value;
+ }
+ return (int32_t)(*this)( (uint32_t)value );
+ }
+
+//------------------------------------------------------------------------------
+ uint16_t
+ operator()( uint16_t value ) const
+ {
+ if ( !need_conversion ) {
+ return value;
+ }
+ value =
+ ( ( value & 0x00FF ) << 8 ) |
+ ( ( value & 0xFF00 ) >> 8 );
+
+ return value;
+ }
+
+//------------------------------------------------------------------------------
+ int16_t
+ operator()( int16_t value ) const
+ {
+ if ( !need_conversion ) {
+ return value;
+ }
+ return (int16_t)(*this)( (uint16_t)value );
+ }
+
+//------------------------------------------------------------------------------
+ int8_t
+ operator()( int8_t value ) const
+ {
+ return value;
+ }
+
+//------------------------------------------------------------------------------
+ uint8_t
+ operator()( uint8_t value ) const
+ {
+ return value;
+ }
+
+//------------------------------------------------------------------------------
+ private:
+//------------------------------------------------------------------------------
+ unsigned char
+ get_host_encoding() const
+ {
+ static const int tmp = 1;
+ if ( 1 == *(const char*)&tmp ) {
+ return ELFDATA2LSB;
+ }
+ else {
+ return ELFDATA2MSB;
+ }
+ }
+
+//------------------------------------------------------------------------------
+ private:
+ bool need_conversion;
+};
+
+
+//------------------------------------------------------------------------------
+inline
+uint32_t
+elf_hash( const unsigned char *name )
+{
+ uint32_t h = 0, g;
+ while ( *name ) {
+ h = (h << 4) + *name++;
+ g = h & 0xf0000000;
+ if ( g != 0 )
+ h ^= g >> 24;
+ h &= ~g;
+ }
+ return h;
+}
+
+} // namespace ELFIO
+
+#endif // ELFIO_UTILS_HPP
diff --git a/utils/bcmregtool/elfio/examples/Makefile.am b/utils/bcmregtool/elfio/examples/Makefile.am
new file mode 100644
index 0000000..737e029
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = elfdump tutorial writer write_obj anonymizer
diff --git a/utils/bcmregtool/elfio/examples/Makefile.in b/utils/bcmregtool/elfio/examples/Makefile.in
new file mode 100644
index 0000000..6d7d7d9
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/Makefile.in
@@ -0,0 +1,572 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = examples
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = elfdump tutorial writer write_obj anonymizer
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign examples/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @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; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic cscopelist-am ctags ctags-am \
+ distclean distclean-generic distclean-tags distdir dvi dvi-am \
+ html html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/bcmregtool/elfio/examples/RelocationTable/RelocationTable.cpp b/utils/bcmregtool/elfio/examples/RelocationTable/RelocationTable.cpp
new file mode 100644
index 0000000..5257078
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/RelocationTable/RelocationTable.cpp
@@ -0,0 +1,56 @@
+#include <cstdio>
+#include <ELFIO.h>
+
+int main( int, char* argv[] )
+{
+ // Create a ELFI reader
+ IELFI* pReader;
+ ELFIO::GetInstance()->CreateELFI( &pReader );
+
+ // Initialize it
+ char* filename = argv[1];
+ pReader->Load( filename );
+
+ // Get .text relocation entry
+ // List all sections of the file
+ int i;
+ int nSecNo = pReader->GetSectionsNum();
+ for ( i = 0; i < nSecNo; ++i ) { // For all sections
+ const IELFISection* pSec = pReader->GetSection( i );
+ if ( SHT_REL != pSec->GetType() && SHT_RELA != pSec->GetType() ) {
+ pSec->Release();
+ continue;
+ }
+ const IELFIRelocationTable* pRel = 0;
+ pReader->CreateSectionReader( IELFI::ELFI_RELOCATION, pSec, (void**)&pRel );
+
+ // Print all entries
+ Elf64_Addr offset;
+ Elf64_Addr symbolValue;
+ std::string symbolName;
+ unsigned char type;
+ Elf_Sxword addend;
+ Elf_Sxword calcValue;
+ Elf_Xword nNum = pRel->GetEntriesNum();
+ if ( 0 < nNum ) {
+ std::printf( "\nSection name: %s\n", pSec->GetName().c_str() );
+ std::printf( " Num Type Offset Addend Calc SymValue SymName\n" );
+ for ( Elf_Xword i = 0; i < nNum; ++i ) {
+ pRel->GetEntry( i, offset, symbolValue, symbolName,
+ type, addend, calcValue );
+ std::printf( "[%4llx] %02x %08llx %08llx %08llx %08llx %s\n",
+ i, type, offset,
+ addend, calcValue,
+ symbolValue, symbolName.c_str() );
+ }
+ }
+
+ pSec->Release();
+ pRel->Release();
+ }
+
+ // Free resources
+ pReader->Release();
+
+ return 0;
+}
diff --git a/utils/bcmregtool/elfio/examples/anonymizer/Makefile.am b/utils/bcmregtool/elfio/examples/anonymizer/Makefile.am
new file mode 100644
index 0000000..214f9c4
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/anonymizer/Makefile.am
@@ -0,0 +1,3 @@
+AM_CPPFLAGS = -I$(top_srcdir)
+bin_PROGRAMS = anonymizer
+anonymizer_SOURCES = anonymizer.cpp
diff --git a/utils/bcmregtool/elfio/examples/anonymizer/Makefile.in b/utils/bcmregtool/elfio/examples/anonymizer/Makefile.in
new file mode 100644
index 0000000..b8ec6ec
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/anonymizer/Makefile.in
@@ -0,0 +1,559 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = anonymizer$(EXEEXT)
+subdir = examples/anonymizer
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_anonymizer_OBJECTS = anonymizer.$(OBJEXT)
+anonymizer_OBJECTS = $(am_anonymizer_OBJECTS)
+anonymizer_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+SOURCES = $(anonymizer_SOURCES)
+DIST_SOURCES = $(anonymizer_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)
+anonymizer_SOURCES = anonymizer.cpp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/anonymizer/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign examples/anonymizer/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+anonymizer$(EXEEXT): $(anonymizer_OBJECTS) $(anonymizer_DEPENDENCIES) $(EXTRA_anonymizer_DEPENDENCIES)
+ @rm -f anonymizer$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(anonymizer_OBJECTS) $(anonymizer_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anonymizer.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-binPROGRAMS install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/bcmregtool/elfio/examples/anonymizer/anonymizer.cpp b/utils/bcmregtool/elfio/examples/anonymizer/anonymizer.cpp
new file mode 100644
index 0000000..a76bfd2
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/anonymizer/anonymizer.cpp
@@ -0,0 +1,145 @@
+/*
+anonymizer.cpp - Overwrites all data from an ELF file with random data.
+
+Copyright (C) 2017 by Martin Bickel
+
+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.
+*/
+
+#ifdef _MSC_VER
+ #define _SCL_SECURE_NO_WARNINGS
+ #define ELFIO_NO_INTTYPES
+#endif
+
+#include <string>
+#include <iostream>
+#include <elfio/elfio_dump.hpp>
+#include <fstream>
+#include <random>
+
+using namespace ELFIO;
+
+
+bool preserve_name( const std::string& name ) {
+ static std::vector<std::string> names_to_preserve = { ".shstrtab",
+ ".rodata",
+ ".bss",
+ ".data",
+ ".text",
+ ".text_vle" };
+
+ for ( auto s = names_to_preserve.begin(); s != names_to_preserve.end(); ++s )
+ if ( *s == name)
+ return true;
+ return false;
+}
+
+std::default_random_engine generator(0xe1f);
+std::uniform_int_distribution<int> distribution(0,255);
+
+void randomize_data( const std::string& filename, long offset, long size ) {
+ std::ofstream file (filename, std::ios::in|std::ios::out|std::ios::binary);
+ if ( !file )
+ throw "error opening file" + filename;
+ file.seekp(offset);
+ for ( long i = 0; i < size; ++i ) {
+ const char value = distribution(generator);
+ file.write(&value, 1 );
+ }
+}
+
+void overwrite_data( const std::string& filename, long offset, const std::string& data ) {
+ std::ofstream file (filename, std::ios::in|std::ios::out|std::ios::binary);
+ if ( !file )
+ throw "error opening file" + filename;
+ file.seekp(offset);
+ file.write(data.c_str(), data.length()+1 );
+}
+
+
+
+std::string generate( int length ) {
+
+ static int counters[6] = { 0, 0, 10, 100, 1000, 10000 };
+
+ int counter = counters[length > 5 ? 5 : length ]++;
+
+ auto s = std::to_string(counter);
+ if ( s.length() > length ) {
+ throw "String length error at " + std::to_string( counter ) + "; expecting " + std::to_string( length ) + " bytes ";
+ }
+
+ while (s.length() < length)
+ s = "s" + s;
+ return s;
+}
+
+
+void processStringTable( const section* s, const std::string& filename ) {
+ std::cout << "Info: processing string table section" << std::endl;
+ int counter = 0;
+ int index = 1;
+ while ( index < s->get_size() ) {
+ auto len = strlen( s->get_data()+index );
+ if ( len && !preserve_name( s->get_data()+index ))
+ overwrite_data( filename, s->get_offset() + index, generate( len ));
+ index += len + 1;
+ counter++;
+ }
+ std::cout << counter << " strings found " << std::endl;
+}
+
+int main( int argc, char** argv )
+{
+ try {
+ if ( argc != 2 ) {
+ std::cout << "Usage: anonymizer <file_name>\n";
+ return 1;
+ }
+
+ std::string filename = argv[1];
+
+ elfio reader;
+
+ if ( !reader.load( filename ) ) {
+ std::cerr << "File " << filename << " is not found or it is not an ELF file\n";
+ return 1;
+ }
+
+ for ( auto sect = reader.sections.begin(); sect != reader.sections.end(); ++sect ) {
+ section* s = *sect;
+ if ( s->get_type() == SHT_STRTAB ) {
+ processStringTable(s, filename);
+ } else if ( s->get_type() == SHT_SYMTAB ) {
+ std::cout << "Skipping symbol table." << std::endl;
+ } else if ( s->get_type() == SHT_PROGBITS ) {
+ if ( s->get_size() > 0 ) {
+ randomize_data(filename, s->get_offset(), s->get_size());
+ std::cout << "Sanitized " << s->get_size() << " Bytes in section" << std::endl;
+ }
+ }
+ }
+ return 0;
+ } catch ( const std::string& s ) {
+ std::cerr << s << std::endl;
+ } catch ( const char* s ) {
+ std::cerr << s << std::endl;
+ }
+ return 1;
+}
diff --git a/utils/bcmregtool/elfio/examples/elfdump/ELFDump.vcxproj b/utils/bcmregtool/elfio/examples/elfdump/ELFDump.vcxproj
new file mode 100644
index 0000000..54ca818
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/elfdump/ELFDump.vcxproj
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{CBAA735F-E237-4976-909F-2349920ED871}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>ELFDump</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>
+ </AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <AdditionalDependencies>
+ </AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="ELFDump.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/utils/bcmregtool/elfio/examples/elfdump/Makefile.am b/utils/bcmregtool/elfio/examples/elfdump/Makefile.am
new file mode 100644
index 0000000..57a3470
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/elfdump/Makefile.am
@@ -0,0 +1,4 @@
+AM_CPPFLAGS = -I$(top_srcdir)
+bin_PROGRAMS = elfdump
+elfdump_SOURCES = elfdump.cpp
+EXTRA_DIST = ELFDump.vcxproj
diff --git a/utils/bcmregtool/elfio/examples/elfdump/Makefile.in b/utils/bcmregtool/elfio/examples/elfdump/Makefile.in
new file mode 100644
index 0000000..9219369
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/elfdump/Makefile.in
@@ -0,0 +1,560 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = elfdump$(EXEEXT)
+subdir = examples/elfdump
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_elfdump_OBJECTS = elfdump.$(OBJEXT)
+elfdump_OBJECTS = $(am_elfdump_OBJECTS)
+elfdump_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+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
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)
+elfdump_SOURCES = elfdump.cpp
+EXTRA_DIST = ELFDump.vcxproj
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/elfdump/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign examples/elfdump/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+elfdump$(EXEEXT): $(elfdump_OBJECTS) $(elfdump_DEPENDENCIES) $(EXTRA_elfdump_DEPENDENCIES)
+ @rm -f elfdump$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(elfdump_OBJECTS) $(elfdump_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfdump.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-binPROGRAMS install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/bcmregtool/elfio/examples/elfdump/elfdump.cpp b/utils/bcmregtool/elfio/examples/elfdump/elfdump.cpp
new file mode 100644
index 0000000..e3dd40b
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/elfdump/elfdump.cpp
@@ -0,0 +1,59 @@
+/*
+elfdump.cpp - Dump ELF file using ELFIO library.
+
+Copyright (C) 2001-2015 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.
+*/
+
+#ifdef _MSC_VER
+ #define _SCL_SECURE_NO_WARNINGS
+ #define ELFIO_NO_INTTYPES
+#endif
+
+#include <iostream>
+#include <elfio/elfio_dump.hpp>
+
+using namespace ELFIO;
+
+int main( int argc, char** argv )
+{
+ if ( argc != 2 ) {
+ printf( "Usage: ELFDump <file_name>\n" );
+ return 1;
+ }
+
+ elfio reader;
+
+ if ( !reader.load( argv[1] ) ) {
+ printf( "File %s is not found or it is not an ELF file\n", argv[1] );
+ return 1;
+ }
+
+ dump::header ( std::cout, reader );
+ dump::section_headers( std::cout, reader );
+ dump::segment_headers( std::cout, reader );
+ dump::symbol_tables ( std::cout, reader );
+ dump::notes ( std::cout, reader );
+ dump::dynamic_tags ( std::cout, reader );
+ dump::section_datas ( std::cout, reader );
+ dump::segment_datas ( std::cout, reader );
+
+ return 0;
+}
diff --git a/utils/bcmregtool/elfio/examples/tutorial/Makefile.am b/utils/bcmregtool/elfio/examples/tutorial/Makefile.am
new file mode 100644
index 0000000..14bcceb
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/tutorial/Makefile.am
@@ -0,0 +1,3 @@
+AM_CPPFLAGS = -I$(top_srcdir)
+bin_PROGRAMS = tutorial
+tutorial_SOURCES = tutorial.cpp
diff --git a/utils/bcmregtool/elfio/examples/tutorial/Makefile.in b/utils/bcmregtool/elfio/examples/tutorial/Makefile.in
new file mode 100644
index 0000000..f156bbc
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/tutorial/Makefile.in
@@ -0,0 +1,559 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = tutorial$(EXEEXT)
+subdir = examples/tutorial
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_tutorial_OBJECTS = tutorial.$(OBJEXT)
+tutorial_OBJECTS = $(am_tutorial_OBJECTS)
+tutorial_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+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
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)
+tutorial_SOURCES = tutorial.cpp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/tutorial/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign examples/tutorial/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+tutorial$(EXEEXT): $(tutorial_OBJECTS) $(tutorial_DEPENDENCIES) $(EXTRA_tutorial_DEPENDENCIES)
+ @rm -f tutorial$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(tutorial_OBJECTS) $(tutorial_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-binPROGRAMS install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/bcmregtool/elfio/examples/tutorial/tutorial.cpp b/utils/bcmregtool/elfio/examples/tutorial/tutorial.cpp
new file mode 100644
index 0000000..1e62cde
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/tutorial/tutorial.cpp
@@ -0,0 +1,90 @@
+#include <iostream>
+#include <elfio/elfio.hpp>
+
+using namespace ELFIO;
+
+int main( int argc, char** argv )
+{
+ if ( argc != 2 ) {
+ std::cout << "Usage: tutorial <elf_file>" << std::endl;
+ return 1;
+ }
+
+ // Create an elfio reader
+ elfio reader;
+
+ // Load ELF data
+ if ( !reader.load( argv[1] ) ) {
+ std::cout << "Can't find or process ELF file " << argv[1] << std::endl;
+ return 2;
+ }
+
+ // Print ELF file properties
+ std::cout << "ELF file class : ";
+ if ( reader.get_class() == ELFCLASS32 )
+ std::cout << "ELF32" << std::endl;
+ else
+ std::cout << "ELF64" << std::endl;
+
+ std::cout << "ELF file encoding : ";
+ if ( reader.get_encoding() == ELFDATA2LSB )
+ std::cout << "Little endian" << std::endl;
+ else
+ std::cout << "Big endian" << std::endl;
+
+ // Print ELF file sections info
+ Elf_Half sec_num = reader.sections.size();
+ std::cout << "Number of sections: " << sec_num << std::endl;
+ for ( int i = 0; i < sec_num; ++i ) {
+ section* psec = reader.sections[i];
+ std::cout << " [" << i << "] "
+ << psec->get_name()
+ << "\t"
+ << psec->get_size()
+ << std::endl;
+ // Access to section's data
+ // const char* p = reader.sections[i]->get_data()
+ }
+
+ // Print ELF file segments info
+ Elf_Half seg_num = reader.segments.size();
+ std::cout << "Number of segments: " << seg_num << std::endl;
+ for ( int i = 0; i < seg_num; ++i ) {
+ const segment* pseg = reader.segments[i];
+ std::cout << " [" << i << "] 0x" << std::hex
+ << pseg->get_flags()
+ << "\t0x"
+ << pseg->get_virtual_address()
+ << "\t0x"
+ << pseg->get_file_size()
+ << "\t0x"
+ << pseg->get_memory_size()
+ << std::endl;
+ // Access to segments's data
+ // const char* p = reader.segments[i]->get_data()
+ }
+
+ for ( int i = 0; i < sec_num; ++i ) {
+ section* psec = reader.sections[i];
+ // Check section type
+ if ( psec->get_type() == SHT_SYMTAB ) {
+ const symbol_section_accessor symbols( reader, psec );
+ for ( unsigned int j = 0; j < symbols.get_symbols_num(); ++j ) {
+ std::string name;
+ Elf64_Addr value;
+ Elf_Xword size;
+ unsigned char bind;
+ unsigned char type;
+ Elf_Half section_index;
+ unsigned char other;
+
+ // Read symbol properties
+ symbols.get_symbol( j, name, value, size, bind,
+ type, section_index, other );
+ std::cout << j << " " << name << " " << value << std::endl;
+ }
+ }
+ }
+
+ return 0;
+}
diff --git a/utils/bcmregtool/elfio/examples/write_obj/Makefile.am b/utils/bcmregtool/elfio/examples/write_obj/Makefile.am
new file mode 100644
index 0000000..eebfeee
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/write_obj/Makefile.am
@@ -0,0 +1,3 @@
+AM_CPPFLAGS = -I$(top_srcdir)
+bin_PROGRAMS = write_obj
+write_obj_SOURCES = write_obj.cpp
diff --git a/utils/bcmregtool/elfio/examples/write_obj/Makefile.in b/utils/bcmregtool/elfio/examples/write_obj/Makefile.in
new file mode 100644
index 0000000..6831f4c
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/write_obj/Makefile.in
@@ -0,0 +1,559 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = write_obj$(EXEEXT)
+subdir = examples/write_obj
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_write_obj_OBJECTS = write_obj.$(OBJEXT)
+write_obj_OBJECTS = $(am_write_obj_OBJECTS)
+write_obj_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+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
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)
+write_obj_SOURCES = write_obj.cpp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/write_obj/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign examples/write_obj/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+write_obj$(EXEEXT): $(write_obj_OBJECTS) $(write_obj_DEPENDENCIES) $(EXTRA_write_obj_DEPENDENCIES)
+ @rm -f write_obj$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(write_obj_OBJECTS) $(write_obj_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write_obj.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-binPROGRAMS install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/bcmregtool/elfio/examples/write_obj/write_obj.cpp b/utils/bcmregtool/elfio/examples/write_obj/write_obj.cpp
new file mode 100644
index 0000000..01d1bab
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/write_obj/write_obj.cpp
@@ -0,0 +1,112 @@
+/*
+ * This example shows how to create ELF object file for Linux on x86
+ *
+ * Instructions:
+ * 1. Compile and link this file with ELFIO library
+ * g++ write_obj.cpp -o writer_obj
+ * 2. Execute result file write_obj
+ * ./write_obj
+ * 3. Link output file hello.o:
+ * gcc -m32 -s -nostartfiles -nostdlib hello.o -o hello
+ * 4. Run the result file:
+ * ./hello
+ */
+
+#include <elfio/elfio.hpp>
+
+using namespace ELFIO;
+
+int main( void )
+{
+ elfio writer;
+
+ // You can't proceed before this function call!
+ writer.create( ELFCLASS32, ELFDATA2LSB );
+
+ writer.set_os_abi( ELFOSABI_LINUX );
+ writer.set_type( ET_REL );
+ writer.set_machine( EM_386 );
+
+ // This is our code
+ char text[] = { '\xB8', '\x04', '\x00', '\x00', '\x00', // mov eax, 4
+ '\xBB', '\x01', '\x00', '\x00', '\x00', // mov ebx, 1
+ '\xB9', '\x00', '\x00', '\x00', '\x00', // mov ecx, msg
+ '\xBA', '\x0E', '\x00', '\x00', '\x00', // mov edx, 14
+ '\xCD', '\x80', // int 0x80
+ '\xB8', '\x01', '\x00', '\x00', '\x00', // mov eax, 1
+ '\xCD', '\x80', // int 0x80
+ '\x48', '\x65', '\x6C', '\x6C', '\x6F', // msg: db 'Hello, World!', 10
+ '\x2C', '\x20', '\x57', '\x6F', '\x72',
+ '\x6C', '\x64', '\x21', '\x0A'
+ };
+ Elf64_Addr place_to_adjust = 11;
+
+ // Create code section
+ section* text_sec = writer.sections.add( ".text" );
+ text_sec->set_type ( SHT_PROGBITS );
+ text_sec->set_flags ( SHF_ALLOC | SHF_EXECINSTR );
+ text_sec->set_addr_align( 0x10 );
+ text_sec->set_data ( text, sizeof( text ) );
+
+ // Create string table section
+ section* str_sec = writer.sections.add( ".strtab" );
+ str_sec->set_type ( SHT_STRTAB );
+
+ // Create string table writer
+ string_section_accessor stra( str_sec );
+ // Add label name
+ Elf32_Word str_index = stra.add_string( "msg" );
+
+ // Create symbol table section
+ section* sym_sec = writer.sections.add( ".symtab" );
+ sym_sec->set_type ( SHT_SYMTAB );
+ sym_sec->set_info ( 2 );
+ sym_sec->set_addr_align( 0x4 );
+ sym_sec->set_entry_size( writer.get_default_entry_size( SHT_SYMTAB ) );
+ sym_sec->set_link ( str_sec->get_index() );
+
+ // Create symbol table writer
+ symbol_section_accessor syma( writer, sym_sec );
+ // Add symbol entry (msg has offset == 29)
+ Elf_Word sym_to_adjust = syma.add_symbol( str_index, 29, 0, STB_GLOBAL,
+ STT_OBJECT, 0,
+ text_sec->get_index() );
+ // Another way to add symbol
+ syma.add_symbol( stra, "_start", 0x00000000, 0, STB_WEAK, STT_FUNC, 0,
+ text_sec->get_index() );
+
+ // Create relocation table section
+ section* rel_sec = writer.sections.add( ".rel.text" );
+ rel_sec->set_type ( SHT_REL );
+ rel_sec->set_info ( text_sec->get_index() );
+ rel_sec->set_addr_align( 0x4 );
+ rel_sec->set_entry_size( writer.get_default_entry_size( SHT_REL ) );
+ rel_sec->set_link ( sym_sec->get_index() );
+
+ // Create relocation table writer
+ relocation_section_accessor rela( writer, rel_sec );
+ // Add relocation entry (adjust address at offset 11)
+ rela.add_entry( place_to_adjust, sym_to_adjust,
+ (unsigned char)R_386_RELATIVE );
+
+ // Another method to add the same relocation entry at one step is:
+ // rela.add_entry( stra, "msg",
+ // syma, 29, 0,
+ // ELF_ST_INFO( STB_GLOBAL, STT_OBJECT ), 0,
+ // text_sec->get_index(),
+ // place_to_adjust, (unsigned char)R_386_RELATIVE );
+
+ // Create note section
+ section* note_sec = writer.sections.add( ".note" );
+ note_sec->set_type( SHT_NOTE );
+
+ note_section_accessor note_writer( writer, note_sec );
+ note_writer.add_note( 0x01, "Created by ELFIO", 0, 0 );
+ char descr[6] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36};
+ note_writer.add_note( 0x01, "Never easier!", descr, sizeof( descr ) );
+
+ // Create ELF object file
+ writer.save( "hello.o" );
+
+ return 0;
+}
diff --git a/utils/bcmregtool/elfio/examples/writer/Makefile.am b/utils/bcmregtool/elfio/examples/writer/Makefile.am
new file mode 100644
index 0000000..19e519f
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/writer/Makefile.am
@@ -0,0 +1,3 @@
+AM_CPPFLAGS = -I$(top_srcdir)
+bin_PROGRAMS = writer
+writer_SOURCES = writer.cpp
diff --git a/utils/bcmregtool/elfio/examples/writer/Makefile.in b/utils/bcmregtool/elfio/examples/writer/Makefile.in
new file mode 100644
index 0000000..99dbe5d
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/writer/Makefile.in
@@ -0,0 +1,559 @@
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = writer$(EXEEXT)
+subdir = examples/writer
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_writer_OBJECTS = writer.$(OBJEXT)
+writer_OBJECTS = $(am_writer_OBJECTS)
+writer_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+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
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)
+writer_SOURCES = writer.cpp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/writer/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign examples/writer/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+writer$(EXEEXT): $(writer_OBJECTS) $(writer_DEPENDENCIES) $(EXTRA_writer_DEPENDENCIES)
+ @rm -f writer$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(writer_OBJECTS) $(writer_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writer.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \
+ distclean distclean-compile distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-binPROGRAMS install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/utils/bcmregtool/elfio/examples/writer/writer.cpp b/utils/bcmregtool/elfio/examples/writer/writer.cpp
new file mode 100644
index 0000000..e06adc4
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/writer/writer.cpp
@@ -0,0 +1,82 @@
+#include <elfio/elfio.hpp>
+
+using namespace ELFIO;
+
+int main( void )
+{
+ elfio writer;
+
+ // You can't proceed without this function call!
+ writer.create( ELFCLASS32, ELFDATA2LSB );
+
+ writer.set_os_abi( ELFOSABI_LINUX );
+ writer.set_type( ET_EXEC );
+ writer.set_machine( EM_386 );
+
+ // Create code section
+ section* text_sec = writer.sections.add( ".text" );
+ text_sec->set_type( SHT_PROGBITS );
+ text_sec->set_flags( SHF_ALLOC | SHF_EXECINSTR );
+ text_sec->set_addr_align( 0x10 );
+
+ // Add data into it
+ char text[] = { '\xB8', '\x04', '\x00', '\x00', '\x00', // mov eax, 4
+ '\xBB', '\x01', '\x00', '\x00', '\x00', // mov ebx, 1
+ '\xB9', '\x20', '\x80', '\x04', '\x08', // mov ecx, msg
+ '\xBA', '\x0E', '\x00', '\x00', '\x00', // mov edx, 14
+ '\xCD', '\x80', // int 0x80
+ '\xB8', '\x01', '\x00', '\x00', '\x00', // mov eax, 1
+ '\xCD', '\x80' // int 0x80
+ };
+ text_sec->set_data( text, sizeof( text ) );
+
+ // Create a loadable segment
+ segment* text_seg = writer.segments.add();
+ text_seg->set_type( PT_LOAD );
+ text_seg->set_virtual_address( 0x08048000 );
+ text_seg->set_physical_address( 0x08048000 );
+ text_seg->set_flags( PF_X | PF_R );
+ text_seg->set_align( 0x1000 );
+
+ // Add code section into program segment
+ text_seg->add_section_index( text_sec->get_index(), text_sec->get_addr_align() );
+
+ // Create data section*
+ section* data_sec = writer.sections.add( ".data" );
+ data_sec->set_type( SHT_PROGBITS );
+ data_sec->set_flags( SHF_ALLOC | SHF_WRITE );
+ data_sec->set_addr_align( 0x4 );
+
+ char data[] = { '\x48', '\x65', '\x6C', '\x6C', '\x6F', // msg: db 'Hello, World!', 10
+ '\x2C', '\x20', '\x57', '\x6F', '\x72',
+ '\x6C', '\x64', '\x21', '\x0A'
+ };
+ data_sec->set_data( data, sizeof( data ) );
+
+ // Create a read/write segment
+ segment* data_seg = writer.segments.add();
+ data_seg->set_type( PT_LOAD );
+ data_seg->set_virtual_address( 0x08048020 );
+ data_seg->set_physical_address( 0x08048020 );
+ data_seg->set_flags( PF_W | PF_R );
+ data_seg->set_align( 0x10 );
+
+ // Add code section into program segment
+ data_seg->add_section_index( data_sec->get_index(), data_sec->get_addr_align() );
+
+ section* note_sec = writer.sections.add( ".note" );
+ note_sec->set_type( SHT_NOTE );
+ note_sec->set_addr_align( 1 );
+ note_section_accessor note_writer( writer, note_sec );
+ note_writer.add_note( 0x01, "Created by ELFIO", 0, 0 );
+ char descr[6] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36};
+ note_writer.add_note( 0x01, "Never easier!", descr, sizeof( descr ) );
+
+ // Setup entry point
+ writer.set_entry( 0x08048000 );
+
+ // Create ELF file
+ writer.save( "hello_i386_32" );
+
+ return 0;
+}
diff --git a/utils/bcmregtool/elfio/examples/writer/writer.vcxproj b/utils/bcmregtool/elfio/examples/writer/writer.vcxproj
new file mode 100644
index 0000000..f368f03
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/writer/writer.vcxproj
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{4E5A96DB-F6E9-4EEE-90BE-67B722DA8C84}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>writer</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>$(SolutionDir)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>$(SolutionDir)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="writer.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/utils/bcmregtool/elfio/examples/writer/writer.vcxproj.filters b/utils/bcmregtool/elfio/examples/writer/writer.vcxproj.filters
new file mode 100644
index 0000000..c3d5827
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/writer/writer.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="writer.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/utils/bcmregtool/elfio/examples/writer/writer.vcxproj.user b/utils/bcmregtool/elfio/examples/writer/writer.vcxproj.user
new file mode 100644
index 0000000..28f7c38
--- /dev/null
+++ b/utils/bcmregtool/elfio/examples/writer/writer.vcxproj.user
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
+ <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/utils/bcmregtool/elfio/install-sh b/utils/bcmregtool/elfio/install-sh
new file mode 100755
index 0000000..a9244eb
--- /dev/null
+++ b/utils/bcmregtool/elfio/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-01-19.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ # Protect names problematic for `test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for `test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for `test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/utils/bcmregtool/elfio/missing b/utils/bcmregtool/elfio/missing
new file mode 100755
index 0000000..f62bbae
--- /dev/null
+++ b/utils/bcmregtool/elfio/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2013-10-28.13; # UTC
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'autom4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
OpenPOWER on IntegriCloud