123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950 |
- // testfile.cc -- Dummy ELF objects for testing purposes.
- // Copyright (C) 2006-2015 Free Software Foundation, Inc.
- // Written by Ian Lance Taylor <iant@google.com>.
- // This file is part of gold.
- // 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 3 of the License, 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, write to the Free Software
- // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
- // MA 02110-1301, USA.
- #include "gold.h"
- #include "target.h"
- #include "target-select.h"
- #include "test.h"
- #include "testfile.h"
- namespace gold_testsuite
- {
- using namespace gold;
- // A Target used for testing purposes.
- template<int size, bool big_endian>
- class Target_test : public Sized_target<size, big_endian>
- {
- public:
- Target_test()
- : Sized_target<size, big_endian>(&test_target_info)
- { }
- void
- gc_process_relocs(Symbol_table*, Layout*,
- Sized_relobj_file<size, big_endian>*,
- unsigned int, unsigned int, const unsigned char*, size_t,
- Output_section*, bool, size_t, const unsigned char*)
- { ERROR("call to Target_test::gc_process_relocs"); }
- void
- scan_relocs(Symbol_table*, Layout*, Sized_relobj_file<size, big_endian>*,
- unsigned int, unsigned int, const unsigned char*, size_t,
- Output_section*, bool, size_t, const unsigned char*)
- { ERROR("call to Target_test::scan_relocs"); }
- void
- relocate_section(const Relocate_info<size, big_endian>*, unsigned int,
- const unsigned char*, size_t, Output_section*, bool,
- unsigned char*, typename elfcpp::Elf_types<size>::Elf_Addr,
- section_size_type, const Reloc_symbol_changes*)
- { ERROR("call to Target_test::relocate_section"); }
- void
- scan_relocatable_relocs(Symbol_table*, Layout*,
- Sized_relobj_file<size, big_endian>*, unsigned int,
- unsigned int, const unsigned char*,
- size_t, Output_section*, bool, size_t,
- const unsigned char*, Relocatable_relocs*)
- { ERROR("call to Target_test::scan_relocatable_relocs"); }
- void
- relocate_relocs(const Relocate_info<size, big_endian>*,
- unsigned int, const unsigned char*, size_t,
- Output_section*, typename elfcpp::Elf_types<size>::Elf_Off,
- const Relocatable_relocs*, unsigned char*,
- typename elfcpp::Elf_types<size>::Elf_Addr,
- section_size_type, unsigned char*,
- section_size_type)
- { ERROR("call to Target_test::relocate_relocs"); }
- static const Target::Target_info test_target_info;
- };
- template<int size, bool big_endian>
- const Target::Target_info Target_test<size, big_endian>::test_target_info =
- {
- size, // size
- big_endian, // is_big_endian
- static_cast<elfcpp::EM>(0xffff), // machine_code
- false, // has_make_symbol
- false, // has_resolve
- false, // has_code_fill
- false, // is_default_stack_executable
- false, // can_icf_inline_merge_sections
- '\0', // wrap_char
- "/dummy", // dynamic_linker
- 0x08000000, // default_text_segment_address
- 0x1000, // abi_pagesize
- 0x1000, // common_pagesize
- false, // isolate_execinstr
- 0, // rosegment_gap
- elfcpp::SHN_UNDEF, // small_common_shndx
- elfcpp::SHN_UNDEF, // large_common_shndx
- 0, // small_common_section_flags
- 0, // large_common_section_flags
- NULL, // attributes_section
- NULL, // attributes_vendor
- "_start" // entry_symbol_name
- };
- // The test targets.
- #ifdef HAVE_TARGET_32_LITTLE
- Target_test<32, false> target_test_32_little;
- #endif
- #ifdef HAVE_TARGET_32_BIG
- Target_test<32, true> target_test_32_big;
- #endif
- #ifdef HAVE_TARGET_64_LITTLE
- Target_test<64, false> target_test_64_little;
- #endif
- #ifdef HAVE_TARGET_64_BIG
- Target_test<64, true> target_test_64_big;
- #endif
- // A pointer to the test targets. This is used in CHECKs.
- #ifdef HAVE_TARGET_32_LITTLE
- Target* target_test_pointer_32_little = &target_test_32_little;
- #endif
- #ifdef HAVE_TARGET_32_BIG
- Target* target_test_pointer_32_big = &target_test_32_big;
- #endif
- #ifdef HAVE_TARGET_64_LITTLE
- Target* target_test_pointer_64_little = &target_test_64_little;
- #endif
- #ifdef HAVE_TARGET_64_BIG
- Target* target_test_pointer_64_big = &target_test_64_big;
- #endif
- // Select the test targets.
- template<int size, bool big_endian>
- class Target_selector_test : public Target_selector
- {
- public:
- Target_selector_test()
- : Target_selector(0xffff, size, big_endian, NULL, NULL)
- { }
- virtual Target*
- do_instantiate_target()
- {
- gold_unreachable();
- return NULL;
- }
- virtual Target*
- do_recognize(Input_file*, off_t, int, int, int)
- {
- if (size == 32)
- {
- if (!big_endian)
- {
- #ifdef HAVE_TARGET_32_LITTLE
- return &target_test_32_little;
- #endif
- }
- else
- {
- #ifdef HAVE_TARGET_32_BIG
- return &target_test_32_big;
- #endif
- }
- }
- else
- {
- if (!big_endian)
- {
- #ifdef HAVE_TARGET_64_LITTLE
- return &target_test_64_little;
- #endif
- }
- else
- {
- #ifdef HAVE_TARGET_64_BIG
- return &target_test_64_big;
- #endif
- }
- }
- return NULL;
- }
- virtual Target*
- do_recognize_by_name(const char*)
- { return NULL; }
- virtual void
- do_supported_names(std::vector<const char*>*)
- { }
- };
- // Register the test target selectors. These don't need to be
- // conditionally compiled, as they will return NULL if there is no
- // support for them.
- Target_selector_test<32, false> target_selector_test_32_little;
- Target_selector_test<32, true> target_selector_test_32_big;
- Target_selector_test<64, false> target_selector_test_64_little;
- Target_selector_test<64, true> target_selector_test_64_big;
- // A simple ELF object with one empty section, named ".test" and one
- // globally visible symbol named "test".
- const unsigned char test_file_1_32_little[] =
- {
- // Ehdr
- // EI_MAG[0-3]
- 0x7f, 'E', 'L', 'F',
- // EI_CLASS: 32 bit.
- 1,
- // EI_DATA: little endian
- 1,
- // EI_VERSION
- 1,
- // EI_OSABI
- 0,
- // EI_ABIVERSION
- 0,
- // EI_PAD
- 0, 0, 0, 0, 0, 0, 0,
- // e_type: ET_REL
- 1, 0,
- // e_machine: a magic value used for testing.
- 0xff, 0xff,
- // e_version
- 1, 0, 0, 0,
- // e_entry
- 0, 0, 0, 0,
- // e_phoff
- 0, 0, 0, 0,
- // e_shoff: starts right after file header
- 52, 0, 0, 0,
- // e_flags
- 0, 0, 0, 0,
- // e_ehsize
- 52, 0,
- // e_phentsize
- 32, 0,
- // e_phnum
- 0, 0,
- // e_shentsize
- 40, 0,
- // e_shnum: dummy, .test, .symtab, .strtab, .shstrtab
- 5, 0,
- // e_shstrndx
- 4, 0,
- // Offset 52
- // Shdr 0: dummy entry
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 92
- // Shdr 1: .test
- // sh_name: after initial null
- 1, 0, 0, 0,
- // sh_type: SHT_PROGBITS
- 1, 0, 0, 0,
- // sh_flags: SHF_ALLOC
- 2, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0,
- // sh_offset: after file header + 5 section headers
- 252, 0, 0, 0,
- // sh_size
- 0, 0, 0, 0,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 1, 0, 0, 0,
- // sh_entsize
- 0, 0, 0, 0,
- // Offset 132
- // Shdr 2: .symtab
- // sh_name: 1 null byte + ".test\0"
- 7, 0, 0, 0,
- // sh_type: SHT_SYMTAB
- 2, 0, 0, 0,
- // sh_flags
- 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0,
- // sh_offset: after file header + 5 section headers + empty section
- 252, 0, 0, 0,
- // sh_size: two symbols: dummy symbol + test symbol
- 32, 0, 0, 0,
- // sh_link: to .strtab
- 3, 0, 0, 0,
- // sh_info: one local symbol, the dummy symbol
- 1, 0, 0, 0,
- // sh_addralign
- 4, 0, 0, 0,
- // sh_entsize: size of symbol
- 16, 0, 0, 0,
- // Offset 172
- // Shdr 3: .strtab
- // sh_name: 1 null byte + ".test\0" + ".symtab\0"
- 15, 0, 0, 0,
- // sh_type: SHT_STRTAB
- 3, 0, 0, 0,
- // sh_flags
- 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0,
- // sh_offset: after .symtab section. 284 == 0x11c
- 0x1c, 0x1, 0, 0,
- // sh_size: 1 null byte + "test\0"
- 6, 0, 0, 0,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 1, 0, 0, 0,
- // sh_entsize
- 0, 0, 0, 0,
- // Offset 212
- // Shdr 4: .shstrtab
- // sh_name: 1 null byte + ".test\0" + ".symtab\0" + ".strtab\0"
- 23, 0, 0, 0,
- // sh_type: SHT_STRTAB
- 3, 0, 0, 0,
- // sh_flags
- 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0,
- // sh_offset: after .strtab section. 290 == 0x122
- 0x22, 0x1, 0, 0,
- // sh_size: all section names
- 33, 0, 0, 0,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 1, 0, 0, 0,
- // sh_entsize
- 0, 0, 0, 0,
- // Offset 252
- // Contents of .symtab section
- // Symbol 0
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 268
- // Symbol 1
- // st_name
- 1, 0, 0, 0,
- // st_value
- 0, 0, 0, 0,
- // st_size
- 0, 0, 0, 0,
- // st_info: STT_NOTYPE, STB_GLOBAL
- 0x10,
- // st_other
- 0,
- // st_shndx: In .test
- 1, 0,
- // Offset 284
- // Contents of .strtab section
- '\0',
- 't', 'e', 's', 't', '\0',
- // Offset 290
- // Contents of .shstrtab section
- '\0',
- '.', 't', 'e', 's', 't', '\0',
- '.', 's', 'y', 'm', 't', 'a', 'b', '\0',
- '.', 's', 't', 'r', 't', 'a', 'b', '\0',
- '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0'
- };
- const unsigned int test_file_1_size_32_little = sizeof test_file_1_32_little;
- // 32-bit big-endian version of test_file_1_32_little.
- const unsigned char test_file_1_32_big[] =
- {
- // Ehdr
- // EI_MAG[0-3]
- 0x7f, 'E', 'L', 'F',
- // EI_CLASS: 32 bit.
- 1,
- // EI_DATA: big endian
- 2,
- // EI_VERSION
- 1,
- // EI_OSABI
- 0,
- // EI_ABIVERSION
- 0,
- // EI_PAD
- 0, 0, 0, 0, 0, 0, 0,
- // e_type: ET_REL
- 0, 1,
- // e_machine: a magic value used for testing.
- 0xff, 0xff,
- // e_version
- 0, 0, 0, 1,
- // e_entry
- 0, 0, 0, 0,
- // e_phoff
- 0, 0, 0, 0,
- // e_shoff: starts right after file header
- 0, 0, 0, 52,
- // e_flags
- 0, 0, 0, 0,
- // e_ehsize
- 0, 52,
- // e_phentsize
- 0, 32,
- // e_phnum
- 0, 0,
- // e_shentsize
- 0, 40,
- // e_shnum: dummy, .test, .symtab, .strtab, .shstrtab
- 0, 5,
- // e_shstrndx
- 0, 4,
- // Offset 52
- // Shdr 0: dummy entry
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 92
- // Shdr 1: .test
- // sh_name: after initial null
- 0, 0, 0, 1,
- // sh_type: SHT_PROGBITS
- 0, 0, 0, 1,
- // sh_flags: SHF_ALLOC
- 0, 0, 0, 2,
- // sh_addr
- 0, 0, 0, 0,
- // sh_offset: after file header + 5 section headers
- 0, 0, 0, 252,
- // sh_size
- 0, 0, 0, 0,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 0, 0, 0, 1,
- // sh_entsize
- 0, 0, 0, 0,
- // Offset 132
- // Shdr 2: .symtab
- // sh_name: 1 null byte + ".test\0"
- 0, 0, 0, 7,
- // sh_type: SHT_SYMTAB
- 0, 0, 0, 2,
- // sh_flags
- 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0,
- // sh_offset: after file header + 5 section headers + empty section
- 0, 0, 0, 252,
- // sh_size: two symbols: dummy symbol + test symbol
- 0, 0, 0, 32,
- // sh_link: to .strtab
- 0, 0, 0, 3,
- // sh_info: one local symbol, the dummy symbol
- 0, 0, 0, 1,
- // sh_addralign
- 0, 0, 0, 4,
- // sh_entsize: size of symbol
- 0, 0, 0, 16,
- // Offset 172
- // Shdr 3: .strtab
- // sh_name: 1 null byte + ".test\0" + ".symtab\0"
- 0, 0, 0, 15,
- // sh_type: SHT_STRTAB
- 0, 0, 0, 3,
- // sh_flags
- 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0,
- // sh_offset: after .symtab section. 284 == 0x11c
- 0, 0, 0x1, 0x1c,
- // sh_size: 1 null byte + "test\0"
- 0, 0, 0, 6,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 0, 0, 0, 1,
- // sh_entsize
- 0, 0, 0, 0,
- // Offset 212
- // Shdr 4: .shstrtab
- // sh_name: 1 null byte + ".test\0" + ".symtab\0" + ".strtab\0"
- 0, 0, 0, 23,
- // sh_type: SHT_STRTAB
- 0, 0, 0, 3,
- // sh_flags
- 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0,
- // sh_offset: after .strtab section. 290 == 0x122
- 0, 0, 0x1, 0x22,
- // sh_size: all section names
- 0, 0, 0, 33,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 0, 0, 0, 1,
- // sh_entsize
- 0, 0, 0, 0,
- // Offset 252
- // Contents of .symtab section
- // Symbol 0
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 268
- // Symbol 1
- // st_name
- 0, 0, 0, 1,
- // st_value
- 0, 0, 0, 0,
- // st_size
- 0, 0, 0, 0,
- // st_info: STT_NOTYPE, STB_GLOBAL
- 0x10,
- // st_other
- 0,
- // st_shndx: In .test
- 0, 1,
- // Offset 284
- // Contents of .strtab section
- '\0',
- 't', 'e', 's', 't', '\0',
- // Offset 290
- // Contents of .shstrtab section
- '\0',
- '.', 't', 'e', 's', 't', '\0',
- '.', 's', 'y', 'm', 't', 'a', 'b', '\0',
- '.', 's', 't', 'r', 't', 'a', 'b', '\0',
- '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0'
- };
- const unsigned int test_file_1_size_32_big = sizeof test_file_1_32_big;
- // 64-bit little-endian version of test_file_1_32_little.
- const unsigned char test_file_1_64_little[] =
- {
- // Ehdr
- // EI_MAG[0-3]
- 0x7f, 'E', 'L', 'F',
- // EI_CLASS: 64 bit.
- 2,
- // EI_DATA: little endian
- 1,
- // EI_VERSION
- 1,
- // EI_OSABI
- 0,
- // EI_ABIVERSION
- 0,
- // EI_PAD
- 0, 0, 0, 0, 0, 0, 0,
- // e_type: ET_REL
- 1, 0,
- // e_machine: a magic value used for testing.
- 0xff, 0xff,
- // e_version
- 1, 0, 0, 0,
- // e_entry
- 0, 0, 0, 0, 0, 0, 0, 0,
- // e_phoff
- 0, 0, 0, 0, 0, 0, 0, 0,
- // e_shoff: starts right after file header
- 64, 0, 0, 0, 0, 0, 0, 0,
- // e_flags
- 0, 0, 0, 0,
- // e_ehsize
- 64, 0,
- // e_phentsize
- 56, 0,
- // e_phnum
- 0, 0,
- // e_shentsize
- 64, 0,
- // e_shnum: dummy, .test, .symtab, .strtab, .shstrtab
- 5, 0,
- // e_shstrndx
- 4, 0,
- // Offset 64
- // Shdr 0: dummy entry
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 128
- // Shdr 1: .test
- // sh_name: after initial null
- 1, 0, 0, 0,
- // sh_type: SHT_PROGBITS
- 1, 0, 0, 0,
- // sh_flags: SHF_ALLOC
- 2, 0, 0, 0, 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_offset: after file header + 5 section headers. 384 == 0x180.
- 0x80, 0x1, 0, 0, 0, 0, 0, 0,
- // sh_size
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 1, 0, 0, 0, 0, 0, 0, 0,
- // sh_entsize
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 192
- // Shdr 2: .symtab
- // sh_name: 1 null byte + ".test\0"
- 7, 0, 0, 0,
- // sh_type: SHT_SYMTAB
- 2, 0, 0, 0,
- // sh_flags
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_offset: after file header + 5 section headers + empty section
- // 384 == 0x180.
- 0x80, 0x1, 0, 0, 0, 0, 0, 0,
- // sh_size: two symbols: dummy symbol + test symbol
- 48, 0, 0, 0, 0, 0, 0, 0,
- // sh_link: to .strtab
- 3, 0, 0, 0,
- // sh_info: one local symbol, the dummy symbol
- 1, 0, 0, 0,
- // sh_addralign
- 8, 0, 0, 0, 0, 0, 0, 0,
- // sh_entsize: size of symbol
- 24, 0, 0, 0, 0, 0, 0, 0,
- // Offset 256
- // Shdr 3: .strtab
- // sh_name: 1 null byte + ".test\0" + ".symtab\0"
- 15, 0, 0, 0,
- // sh_type: SHT_STRTAB
- 3, 0, 0, 0,
- // sh_flags
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_offset: after .symtab section. 432 == 0x1b0
- 0xb0, 0x1, 0, 0, 0, 0, 0, 0,
- // sh_size: 1 null byte + "test\0"
- 6, 0, 0, 0, 0, 0, 0, 0,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 1, 0, 0, 0, 0, 0, 0, 0,
- // sh_entsize
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 320
- // Shdr 4: .shstrtab
- // sh_name: 1 null byte + ".test\0" + ".symtab\0" + ".strtab\0"
- 23, 0, 0, 0,
- // sh_type: SHT_STRTAB
- 3, 0, 0, 0,
- // sh_flags
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_offset: after .strtab section. 438 == 0x1b6
- 0xb6, 0x1, 0, 0, 0, 0, 0, 0,
- // sh_size: all section names
- 33, 0, 0, 0, 0, 0, 0, 0,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 1, 0, 0, 0, 0, 0, 0, 0,
- // sh_entsize
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 384
- // Contents of .symtab section
- // Symbol 0
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 408
- // Symbol 1
- // st_name
- 1, 0, 0, 0,
- // st_info: STT_NOTYPE, STB_GLOBAL
- 0x10,
- // st_other
- 0,
- // st_shndx: In .test
- 1, 0,
- // st_value
- 0, 0, 0, 0, 0, 0, 0, 0,
- // st_size
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 432
- // Contents of .strtab section
- '\0',
- 't', 'e', 's', 't', '\0',
- // Offset 438
- // Contents of .shstrtab section
- '\0',
- '.', 't', 'e', 's', 't', '\0',
- '.', 's', 'y', 'm', 't', 'a', 'b', '\0',
- '.', 's', 't', 'r', 't', 'a', 'b', '\0',
- '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0'
- };
- const unsigned int test_file_1_size_64_little = sizeof test_file_1_64_little;
- // 64-bit big-endian version of test_file_1_32_little.
- const unsigned char test_file_1_64_big[] =
- {
- // Ehdr
- // EI_MAG[0-3]
- 0x7f, 'E', 'L', 'F',
- // EI_CLASS: 64 bit.
- 2,
- // EI_DATA: big endian
- 2,
- // EI_VERSION
- 1,
- // EI_OSABI
- 0,
- // EI_ABIVERSION
- 0,
- // EI_PAD
- 0, 0, 0, 0, 0, 0, 0,
- // e_type: ET_REL
- 0, 1,
- // e_machine: a magic value used for testing.
- 0xff, 0xff,
- // e_version
- 0, 0, 0, 1,
- // e_entry
- 0, 0, 0, 0, 0, 0, 0, 0,
- // e_phoff
- 0, 0, 0, 0, 0, 0, 0, 0,
- // e_shoff: starts right after file header
- 0, 0, 0, 0, 0, 0, 0, 64,
- // e_flags
- 0, 0, 0, 0,
- // e_ehsize
- 0, 64,
- // e_phentsize
- 0, 56,
- // e_phnum
- 0, 0,
- // e_shentsize
- 0, 64,
- // e_shnum: dummy, .test, .symtab, .strtab, .shstrtab
- 0, 5,
- // e_shstrndx
- 0, 4,
- // Offset 64
- // Shdr 0: dummy entry
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 128
- // Shdr 1: .test
- // sh_name: after initial null
- 0, 0, 0, 1,
- // sh_type: SHT_PROGBITS
- 0, 0, 0, 1,
- // sh_flags: SHF_ALLOC
- 0, 0, 0, 0, 0, 0, 0, 2,
- // sh_addr
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_offset: after file header + 5 section headers. 384 == 0x180.
- 0, 0, 0, 0, 0, 0, 0x1, 0x80,
- // sh_size
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 0, 0, 0, 0, 0, 0, 0, 1,
- // sh_entsize
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 192
- // Shdr 2: .symtab
- // sh_name: 1 null byte + ".test\0"
- 0, 0, 0, 7,
- // sh_type: SHT_SYMTAB
- 0, 0, 0, 2,
- // sh_flags
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_offset: after file header + 5 section headers + empty section
- // 384 == 0x180.
- 0, 0, 0, 0, 0, 0, 0x1, 0x80,
- // sh_size: two symbols: dummy symbol + test symbol
- 0, 0, 0, 0, 0, 0, 0, 48,
- // sh_link: to .strtab
- 0, 0, 0, 3,
- // sh_info: one local symbol, the dummy symbol
- 0, 0, 0, 1,
- // sh_addralign
- 0, 0, 0, 0, 0, 0, 0, 8,
- // sh_entsize: size of symbol
- 0, 0, 0, 0, 0, 0, 0, 24,
- // Offset 256
- // Shdr 3: .strtab
- // sh_name: 1 null byte + ".test\0" + ".symtab\0"
- 0, 0, 0, 15,
- // sh_type: SHT_STRTAB
- 0, 0, 0, 3,
- // sh_flags
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_offset: after .symtab section. 432 == 0x1b0
- 0, 0, 0, 0, 0, 0, 0x1, 0xb0,
- // sh_size: 1 null byte + "test\0"
- 0, 0, 0, 0, 0, 0, 0, 6,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 0, 0, 0, 0, 0, 0, 0, 1,
- // sh_entsize
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 320
- // Shdr 4: .shstrtab
- // sh_name: 1 null byte + ".test\0" + ".symtab\0" + ".strtab\0"
- 0, 0, 0, 23,
- // sh_type: SHT_STRTAB
- 0, 0, 0, 3,
- // sh_flags
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_addr
- 0, 0, 0, 0, 0, 0, 0, 0,
- // sh_offset: after .strtab section. 438 == 0x1b6
- 0, 0, 0, 0, 0, 0, 0x1, 0xb6,
- // sh_size: all section names
- 0, 0, 0, 0, 0, 0, 0, 33,
- // sh_link
- 0, 0, 0, 0,
- // sh_info
- 0, 0, 0, 0,
- // sh_addralign
- 0, 0, 0, 0, 0, 0, 0, 1,
- // sh_entsize
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 384
- // Contents of .symtab section
- // Symbol 0
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 408
- // Symbol 1
- // st_name
- 0, 0, 0, 1,
- // st_info: STT_NOTYPE, STB_GLOBAL
- 0x10,
- // st_other
- 0,
- // st_shndx: In .test
- 0, 1,
- // st_value
- 0, 0, 0, 0, 0, 0, 0, 0,
- // st_size
- 0, 0, 0, 0, 0, 0, 0, 0,
- // Offset 432
- // Contents of .strtab section
- '\0',
- 't', 'e', 's', 't', '\0',
- // Offset 438
- // Contents of .shstrtab section
- '\0',
- '.', 't', 'e', 's', 't', '\0',
- '.', 's', 'y', 'm', 't', 'a', 'b', '\0',
- '.', 's', 't', 'r', 't', 'a', 'b', '\0',
- '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0'
- };
- const unsigned int test_file_1_size_64_big = sizeof test_file_1_64_big;
- } // End namespace gold_testsuite.
|