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@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: Target_test()42 Target_test() 43 : Sized_target<size, big_endian>(&test_target_info) 44 { } 45 46 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 *)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 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 *)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 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 *)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 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 *)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 emit_relocs_scan(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 *)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 relocate_relocs(const Relocate_info<size,big_endian> *,unsigned int,const unsigned char *,size_t,Output_section *,typename elfcpp::Elf_types<size>::Elf_Off,unsigned char *,typename elfcpp::Elf_types<size>::Elf_Addr,section_size_type,unsigned char *,section_size_type)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: Target_selector_test()165 Target_selector_test() 166 : Target_selector(0xffff, size, big_endian, NULL, NULL) 167 { } 168 169 virtual Target* do_instantiate_target()170 do_instantiate_target() 171 { 172 gold_unreachable(); 173 return NULL; 174 } 175 176 virtual Target* do_recognize(Input_file *,off_t,int,int,int)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* do_recognize_by_name(const char *)214 do_recognize_by_name(const char*) 215 { return NULL; } 216 217 virtual void do_supported_names(std::vector<const char * > *)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