| # Test .init_array. |
| # Generated from the following C code: |
| # |
| # static void |
| # init () {} |
| # |
| # static void (*const init_array []) () |
| # __attribute__ ((used, section (".init_array"), aligned (sizeof (void *)))) |
| # = { init }; |
| # |
| # int |
| # main() { return (0); } |
| # |
| # Note: both STT_OBJECT and STT_SECTION for .init_array are commented in yaml |
| # declaration to check if lld correct adds the object's .init_array when the |
| # section has no symbol (some compilers may create object with this behavior, |
| # specially for C++ global constructors). |
| |
| #RUN: yaml2obj -format=elf %s -o=%t.o |
| #RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t -e=main |
| #RUN: llvm-objdump -t -section-headers %t | FileCheck %s |
| |
| #CHECK: .init_array {{[0-9]+}} [[ADDR:[0-9]+]] |
| #CHECK: [[ADDR]] l *ABS* {{[0-9]+}} .hidden __init_array_start |
| |
| --- |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| OSABI: ELFOSABI_FREEBSD |
| Type: ET_REL |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_EXECINSTR ] |
| AddressAlign: 0x0000000000000010 |
| Content: 554889E5B800000000C745FC000000005DC366666666662E0F1F840000000000554889E55DC3 |
| - Name: .data |
| Type: SHT_PROGBITS |
| Flags: [ SHF_WRITE, SHF_ALLOC ] |
| AddressAlign: 0x0000000000000004 |
| Content: '' |
| - Name: .bss |
| Type: SHT_NOBITS |
| Flags: [ SHF_WRITE, SHF_ALLOC ] |
| AddressAlign: 0x0000000000000004 |
| - Name: .init_array |
| Type: SHT_INIT_ARRAY |
| Flags: [ SHF_ALLOC ] |
| AddressAlign: 0x0000000000000008 |
| Content: '0000000000000000' |
| - Name: .rela.init_array |
| Type: SHT_RELA |
| Link: .symtab |
| AddressAlign: 0x0000000000000008 |
| Info: .init_array |
| Relocations: |
| - Offset: 0x0000000000000000 |
| Symbol: .text |
| Type: R_X86_64_64 |
| Addend: 32 |
| - Name: .comment |
| Type: SHT_PROGBITS |
| Flags: [ SHF_MERGE, SHF_STRINGS ] |
| AddressAlign: 0x0000000000000001 |
| Content: 004672656542534420636C616E672076657273696F6E20332E342E312028746167732F52454C454153455F33342F646F74312D66696E616C203230383033322920323031343035313200 |
| - Name: .note.GNU-stack |
| Type: SHT_PROGBITS |
| AddressAlign: 0x0000000000000001 |
| Content: '' |
| - Name: .eh_frame |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| AddressAlign: 0x0000000000000008 |
| Content: 1400000000000000017A5200017810011B0C070890010000180000001C000000000000001200000000410E108602430D060000001800000038000000000000000600000000410E108602430D06000000 |
| - Name: .rela.eh_frame |
| Type: SHT_RELA |
| Link: .symtab |
| AddressAlign: 0x0000000000000008 |
| Info: .eh_frame |
| Relocations: |
| - Offset: 0x0000000000000020 |
| Symbol: .text |
| Type: R_X86_64_PC32 |
| - Offset: 0x000000000000003C |
| Symbol: .text |
| Type: R_X86_64_PC32 |
| Addend: 32 |
| Symbols: |
| Local: |
| - Name: init |
| Type: STT_FUNC |
| Section: .text |
| Value: 0x0000000000000020 |
| Size: 0x0000000000000006 |
| # - Name: init_array |
| # Type: STT_OBJECT |
| # Section: .init_array |
| # Size: 0x0000000000000008 |
| - Name: .text |
| Type: STT_SECTION |
| Section: .text |
| - Name: .data |
| Type: STT_SECTION |
| Section: .data |
| - Name: .bss |
| Type: STT_SECTION |
| Section: .bss |
| # - Name: .init_array |
| # Type: STT_SECTION |
| # Section: .init_array |
| - Name: .comment |
| Type: STT_SECTION |
| Section: .comment |
| - Name: .note.GNU-stack |
| Type: STT_SECTION |
| Section: .note.GNU-stack |
| - Name: .eh_frame |
| Type: STT_SECTION |
| Section: .eh_frame |
| Global: |
| - Name: main |
| Type: STT_FUNC |
| Section: .text |
| Size: 0x0000000000000012 |
| ... |