Home | History | Annotate | Download | only in testsuite
      1 // testfile.cc -- Dummy ELF objects for testing purposes.
      2 
      3 // Copyright (C) 2006-2014 Free Software Foundation, Inc.
      4 // Written by Ian Lance Taylor <iant (at) google.com>.
      5 
      6 // This file is part of gold.
      7 
      8 // This program is free software; you can redistribute it and/or modify
      9 // it under the terms of the GNU General Public License as published by
     10 // the Free Software Foundation; either version 3 of the License, or
     11 // (at your option) any later version.
     12 
     13 // This program is distributed in the hope that it will be useful,
     14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 // GNU General Public License for more details.
     17 
     18 // You should have received a copy of the GNU General Public License
     19 // along with this program; if not, write to the Free Software
     20 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     21 // MA 02110-1301, USA.
     22 
     23 #include "gold.h"
     24 
     25 #include "target.h"
     26 #include "target-select.h"
     27 
     28 #include "test.h"
     29 #include "testfile.h"
     30 
     31 namespace gold_testsuite
     32 {
     33 
     34 using namespace gold;
     35 
     36 // A Target used for testing purposes.
     37 
     38 template<int size, bool big_endian>
     39 class Target_test : public Sized_target<size, big_endian>
     40 {
     41  public:
     42   Target_test()
     43     : Sized_target<size, big_endian>(&test_target_info)
     44   { }
     45 
     46   void
     47   gc_process_relocs(Symbol_table*, Layout*,
     48 		    Sized_relobj_file<size, big_endian>*,
     49 		    unsigned int, unsigned int, const unsigned char*, size_t,
     50 		    Output_section*, bool, size_t, const unsigned char*)
     51   { ERROR("call to Target_test::gc_process_relocs"); }
     52 
     53   void
     54   scan_relocs(Symbol_table*, Layout*, Sized_relobj_file<size, big_endian>*,
     55 	      unsigned int, unsigned int, const unsigned char*, size_t,
     56 	      Output_section*, bool, size_t, const unsigned char*)
     57   { ERROR("call to Target_test::scan_relocs"); }
     58 
     59   void
     60   relocate_section(const Relocate_info<size, big_endian>*, unsigned int,
     61 		   const unsigned char*, size_t, Output_section*, bool,
     62 		   unsigned char*, typename elfcpp::Elf_types<size>::Elf_Addr,
     63 		   section_size_type, const Reloc_symbol_changes*)
     64   { ERROR("call to Target_test::relocate_section"); }
     65 
     66   void
     67   scan_relocatable_relocs(Symbol_table*, Layout*,
     68 			  Sized_relobj_file<size, big_endian>*, unsigned int,
     69 			  unsigned int, const unsigned char*,
     70 			  size_t, Output_section*, bool, size_t,
     71 			  const unsigned char*, Relocatable_relocs*)
     72   { ERROR("call to Target_test::scan_relocatable_relocs"); }
     73 
     74   void
     75   relocate_relocs(const Relocate_info<size, big_endian>*,
     76 		  unsigned int, const unsigned char*, size_t,
     77 		  Output_section*, typename elfcpp::Elf_types<size>::Elf_Off,
     78                   const Relocatable_relocs*, unsigned char*,
     79 		  typename elfcpp::Elf_types<size>::Elf_Addr,
     80 		  section_size_type, unsigned char*,
     81 		  section_size_type)
     82   { ERROR("call to Target_test::relocate_relocs"); }
     83 
     84   static const Target::Target_info test_target_info;
     85 };
     86 
     87 template<int size, bool big_endian>
     88 const Target::Target_info Target_test<size, big_endian>::test_target_info =
     89 {
     90   size,					// size
     91   big_endian,				// is_big_endian
     92   static_cast<elfcpp::EM>(0xffff),	// machine_code
     93   false,				// has_make_symbol
     94   false,				// has_resolve
     95   false,				// has_code_fill
     96   false,				// is_default_stack_executable
     97   false,				// can_icf_inline_merge_sections
     98   '\0',					// wrap_char
     99   "/dummy",				// dynamic_linker
    100   0x08000000,				// default_text_segment_address
    101   0x1000,				// abi_pagesize
    102   0x1000,				// common_pagesize
    103   false,                                // isolate_execinstr
    104   0,                                    // rosegment_gap
    105   elfcpp::SHN_UNDEF,			// small_common_shndx
    106   elfcpp::SHN_UNDEF,			// large_common_shndx
    107   0,					// small_common_section_flags
    108   0,					// large_common_section_flags
    109   NULL,					// attributes_section
    110   NULL,					// attributes_vendor
    111   "_start"		// entry_symbol_name
    112 };
    113 
    114 // The test targets.
    115 
    116 #ifdef HAVE_TARGET_32_LITTLE
    117 Target_test<32, false> target_test_32_little;
    118 #endif
    119 
    120 #ifdef HAVE_TARGET_32_BIG
    121 Target_test<32, true> target_test_32_big;
    122 #endif
    123 
    124 #ifdef HAVE_TARGET_64_LITTLE
    125 Target_test<64, false> target_test_64_little;
    126 #endif
    127 
    128 #ifdef HAVE_TARGET_64_BIG
    129 Target_test<64, true> target_test_64_big;
    130 #endif
    131 
    132 // A pointer to the test targets.  This is used in CHECKs.
    133 
    134 #ifdef HAVE_TARGET_32_LITTLE
    135 Target* target_test_pointer_32_little = &target_test_32_little;
    136 #endif
    137 
    138 #ifdef HAVE_TARGET_32_BIG
    139 Target* target_test_pointer_32_big = &target_test_32_big;
    140 #endif
    141 
    142 #ifdef HAVE_TARGET_64_LITTLE
    143 Target* target_test_pointer_64_little = &target_test_64_little;
    144 #endif
    145 
    146 #ifdef HAVE_TARGET_64_BIG
    147 Target* target_test_pointer_64_big = &target_test_64_big;
    148 #endif
    149 
    150 // Select the test targets.
    151 
    152 template<int size, bool big_endian>
    153 class Target_selector_test : public Target_selector
    154 {
    155  public:
    156   Target_selector_test()
    157     : Target_selector(0xffff, size, big_endian, NULL, NULL)
    158   { }
    159 
    160   virtual Target*
    161   do_instantiate_target()
    162   {
    163     gold_unreachable();
    164     return NULL;
    165   }
    166 
    167   virtual Target*
    168   do_recognize(Input_file*, off_t, int, int, int)
    169   {
    170     if (size == 32)
    171       {
    172 	if (!big_endian)
    173 	  {
    174 #ifdef HAVE_TARGET_32_LITTLE
    175 	    return &target_test_32_little;
    176 #endif
    177 	  }
    178 	else
    179 	  {
    180 #ifdef HAVE_TARGET_32_BIG
    181 	    return &target_test_32_big;
    182 #endif
    183 	  }
    184       }
    185     else
    186       {
    187 	if (!big_endian)
    188 	  {
    189 #ifdef HAVE_TARGET_64_LITTLE
    190 	    return &target_test_64_little;
    191 #endif
    192 	  }
    193 	else
    194 	  {
    195 #ifdef HAVE_TARGET_64_BIG
    196 	    return &target_test_64_big;
    197 #endif
    198 	  }
    199       }
    200 
    201     return NULL;
    202   }
    203 
    204   virtual Target*
    205   do_recognize_by_name(const char*)
    206   { return NULL; }
    207 
    208   virtual void
    209   do_supported_names(std::vector<const char*>*)
    210   { }
    211 };
    212 
    213 // Register the test target selectors.  These don't need to be
    214 // conditionally compiled, as they will return NULL if there is no
    215 // support for them.
    216 
    217 Target_selector_test<32, false> target_selector_test_32_little;
    218 Target_selector_test<32, true> target_selector_test_32_big;
    219 Target_selector_test<64, false> target_selector_test_64_little;
    220 Target_selector_test<64, true> target_selector_test_64_big;
    221 
    222 // A simple ELF object with one empty section, named ".test" and one
    223 // globally visible symbol named "test".
    224 
    225 const unsigned char test_file_1_32_little[] =
    226 {
    227   // Ehdr
    228   // EI_MAG[0-3]
    229   0x7f, 'E', 'L', 'F',
    230   // EI_CLASS: 32 bit.
    231   1,
    232   // EI_DATA: little endian
    233   1,
    234   // EI_VERSION
    235   1,
    236   // EI_OSABI
    237   0,
    238   // EI_ABIVERSION
    239   0,
    240   // EI_PAD
    241   0, 0, 0, 0, 0, 0, 0,
    242   // e_type: ET_REL
    243   1, 0,
    244   // e_machine: a magic value used for testing.
    245   0xff, 0xff,
    246   // e_version
    247   1, 0, 0, 0,
    248   // e_entry
    249   0, 0, 0, 0,
    250   // e_phoff
    251   0, 0, 0, 0,
    252   // e_shoff: starts right after file header
    253   52, 0, 0, 0,
    254   // e_flags
    255   0, 0, 0, 0,
    256   // e_ehsize
    257   52, 0,
    258   // e_phentsize
    259   32, 0,
    260   // e_phnum
    261   0, 0,
    262   // e_shentsize
    263   40, 0,
    264   // e_shnum: dummy, .test, .symtab, .strtab, .shstrtab
    265   5, 0,
    266   // e_shstrndx
    267   4, 0,
    268 
    269   // Offset 52
    270   // Shdr 0: dummy entry
    271   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    272   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    273   0, 0, 0, 0, 0, 0, 0, 0,
    274 
    275   // Offset 92
    276   // Shdr 1: .test
    277   // sh_name: after initial null
    278   1, 0, 0, 0,
    279   // sh_type: SHT_PROGBITS
    280   1, 0, 0, 0,
    281   // sh_flags: SHF_ALLOC
    282   2, 0, 0, 0,
    283   // sh_addr
    284   0, 0, 0, 0,
    285   // sh_offset: after file header + 5 section headers
    286   252, 0, 0, 0,
    287   // sh_size
    288   0, 0, 0, 0,
    289   // sh_link
    290   0, 0, 0, 0,
    291   // sh_info
    292   0, 0, 0, 0,
    293   // sh_addralign
    294   1, 0, 0, 0,
    295   // sh_entsize
    296   0, 0, 0, 0,
    297 
    298   // Offset 132
    299   // Shdr 2: .symtab
    300   // sh_name: 1 null byte + ".test\0"
    301   7, 0, 0, 0,
    302   // sh_type: SHT_SYMTAB
    303   2, 0, 0, 0,
    304   // sh_flags
    305   0, 0, 0, 0,
    306   // sh_addr
    307   0, 0, 0, 0,
    308   // sh_offset: after file header + 5 section headers + empty section
    309   252, 0, 0, 0,
    310   // sh_size: two symbols: dummy symbol + test symbol
    311   32, 0, 0, 0,
    312   // sh_link: to .strtab
    313   3, 0, 0, 0,
    314   // sh_info: one local symbol, the dummy symbol
    315   1, 0, 0, 0,
    316   // sh_addralign
    317   4, 0, 0, 0,
    318   // sh_entsize: size of symbol
    319   16, 0, 0, 0,
    320 
    321   // Offset 172
    322   // Shdr 3: .strtab
    323   // sh_name: 1 null byte + ".test\0" + ".symtab\0"
    324   15, 0, 0, 0,
    325   // sh_type: SHT_STRTAB
    326   3, 0, 0, 0,
    327   // sh_flags
    328   0, 0, 0, 0,
    329   // sh_addr
    330   0, 0, 0, 0,
    331   // sh_offset: after .symtab section.  284 == 0x11c
    332   0x1c, 0x1, 0, 0,
    333   // sh_size: 1 null byte + "test\0"
    334   6, 0, 0, 0,
    335   // sh_link
    336   0, 0, 0, 0,
    337   // sh_info
    338   0, 0, 0, 0,
    339   // sh_addralign
    340   1, 0, 0, 0,
    341   // sh_entsize
    342   0, 0, 0, 0,
    343 
    344   // Offset 212
    345   // Shdr 4: .shstrtab
    346   // sh_name: 1 null byte + ".test\0" + ".symtab\0" + ".strtab\0"
    347   23, 0, 0, 0,
    348   // sh_type: SHT_STRTAB
    349   3, 0, 0, 0,
    350   // sh_flags
    351   0, 0, 0, 0,
    352   // sh_addr
    353   0, 0, 0, 0,
    354   // sh_offset: after .strtab section.  290 == 0x122
    355   0x22, 0x1, 0, 0,
    356   // sh_size: all section names
    357   33, 0, 0, 0,
    358   // sh_link
    359   0, 0, 0, 0,
    360   // sh_info
    361   0, 0, 0, 0,
    362   // sh_addralign
    363   1, 0, 0, 0,
    364   // sh_entsize
    365   0, 0, 0, 0,
    366 
    367   // Offset 252
    368   // Contents of .symtab section
    369   // Symbol 0
    370   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    371 
    372   // Offset 268
    373   // Symbol 1
    374   // st_name
    375   1, 0, 0, 0,
    376   // st_value
    377   0, 0, 0, 0,
    378   // st_size
    379   0, 0, 0, 0,
    380   // st_info: STT_NOTYPE, STB_GLOBAL
    381   0x10,
    382   // st_other
    383   0,
    384   // st_shndx: In .test
    385   1, 0,
    386 
    387   // Offset 284
    388   // Contents of .strtab section
    389   '\0',
    390   't', 'e', 's', 't', '\0',
    391 
    392   // Offset 290
    393   // Contents of .shstrtab section
    394   '\0',
    395   '.', 't', 'e', 's', 't', '\0',
    396   '.', 's', 'y', 'm', 't', 'a', 'b', '\0',
    397   '.', 's', 't', 'r', 't', 'a', 'b', '\0',
    398   '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0'
    399 };
    400 
    401 const unsigned int test_file_1_size_32_little = sizeof test_file_1_32_little;
    402 
    403 // 32-bit big-endian version of test_file_1_32_little.
    404 
    405 const unsigned char test_file_1_32_big[] =
    406 {
    407   // Ehdr
    408   // EI_MAG[0-3]
    409   0x7f, 'E', 'L', 'F',
    410   // EI_CLASS: 32 bit.
    411   1,
    412   // EI_DATA: big endian
    413   2,
    414   // EI_VERSION
    415   1,
    416   // EI_OSABI
    417   0,
    418   // EI_ABIVERSION
    419   0,
    420   // EI_PAD
    421   0, 0, 0, 0, 0, 0, 0,
    422   // e_type: ET_REL
    423   0, 1,
    424   // e_machine: a magic value used for testing.
    425   0xff, 0xff,
    426   // e_version
    427   0, 0, 0, 1,
    428   // e_entry
    429   0, 0, 0, 0,
    430   // e_phoff
    431   0, 0, 0, 0,
    432   // e_shoff: starts right after file header
    433   0, 0, 0, 52,
    434   // e_flags
    435   0, 0, 0, 0,
    436   // e_ehsize
    437   0, 52,
    438   // e_phentsize
    439   0, 32,
    440   // e_phnum
    441   0, 0,
    442   // e_shentsize
    443   0, 40,
    444   // e_shnum: dummy, .test, .symtab, .strtab, .shstrtab
    445   0, 5,
    446   // e_shstrndx
    447   0, 4,
    448 
    449   // Offset 52
    450   // Shdr 0: dummy entry
    451   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    452   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    453   0, 0, 0, 0, 0, 0, 0, 0,
    454 
    455   // Offset 92
    456   // Shdr 1: .test
    457   // sh_name: after initial null
    458   0, 0, 0, 1,
    459   // sh_type: SHT_PROGBITS
    460   0, 0, 0, 1,
    461   // sh_flags: SHF_ALLOC
    462   0, 0, 0, 2,
    463   // sh_addr
    464   0, 0, 0, 0,
    465   // sh_offset: after file header + 5 section headers
    466   0, 0, 0, 252,
    467   // sh_size
    468   0, 0, 0, 0,
    469   // sh_link
    470   0, 0, 0, 0,
    471   // sh_info
    472   0, 0, 0, 0,
    473   // sh_addralign
    474   0, 0, 0, 1,
    475   // sh_entsize
    476   0, 0, 0, 0,
    477 
    478   // Offset 132
    479   // Shdr 2: .symtab
    480   // sh_name: 1 null byte + ".test\0"
    481   0, 0, 0, 7,
    482   // sh_type: SHT_SYMTAB
    483   0, 0, 0, 2,
    484   // sh_flags
    485   0, 0, 0, 0,
    486   // sh_addr
    487   0, 0, 0, 0,
    488   // sh_offset: after file header + 5 section headers + empty section
    489   0, 0, 0, 252,
    490   // sh_size: two symbols: dummy symbol + test symbol
    491   0, 0, 0, 32,
    492   // sh_link: to .strtab
    493   0, 0, 0, 3,
    494   // sh_info: one local symbol, the dummy symbol
    495   0, 0, 0, 1,
    496   // sh_addralign
    497   0, 0, 0, 4,
    498   // sh_entsize: size of symbol
    499   0, 0, 0, 16,
    500 
    501   // Offset 172
    502   // Shdr 3: .strtab
    503   // sh_name: 1 null byte + ".test\0" + ".symtab\0"
    504   0, 0, 0, 15,
    505   // sh_type: SHT_STRTAB
    506   0, 0, 0, 3,
    507   // sh_flags
    508   0, 0, 0, 0,
    509   // sh_addr
    510   0, 0, 0, 0,
    511   // sh_offset: after .symtab section.  284 == 0x11c
    512   0, 0, 0x1, 0x1c,
    513   // sh_size: 1 null byte + "test\0"
    514   0, 0, 0, 6,
    515   // sh_link
    516   0, 0, 0, 0,
    517   // sh_info
    518   0, 0, 0, 0,
    519   // sh_addralign
    520   0, 0, 0, 1,
    521   // sh_entsize
    522   0, 0, 0, 0,
    523 
    524   // Offset 212
    525   // Shdr 4: .shstrtab
    526   // sh_name: 1 null byte + ".test\0" + ".symtab\0" + ".strtab\0"
    527   0, 0, 0, 23,
    528   // sh_type: SHT_STRTAB
    529   0, 0, 0, 3,
    530   // sh_flags
    531   0, 0, 0, 0,
    532   // sh_addr
    533   0, 0, 0, 0,
    534   // sh_offset: after .strtab section.  290 == 0x122
    535   0, 0, 0x1, 0x22,
    536   // sh_size: all section names
    537   0, 0, 0, 33,
    538   // sh_link
    539   0, 0, 0, 0,
    540   // sh_info
    541   0, 0, 0, 0,
    542   // sh_addralign
    543   0, 0, 0, 1,
    544   // sh_entsize
    545   0, 0, 0, 0,
    546 
    547   // Offset 252
    548   // Contents of .symtab section
    549   // Symbol 0
    550   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    551 
    552   // Offset 268
    553   // Symbol 1
    554   // st_name
    555   0, 0, 0, 1,
    556   // st_value
    557   0, 0, 0, 0,
    558   // st_size
    559   0, 0, 0, 0,
    560   // st_info: STT_NOTYPE, STB_GLOBAL
    561   0x10,
    562   // st_other
    563   0,
    564   // st_shndx: In .test
    565   0, 1,
    566 
    567   // Offset 284
    568   // Contents of .strtab section
    569   '\0',
    570   't', 'e', 's', 't', '\0',
    571 
    572   // Offset 290
    573   // Contents of .shstrtab section
    574   '\0',
    575   '.', 't', 'e', 's', 't', '\0',
    576   '.', 's', 'y', 'm', 't', 'a', 'b', '\0',
    577   '.', 's', 't', 'r', 't', 'a', 'b', '\0',
    578   '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0'
    579 };
    580 
    581 const unsigned int test_file_1_size_32_big = sizeof test_file_1_32_big;
    582 
    583 // 64-bit little-endian version of test_file_1_32_little.
    584 
    585 const unsigned char test_file_1_64_little[] =
    586 {
    587   // Ehdr
    588   // EI_MAG[0-3]
    589   0x7f, 'E', 'L', 'F',
    590   // EI_CLASS: 64 bit.
    591   2,
    592   // EI_DATA: little endian
    593   1,
    594   // EI_VERSION
    595   1,
    596   // EI_OSABI
    597   0,
    598   // EI_ABIVERSION
    599   0,
    600   // EI_PAD
    601   0, 0, 0, 0, 0, 0, 0,
    602   // e_type: ET_REL
    603   1, 0,
    604   // e_machine: a magic value used for testing.
    605   0xff, 0xff,
    606   // e_version
    607   1, 0, 0, 0,
    608   // e_entry
    609   0, 0, 0, 0, 0, 0, 0, 0,
    610   // e_phoff
    611   0, 0, 0, 0, 0, 0, 0, 0,
    612   // e_shoff: starts right after file header
    613   64, 0, 0, 0, 0, 0, 0, 0,
    614   // e_flags
    615   0, 0, 0, 0,
    616   // e_ehsize
    617   64, 0,
    618   // e_phentsize
    619   56, 0,
    620   // e_phnum
    621   0, 0,
    622   // e_shentsize
    623   64, 0,
    624   // e_shnum: dummy, .test, .symtab, .strtab, .shstrtab
    625   5, 0,
    626   // e_shstrndx
    627   4, 0,
    628 
    629   // Offset 64
    630   // Shdr 0: dummy entry
    631   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    632   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    633   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    634   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    635 
    636   // Offset 128
    637   // Shdr 1: .test
    638   // sh_name: after initial null
    639   1, 0, 0, 0,
    640   // sh_type: SHT_PROGBITS
    641   1, 0, 0, 0,
    642   // sh_flags: SHF_ALLOC
    643   2, 0, 0, 0, 0, 0, 0, 0,
    644   // sh_addr
    645   0, 0, 0, 0, 0, 0, 0, 0,
    646   // sh_offset: after file header + 5 section headers.  384 == 0x180.
    647   0x80, 0x1, 0, 0, 0, 0, 0, 0,
    648   // sh_size
    649   0, 0, 0, 0, 0, 0, 0, 0,
    650   // sh_link
    651   0, 0, 0, 0,
    652   // sh_info
    653   0, 0, 0, 0,
    654   // sh_addralign
    655   1, 0, 0, 0, 0, 0, 0, 0,
    656   // sh_entsize
    657   0, 0, 0, 0, 0, 0, 0, 0,
    658 
    659   // Offset 192
    660   // Shdr 2: .symtab
    661   // sh_name: 1 null byte + ".test\0"
    662   7, 0, 0, 0,
    663   // sh_type: SHT_SYMTAB
    664   2, 0, 0, 0,
    665   // sh_flags
    666   0, 0, 0, 0, 0, 0, 0, 0,
    667   // sh_addr
    668   0, 0, 0, 0, 0, 0, 0, 0,
    669   // sh_offset: after file header + 5 section headers + empty section
    670   // 384 == 0x180.
    671   0x80, 0x1, 0, 0, 0, 0, 0, 0,
    672   // sh_size: two symbols: dummy symbol + test symbol
    673   48, 0, 0, 0, 0, 0, 0, 0,
    674   // sh_link: to .strtab
    675   3, 0, 0, 0,
    676   // sh_info: one local symbol, the dummy symbol
    677   1, 0, 0, 0,
    678   // sh_addralign
    679   8, 0, 0, 0, 0, 0, 0, 0,
    680   // sh_entsize: size of symbol
    681   24, 0, 0, 0, 0, 0, 0, 0,
    682 
    683   // Offset 256
    684   // Shdr 3: .strtab
    685   // sh_name: 1 null byte + ".test\0" + ".symtab\0"
    686   15, 0, 0, 0,
    687   // sh_type: SHT_STRTAB
    688   3, 0, 0, 0,
    689   // sh_flags
    690   0, 0, 0, 0, 0, 0, 0, 0,
    691   // sh_addr
    692   0, 0, 0, 0, 0, 0, 0, 0,
    693   // sh_offset: after .symtab section.  432 == 0x1b0
    694   0xb0, 0x1, 0, 0, 0, 0, 0, 0,
    695   // sh_size: 1 null byte + "test\0"
    696   6, 0, 0, 0, 0, 0, 0, 0,
    697   // sh_link
    698   0, 0, 0, 0,
    699   // sh_info
    700   0, 0, 0, 0,
    701   // sh_addralign
    702   1, 0, 0, 0, 0, 0, 0, 0,
    703   // sh_entsize
    704   0, 0, 0, 0, 0, 0, 0, 0,
    705 
    706   // Offset 320
    707   // Shdr 4: .shstrtab
    708   // sh_name: 1 null byte + ".test\0" + ".symtab\0" + ".strtab\0"
    709   23, 0, 0, 0,
    710   // sh_type: SHT_STRTAB
    711   3, 0, 0, 0,
    712   // sh_flags
    713   0, 0, 0, 0, 0, 0, 0, 0,
    714   // sh_addr
    715   0, 0, 0, 0, 0, 0, 0, 0,
    716   // sh_offset: after .strtab section.  438 == 0x1b6
    717   0xb6, 0x1, 0, 0, 0, 0, 0, 0,
    718   // sh_size: all section names
    719   33, 0, 0, 0, 0, 0, 0, 0,
    720   // sh_link
    721   0, 0, 0, 0,
    722   // sh_info
    723   0, 0, 0, 0,
    724   // sh_addralign
    725   1, 0, 0, 0, 0, 0, 0, 0,
    726   // sh_entsize
    727   0, 0, 0, 0, 0, 0, 0, 0,
    728 
    729   // Offset 384
    730   // Contents of .symtab section
    731   // Symbol 0
    732   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    733   0, 0, 0, 0, 0, 0, 0, 0,
    734 
    735   // Offset 408
    736   // Symbol 1
    737   // st_name
    738   1, 0, 0, 0,
    739   // st_info: STT_NOTYPE, STB_GLOBAL
    740   0x10,
    741   // st_other
    742   0,
    743   // st_shndx: In .test
    744   1, 0,
    745   // st_value
    746   0, 0, 0, 0, 0, 0, 0, 0,
    747   // st_size
    748   0, 0, 0, 0, 0, 0, 0, 0,
    749 
    750   // Offset 432
    751   // Contents of .strtab section
    752   '\0',
    753   't', 'e', 's', 't', '\0',
    754 
    755   // Offset 438
    756   // Contents of .shstrtab section
    757   '\0',
    758   '.', 't', 'e', 's', 't', '\0',
    759   '.', 's', 'y', 'm', 't', 'a', 'b', '\0',
    760   '.', 's', 't', 'r', 't', 'a', 'b', '\0',
    761   '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0'
    762 };
    763 
    764 const unsigned int test_file_1_size_64_little = sizeof test_file_1_64_little;
    765 
    766 // 64-bit big-endian version of test_file_1_32_little.
    767 
    768 const unsigned char test_file_1_64_big[] =
    769 {
    770   // Ehdr
    771   // EI_MAG[0-3]
    772   0x7f, 'E', 'L', 'F',
    773   // EI_CLASS: 64 bit.
    774   2,
    775   // EI_DATA: big endian
    776   2,
    777   // EI_VERSION
    778   1,
    779   // EI_OSABI
    780   0,
    781   // EI_ABIVERSION
    782   0,
    783   // EI_PAD
    784   0, 0, 0, 0, 0, 0, 0,
    785   // e_type: ET_REL
    786   0, 1,
    787   // e_machine: a magic value used for testing.
    788   0xff, 0xff,
    789   // e_version
    790   0, 0, 0, 1,
    791   // e_entry
    792   0, 0, 0, 0, 0, 0, 0, 0,
    793   // e_phoff
    794   0, 0, 0, 0, 0, 0, 0, 0,
    795   // e_shoff: starts right after file header
    796   0, 0, 0, 0, 0, 0, 0, 64,
    797   // e_flags
    798   0, 0, 0, 0,
    799   // e_ehsize
    800   0, 64,
    801   // e_phentsize
    802   0, 56,
    803   // e_phnum
    804   0, 0,
    805   // e_shentsize
    806   0, 64,
    807   // e_shnum: dummy, .test, .symtab, .strtab, .shstrtab
    808   0, 5,
    809   // e_shstrndx
    810   0, 4,
    811 
    812   // Offset 64
    813   // Shdr 0: dummy entry
    814   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    815   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    816   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    817   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    818 
    819   // Offset 128
    820   // Shdr 1: .test
    821   // sh_name: after initial null
    822   0, 0, 0, 1,
    823   // sh_type: SHT_PROGBITS
    824   0, 0, 0, 1,
    825   // sh_flags: SHF_ALLOC
    826   0, 0, 0, 0, 0, 0, 0, 2,
    827   // sh_addr
    828   0, 0, 0, 0, 0, 0, 0, 0,
    829   // sh_offset: after file header + 5 section headers.  384 == 0x180.
    830   0, 0, 0, 0, 0, 0, 0x1, 0x80,
    831   // sh_size
    832   0, 0, 0, 0, 0, 0, 0, 0,
    833   // sh_link
    834   0, 0, 0, 0,
    835   // sh_info
    836   0, 0, 0, 0,
    837   // sh_addralign
    838   0, 0, 0, 0, 0, 0, 0, 1,
    839   // sh_entsize
    840   0, 0, 0, 0, 0, 0, 0, 0,
    841 
    842   // Offset 192
    843   // Shdr 2: .symtab
    844   // sh_name: 1 null byte + ".test\0"
    845   0, 0, 0, 7,
    846   // sh_type: SHT_SYMTAB
    847   0, 0, 0, 2,
    848   // sh_flags
    849   0, 0, 0, 0, 0, 0, 0, 0,
    850   // sh_addr
    851   0, 0, 0, 0, 0, 0, 0, 0,
    852   // sh_offset: after file header + 5 section headers + empty section
    853   // 384 == 0x180.
    854   0, 0, 0, 0, 0, 0, 0x1, 0x80,
    855   // sh_size: two symbols: dummy symbol + test symbol
    856   0, 0, 0, 0, 0, 0, 0, 48,
    857   // sh_link: to .strtab
    858   0, 0, 0, 3,
    859   // sh_info: one local symbol, the dummy symbol
    860   0, 0, 0, 1,
    861   // sh_addralign
    862   0, 0, 0, 0, 0, 0, 0, 8,
    863   // sh_entsize: size of symbol
    864   0, 0, 0, 0, 0, 0, 0, 24,
    865 
    866   // Offset 256
    867   // Shdr 3: .strtab
    868   // sh_name: 1 null byte + ".test\0" + ".symtab\0"
    869   0, 0, 0, 15,
    870   // sh_type: SHT_STRTAB
    871   0, 0, 0, 3,
    872   // sh_flags
    873   0, 0, 0, 0, 0, 0, 0, 0,
    874   // sh_addr
    875   0, 0, 0, 0, 0, 0, 0, 0,
    876   // sh_offset: after .symtab section.  432 == 0x1b0
    877   0, 0, 0, 0, 0, 0, 0x1, 0xb0,
    878   // sh_size: 1 null byte + "test\0"
    879   0, 0, 0, 0, 0, 0, 0, 6,
    880   // sh_link
    881   0, 0, 0, 0,
    882   // sh_info
    883   0, 0, 0, 0,
    884   // sh_addralign
    885   0, 0, 0, 0, 0, 0, 0, 1,
    886   // sh_entsize
    887   0, 0, 0, 0, 0, 0, 0, 0,
    888 
    889   // Offset 320
    890   // Shdr 4: .shstrtab
    891   // sh_name: 1 null byte + ".test\0" + ".symtab\0" + ".strtab\0"
    892   0, 0, 0, 23,
    893   // sh_type: SHT_STRTAB
    894   0, 0, 0, 3,
    895   // sh_flags
    896   0, 0, 0, 0, 0, 0, 0, 0,
    897   // sh_addr
    898   0, 0, 0, 0, 0, 0, 0, 0,
    899   // sh_offset: after .strtab section.  438 == 0x1b6
    900   0, 0, 0, 0, 0, 0, 0x1, 0xb6,
    901   // sh_size: all section names
    902   0, 0, 0, 0, 0, 0, 0, 33,
    903   // sh_link
    904   0, 0, 0, 0,
    905   // sh_info
    906   0, 0, 0, 0,
    907   // sh_addralign
    908   0, 0, 0, 0, 0, 0, 0, 1,
    909   // sh_entsize
    910   0, 0, 0, 0, 0, 0, 0, 0,
    911 
    912   // Offset 384
    913   // Contents of .symtab section
    914   // Symbol 0
    915   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    916   0, 0, 0, 0, 0, 0, 0, 0,
    917 
    918   // Offset 408
    919   // Symbol 1
    920   // st_name
    921   0, 0, 0, 1,
    922   // st_info: STT_NOTYPE, STB_GLOBAL
    923   0x10,
    924   // st_other
    925   0,
    926   // st_shndx: In .test
    927   0, 1,
    928   // st_value
    929   0, 0, 0, 0, 0, 0, 0, 0,
    930   // st_size
    931   0, 0, 0, 0, 0, 0, 0, 0,
    932 
    933   // Offset 432
    934   // Contents of .strtab section
    935   '\0',
    936   't', 'e', 's', 't', '\0',
    937 
    938   // Offset 438
    939   // Contents of .shstrtab section
    940   '\0',
    941   '.', 't', 'e', 's', 't', '\0',
    942   '.', 's', 'y', 'm', 't', 'a', 'b', '\0',
    943   '.', 's', 't', 'r', 't', 'a', 'b', '\0',
    944   '.', 's', 'h', 's', 't', 'r', 't', 'a', 'b', '\0'
    945 };
    946 
    947 const unsigned int test_file_1_size_64_big = sizeof test_file_1_64_big;
    948 
    949 } // End namespace gold_testsuite.
    950