# This tests that comdat weak symbol can be overridden by a global symbol. # comdat1.s #------------------------ # .weak g1 # .section .foo,"axG",@progbits,g1,comdat #g1: # nop # .global g2 #g2: # nop #! # #comdat2.s << \! #----------------- # .global g1 # .section .foo,"axG",@progbits,g1,comdat #g1: # nop # .global g2 #g2: # nop # #cat > g1.c << \! #int g1() { # return 0; #} # #RUN: yaml2obj -format=elf -docnum 1 %s -o %t.comdat1.o #RUN: yaml2obj -format=elf -docnum 2 %s -o %t.comdat2.o #RUN: yaml2obj -format=elf -docnum 3 %s -o %t.g1.o #RUN: lld -flavor gnu -target x86_64 %t.comdat1.o %t.comdat2.o \ #RUN: %t.g1.o --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml #RUN: lld -flavor gnu -target x86_64 %t.comdat1.o %t.comdat2.o \ #RUN: %t.g1.o --noinhibit-exec -o %t2.out #RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml #RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS #RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS #CHECKGROUP: - name: g2 #CHECKGROUP: content: [ 90 ] #CHECKGROUP: section-choice: custom-required #CHECKGROUP: section-name: .foo #CHECKGROUP: - name: g1 #CHECKGROUP: scope: global #CHECKGROUP: content: [ 55, 48, 89, E5, 31, C0, 5D, C3 ] #CHECKGROUP: alignment: 2^4 #CHECKGROUP: section-name: .text #CHECKGROUPSECTIONS: Name: .text #CHECKGROUPSECTIONS: Type: SHT_PROGBITS #CHECKGROUPSECTIONS: Flags [ #CHECKGROUPSECTIONS: SHF_ALLOC #CHECKGROUPSECTIONS: SHF_EXECINSTR #CHECKGROUPSECTIONS: ] #CHECKGROUPSECTIONS: Size: 8 #CHECKGROUPSECTIONS: Name: .foo #CHECKGROUPSECTIONS: Type: SHT_PROGBITS #CHECKGROUPSECTIONS: Flags [ #CHECKGROUPSECTIONS: SHF_ALLOC #CHECKGROUPSECTIONS: SHF_EXECINSTR #CHECKGROUPSECTIONS: ] #CHECKGROUPSECTIONS: Size: 2 #CHECKSYMBOLS: Name: g2 #CHECKSYMBOLS: Section: .foo #CHECKSYMBOLS: Name: g1 #CHECKSYMBOLS: Section: .text --- FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB OSABI: ELFOSABI_GNU Type: ET_REL Machine: EM_X86_64 Sections: - Name: .group Type: SHT_GROUP Link: .symtab AddressAlign: 0x0000000000000004 Info: g1 Members: - SectionOrType: GRP_COMDAT - SectionOrType: .foo - Name: .text Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_EXECINSTR ] AddressAlign: 0x0000000000000004 Content: '' - 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 Content: '' - Name: .foo Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ] AddressAlign: 0x0000000000000001 Content: '9090' Symbols: Local: - Name: .text Type: STT_SECTION Section: .text - Name: .data Type: STT_SECTION Section: .data - Name: .bss Type: STT_SECTION Section: .bss - Name: .foo Type: STT_SECTION Section: .foo Global: - Name: g2 Section: .foo Value: 0x0000000000000001 Weak: - Name: g1 Section: .foo ... --- FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB OSABI: ELFOSABI_GNU Type: ET_REL Machine: EM_X86_64 Sections: - Name: .group Type: SHT_GROUP Link: .symtab AddressAlign: 0x0000000000000004 Info: g1 Members: - SectionOrType: GRP_COMDAT - SectionOrType: .foo - Name: .text Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_EXECINSTR ] AddressAlign: 0x0000000000000004 Content: '' - 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 Content: '' - Name: .foo Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ] AddressAlign: 0x0000000000000001 Content: '9090' Symbols: Local: - Name: .text Type: STT_SECTION Section: .text - Name: .data Type: STT_SECTION Section: .data - Name: .bss Type: STT_SECTION Section: .bss - Name: .foo Type: STT_SECTION Section: .foo Global: - Name: g1 Section: .foo - Name: g2 Section: .foo Value: 0x0000000000000001 ... --- FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB OSABI: ELFOSABI_GNU Type: ET_REL Machine: EM_X86_64 Sections: - Name: .text Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_EXECINSTR ] AddressAlign: 0x0000000000000010 Content: 554889E531C05DC3 - 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 Content: '' - Name: .comment Type: SHT_PROGBITS Flags: [ SHF_MERGE, SHF_STRINGS ] AddressAlign: 0x0000000000000001 Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232393535372920286C6C766D2F7472756E6B203232393536332900 - Name: .note.GNU-stack Type: SHT_PROGBITS AddressAlign: 0x0000000000000001 Content: '' - Name: .eh_frame Type: SHT_PROGBITS Flags: [ SHF_ALLOC ] AddressAlign: 0x0000000000000008 Content: 1400000000000000037A5200017810011B0C0708900100001C0000001C000000000000000800000000410E108602430D0600000000000000 - Name: .rela.eh_frame Type: SHT_RELA Link: .symtab AddressAlign: 0x0000000000000008 Info: .eh_frame Relocations: - Offset: 0x0000000000000020 Symbol: .text Type: R_X86_64_PC32 Symbols: Local: - Name: g1.c Type: STT_FILE - Name: .text Type: STT_SECTION Section: .text - Name: .data Type: STT_SECTION Section: .data - Name: .bss Type: STT_SECTION Section: .bss - 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: g1 Type: STT_FUNC Section: .text Size: 0x0000000000000008 ...