diff options
author | Evan Lojewski <github@meklort.com> | 2019-02-26 20:41:38 -0700 |
---|---|---|
committer | Evan Lojewski <github@meklort.com> | 2019-02-26 20:41:38 -0700 |
commit | 876e9cbcc1cdb054a5cc068a16b601db1111664a (patch) | |
tree | b89ae0e90101dd0841b64d79017d4594beb5d59d /utils/bcmregtool/elfio | |
parent | a4d1e1110915f1822b6d2c2384ac8f7f276c0d24 (diff) | |
download | bcm5719-ortega-876e9cbcc1cdb054a5cc068a16b601db1111664a.tar.gz bcm5719-ortega-876e9cbcc1cdb054a5cc068a16b601db1111664a.zip |
Begin adding in elfio for enhanced debugging support.
Diffstat (limited to 'utils/bcmregtool/elfio')
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='[0;31m'; \ + grn='[0;32m'; \ + lgn='[1;32m'; \ + blu='[1;34m'; \ + mgn='[0;35m'; \ + brg='[1m'; \ + std='[m'; \ + 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 Binary files differnew file mode 100644 index 0000000..d49d8ba --- /dev/null +++ b/utils/bcmregtool/elfio/doc/elfio.docx diff --git a/utils/bcmregtool/elfio/doc/images/annot-close.png b/utils/bcmregtool/elfio/doc/images/annot-close.png Binary files differnew file mode 100644 index 0000000..b9e1a0d --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/annot-close.png diff --git a/utils/bcmregtool/elfio/doc/images/annot-open.png b/utils/bcmregtool/elfio/doc/images/annot-open.png Binary files differnew file mode 100644 index 0000000..71040ec --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/annot-open.png diff --git a/utils/bcmregtool/elfio/doc/images/blank.png b/utils/bcmregtool/elfio/doc/images/blank.png Binary files differnew file mode 100644 index 0000000..764bf4f --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/blank.png diff --git a/utils/bcmregtool/elfio/doc/images/callouts/1.gif b/utils/bcmregtool/elfio/doc/images/callouts/1.gif Binary files differnew file mode 100644 index 0000000..9e7a87f --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/1.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/1.png b/utils/bcmregtool/elfio/doc/images/callouts/1.png Binary files differnew file mode 100644 index 0000000..7d47343 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/1.png 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 Binary files differnew file mode 100644 index 0000000..e80f7f8 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/10.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/10.png b/utils/bcmregtool/elfio/doc/images/callouts/10.png Binary files differnew file mode 100644 index 0000000..997bbc8 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/10.png 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 Binary files differnew file mode 100644 index 0000000..67f91a2 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/11.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/11.png b/utils/bcmregtool/elfio/doc/images/callouts/11.png Binary files differnew file mode 100644 index 0000000..ce47dac --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/11.png 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 Binary files differnew file mode 100644 index 0000000..54c4b42 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/12.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/12.png b/utils/bcmregtool/elfio/doc/images/callouts/12.png Binary files differnew file mode 100644 index 0000000..31daf4e --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/12.png 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 Binary files differnew file mode 100644 index 0000000..dd5d7d9 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/13.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/13.png b/utils/bcmregtool/elfio/doc/images/callouts/13.png Binary files differnew file mode 100644 index 0000000..14021a8 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/13.png 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 Binary files differnew file mode 100644 index 0000000..3d7a952 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/14.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/14.png b/utils/bcmregtool/elfio/doc/images/callouts/14.png Binary files differnew file mode 100644 index 0000000..64014b7 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/14.png 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 Binary files differnew file mode 100644 index 0000000..1c9183d --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/15.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/15.png b/utils/bcmregtool/elfio/doc/images/callouts/15.png Binary files differnew file mode 100644 index 0000000..0d65765 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/15.png 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 Binary files differnew file mode 100644 index 0000000..94d42a3 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/2.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/2.png b/utils/bcmregtool/elfio/doc/images/callouts/2.png Binary files differnew file mode 100644 index 0000000..5d09341 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/2.png 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 Binary files differnew file mode 100644 index 0000000..dd3541a --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/3.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/3.png b/utils/bcmregtool/elfio/doc/images/callouts/3.png Binary files differnew file mode 100644 index 0000000..ef7b700 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/3.png 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 Binary files differnew file mode 100644 index 0000000..4bcbf7e --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/4.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/4.png b/utils/bcmregtool/elfio/doc/images/callouts/4.png Binary files differnew file mode 100644 index 0000000..adb8364 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/4.png 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 Binary files differnew file mode 100644 index 0000000..1c62b4f --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/5.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/5.png b/utils/bcmregtool/elfio/doc/images/callouts/5.png Binary files differnew file mode 100644 index 0000000..4d7eb46 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/5.png 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 Binary files differnew file mode 100644 index 0000000..23bc555 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/6.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/6.png b/utils/bcmregtool/elfio/doc/images/callouts/6.png Binary files differnew file mode 100644 index 0000000..0ba694a --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/6.png 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 Binary files differnew file mode 100644 index 0000000..e55ce89 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/7.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/7.png b/utils/bcmregtool/elfio/doc/images/callouts/7.png Binary files differnew file mode 100644 index 0000000..472e96f --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/7.png 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 Binary files differnew file mode 100644 index 0000000..49375e0 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/8.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/8.png b/utils/bcmregtool/elfio/doc/images/callouts/8.png Binary files differnew file mode 100644 index 0000000..5e60973 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/8.png 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 Binary files differnew file mode 100644 index 0000000..da12a4f --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/9.gif diff --git a/utils/bcmregtool/elfio/doc/images/callouts/9.png b/utils/bcmregtool/elfio/doc/images/callouts/9.png Binary files differnew file mode 100644 index 0000000..a0676d2 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/callouts/9.png 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 Binary files differnew file mode 100644 index 0000000..d9f5e5b --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/caution.gif diff --git a/utils/bcmregtool/elfio/doc/images/caution.png b/utils/bcmregtool/elfio/doc/images/caution.png Binary files differnew file mode 100644 index 0000000..5b7809c --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/caution.png 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 Binary files differnew file mode 100644 index 0000000..4a28294 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/caution.tif 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 Binary files differnew file mode 100644 index 0000000..59673fe --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/draft.png diff --git a/utils/bcmregtool/elfio/doc/images/home.gif b/utils/bcmregtool/elfio/doc/images/home.gif Binary files differnew file mode 100644 index 0000000..6784f5b --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/home.gif diff --git a/utils/bcmregtool/elfio/doc/images/home.png b/utils/bcmregtool/elfio/doc/images/home.png Binary files differnew file mode 100644 index 0000000..cbb711d --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/home.png 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 Binary files differnew file mode 100644 index 0000000..6795d9a --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/important.gif diff --git a/utils/bcmregtool/elfio/doc/images/important.png b/utils/bcmregtool/elfio/doc/images/important.png Binary files differnew file mode 100644 index 0000000..12c90f6 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/important.png 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 Binary files differnew file mode 100644 index 0000000..184de63 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/important.tif diff --git a/utils/bcmregtool/elfio/doc/images/next.gif b/utils/bcmregtool/elfio/doc/images/next.gif Binary files differnew file mode 100644 index 0000000..aa1516e --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/next.gif diff --git a/utils/bcmregtool/elfio/doc/images/next.png b/utils/bcmregtool/elfio/doc/images/next.png Binary files differnew file mode 100644 index 0000000..45835bf --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/next.png 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 Binary files differnew file mode 100644 index 0000000..f329d35 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/note.gif diff --git a/utils/bcmregtool/elfio/doc/images/note.png b/utils/bcmregtool/elfio/doc/images/note.png Binary files differnew file mode 100644 index 0000000..d0c3c64 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/note.png 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 Binary files differnew file mode 100644 index 0000000..08644d6 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/note.tif diff --git a/utils/bcmregtool/elfio/doc/images/prev.gif b/utils/bcmregtool/elfio/doc/images/prev.gif Binary files differnew file mode 100644 index 0000000..64ca8f3 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/prev.gif diff --git a/utils/bcmregtool/elfio/doc/images/prev.png b/utils/bcmregtool/elfio/doc/images/prev.png Binary files differnew file mode 100644 index 0000000..cf24654 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/prev.png 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 Binary files differnew file mode 100644 index 0000000..823f2b4 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/tip.gif diff --git a/utils/bcmregtool/elfio/doc/images/tip.png b/utils/bcmregtool/elfio/doc/images/tip.png Binary files differnew file mode 100644 index 0000000..5c4aab3 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/tip.png 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 Binary files differnew file mode 100644 index 0000000..4a3d8c7 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/tip.tif diff --git a/utils/bcmregtool/elfio/doc/images/toc-blank.png b/utils/bcmregtool/elfio/doc/images/toc-blank.png Binary files differnew file mode 100644 index 0000000..6ffad17 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/toc-blank.png diff --git a/utils/bcmregtool/elfio/doc/images/toc-minus.png b/utils/bcmregtool/elfio/doc/images/toc-minus.png Binary files differnew file mode 100644 index 0000000..abbb020 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/toc-minus.png diff --git a/utils/bcmregtool/elfio/doc/images/toc-plus.png b/utils/bcmregtool/elfio/doc/images/toc-plus.png Binary files differnew file mode 100644 index 0000000..941312c --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/toc-plus.png diff --git a/utils/bcmregtool/elfio/doc/images/up.gif b/utils/bcmregtool/elfio/doc/images/up.gif Binary files differnew file mode 100644 index 0000000..aabc2d0 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/up.gif diff --git a/utils/bcmregtool/elfio/doc/images/up.png b/utils/bcmregtool/elfio/doc/images/up.png Binary files differnew file mode 100644 index 0000000..07634de --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/up.png 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 Binary files differnew file mode 100644 index 0000000..3adf191 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/warning.gif diff --git a/utils/bcmregtool/elfio/doc/images/warning.png b/utils/bcmregtool/elfio/doc/images/warning.png Binary files differnew file mode 100644 index 0000000..1c33db8 --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/warning.png 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 Binary files differnew file mode 100644 index 0000000..7b6611e --- /dev/null +++ b/utils/bcmregtool/elfio/doc/images/warning.tif 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&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 Binary files differnew file mode 100644 index 0000000..3b97478 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/64bitLOAD.elf diff --git a/utils/bcmregtool/elfio/elf_examples/ARMSCII-8.so b/utils/bcmregtool/elfio/elf_examples/ARMSCII-8.so Binary files differnew file mode 100644 index 0000000..021adb9 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/ARMSCII-8.so diff --git a/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_debug.elf b/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_debug.elf Binary files differnew file mode 100755 index 0000000..12d00d3 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_debug.elf diff --git a/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_release.elf b/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_release.elf Binary files differnew file mode 100755 index 0000000..39ce159 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/arm_v7m_test_release.elf diff --git a/utils/bcmregtool/elfio/elf_examples/asm b/utils/bcmregtool/elfio/elf_examples/asm Binary files differnew file mode 100644 index 0000000..1b721d5 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/asm 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 Binary files differnew file mode 100644 index 0000000..bd40858 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/asm64 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 Binary files differnew file mode 100644 index 0000000..207693a --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/crash-060833f08dc14d1712428742b3cad7af17b36bb7 diff --git a/utils/bcmregtool/elfio/elf_examples/crash-7d695153fd8052529d480c2352d4ada33a44bada b/utils/bcmregtool/elfio/elf_examples/crash-7d695153fd8052529d480c2352d4ada33a44bada Binary files differnew file mode 100644 index 0000000..0120a79 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/crash-7d695153fd8052529d480c2352d4ada33a44bada diff --git a/utils/bcmregtool/elfio/elf_examples/crash-b82f05b0b25c8fdc98480e6d76b6d5f9164ae2bc b/utils/bcmregtool/elfio/elf_examples/crash-b82f05b0b25c8fdc98480e6d76b6d5f9164ae2bc Binary files differnew file mode 100644 index 0000000..98e5872 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/crash-b82f05b0b25c8fdc98480e6d76b6d5f9164ae2bc diff --git a/utils/bcmregtool/elfio/elf_examples/crash-e1ce7cecf01cf800397a4302854d9d76fa19763c b/utils/bcmregtool/elfio/elf_examples/crash-e1ce7cecf01cf800397a4302854d9d76fa19763c Binary files differnew file mode 100644 index 0000000..ec3a5b4 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/crash-e1ce7cecf01cf800397a4302854d9d76fa19763c diff --git a/utils/bcmregtool/elfio/elf_examples/crash-e3c41070342cf84dea077356ddbb8ebf4326a601 b/utils/bcmregtool/elfio/elf_examples/crash-e3c41070342cf84dea077356ddbb8ebf4326a601 Binary files differnew file mode 100644 index 0000000..241604f --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/crash-e3c41070342cf84dea077356ddbb8ebf4326a601 diff --git a/utils/bcmregtool/elfio/elf_examples/elf_header_i386_32.elf b/utils/bcmregtool/elfio/elf_examples/elf_header_i386_32.elf Binary files differnew file mode 100644 index 0000000..3290d11 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/elf_header_i386_32.elf diff --git a/utils/bcmregtool/elfio/elf_examples/entropy.so b/utils/bcmregtool/elfio/elf_examples/entropy.so Binary files differnew file mode 100644 index 0000000..ff36b9c --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/entropy.so 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 Binary files differnew file mode 100644 index 0000000..69f3e9e --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/hello_32 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 Binary files differnew file mode 100644 index 0000000..c5130be --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/hello_64 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 Binary files differnew file mode 100644 index 0000000..36e49a5 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/hello_arm diff --git a/utils/bcmregtool/elfio/elf_examples/hello_arm_stripped b/utils/bcmregtool/elfio/elf_examples/hello_arm_stripped Binary files differnew file mode 100644 index 0000000..d8abbc0 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/hello_arm_stripped diff --git a/utils/bcmregtool/elfio/elf_examples/libfunc.so b/utils/bcmregtool/elfio/elf_examples/libfunc.so Binary files differnew file mode 100644 index 0000000..8377027 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/libfunc.so diff --git a/utils/bcmregtool/elfio/elf_examples/libfunc32.so b/utils/bcmregtool/elfio/elf_examples/libfunc32.so Binary files differnew file mode 100644 index 0000000..eaa6826 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/libfunc32.so diff --git a/utils/bcmregtool/elfio/elf_examples/ls b/utils/bcmregtool/elfio/elf_examples/ls Binary files differnew file mode 100644 index 0000000..299b099 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/ls 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 Binary files differnew file mode 100644 index 0000000..f4018b7 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/main diff --git a/utils/bcmregtool/elfio/elf_examples/main32 b/utils/bcmregtool/elfio/elf_examples/main32 Binary files differnew file mode 100644 index 0000000..63196e9 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/main32 diff --git a/utils/bcmregtool/elfio/elf_examples/ppc-32bit-specimen3.elf b/utils/bcmregtool/elfio/elf_examples/ppc-32bit-specimen3.elf Binary files differnew file mode 100644 index 0000000..eb37cc7 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/ppc-32bit-specimen3.elf diff --git a/utils/bcmregtool/elfio/elf_examples/read_write_arm_elf32_input b/utils/bcmregtool/elfio/elf_examples/read_write_arm_elf32_input Binary files differnew file mode 100755 index 0000000..e4c312f --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/read_write_arm_elf32_input diff --git a/utils/bcmregtool/elfio/elf_examples/startup.eln b/utils/bcmregtool/elfio/elf_examples/startup.eln Binary files differnew file mode 100644 index 0000000..41bea33 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/startup.eln diff --git a/utils/bcmregtool/elfio/elf_examples/startup_orig.eln b/utils/bcmregtool/elfio/elf_examples/startup_orig.eln Binary files differnew file mode 100644 index 0000000..9090d50 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/startup_orig.eln diff --git a/utils/bcmregtool/elfio/elf_examples/test_ppc b/utils/bcmregtool/elfio/elf_examples/test_ppc Binary files differnew file mode 100644 index 0000000..0946b73 --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/test_ppc 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 Binary files differnew file mode 100644 index 0000000..472539f --- /dev/null +++ b/utils/bcmregtool/elfio/elf_examples/write_exe_i386_32_match 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: |