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