Index: test/tools/llvm-objcopy/ELF/strip-dwo-groups.test =================================================================== --- test/tools/llvm-objcopy/ELF/strip-dwo-groups.test +++ test/tools/llvm-objcopy/ELF/strip-dwo-groups.test @@ -1,40 +1,80 @@ -# RUN: cp %p/Inputs/groups.o %t +# RUN: yaml2obj %s -o %t # RUN: llvm-objcopy --strip-dwo %t -# RUN: llvm-readobj --elf-section-groups %t | FileCheck %s +# RUN: llvm-readobj --symbols -S --elf-section-groups %t | FileCheck %s --implicit-check-not=debug_ -// Source code of groups.o: -// -// template -// struct S { -// static constexpr T X = T(1); -// T getX() { return X; } -// }; -// void f() { -// S A; -// S B; -// int a = A.getX(); -// int b = B.getX(); -// } -// -// clang -g -gsplit-dwarf -std=c++11 -c groups.cpp -o groups.o +## `llvm-objcopy --strip-dwo` strips out dwo sections, as a result, the index of +## the symbol table, the indices of the symbols and the indices of the sections +## which go after the removed ones will change. Consequently, the fields +## Link, Info and the content of .group need to be updated. In the past +## `llvm-objcopy --strip-dwo` used to produce invalid binaries with +## broken .group section, this test verifies the correctness of +## Link, Info and the content of this section. -// `llvm-objcopy --strip-dwo` strips out dwo sections, as a result, the index of -// the symbol table, the indices of the symbols and the indices of the sections -// which go after the removed ones will change. Consequently, the fields -// Link, Info and the content of .group need to be updated. In the past -// `llvm-objcopy --strip-dwo` used to produce invalid binaries with -// broken .group section, this test verifies the correctness of -// Link, Info and the content of this section. +# CHECK: Groups { +# CHECK: Name: .group (1) +# CHECK-NEXT: Index: 1{{$}} +# CHECK-NEXT: Link: 6 +# CHECK-NEXT: Info: 2 +# CHECK-NEXT: Type: COMDAT (0x1) +# CHECK-NEXT: Signature: group1 +# CHECK-NEXT: Section(s) in group [ +# CHECK-NEXT: .text.group1 (3) +# CHECK-NEXT: ] -CHECK: Name: .group (179) -CHECK-NEXT: Index: 1{{$}} -CHECK-NEXT: Link: 19 -CHECK-NEXT: Info: 14 -CHECK: .text._ZN1SIiE4getXEv +# CHECK: Name: .group (1) +# CHECK-NEXT: Index: 2{{$}} +# CHECK-NEXT: Link: 6 +# CHECK-NEXT: Info: 1 +# CHECK-NEXT: Type: COMDAT (0x1) +# CHECK-NEXT: Signature: group2 +# CHECK-NEXT: Section(s) in group [ +# CHECK-NEXT: .text.group2 (4) +# CHECK-NEXT: .rela.text.group2 (5) +# CHECK-NEXT: ] -CHECK: Name: .group (179) -CHECK-NEXT: Index: 2{{$}} -CHECK-NEXT: Link: 19 -CHECK-NEXT: Info: 13 -CHECK: .text._ZN1SIdE4getXEv -CHECK-NEXT: .rela.text._ZN1SIdE4getXEv +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .debug_before.dwo + Type: SHT_PROGBITS + - Name: .group + Type: SHT_GROUP + Link: .symtab + Info: group1 + Members: + - SectionOrType: GRP_COMDAT + - SectionOrType: .text.group1 + - Name: .text.group1 + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ] + - Name: '.group [1]' + Type: SHT_GROUP + Link: .symtab + Info: group2 + Members: + - SectionOrType: GRP_COMDAT + - SectionOrType: .text.group2 + - SectionOrType: .rela.text.group2 + - Name: .text.group2 + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ] + - Name: .rela.text.group2 + Type: SHT_RELA + Flags: [ SHF_GROUP ] + Info: .text.group2 + Relocations: + - Name: .debug_after.dwo + Type: SHT_PROGBITS +Symbols: + - Name: debug_before + Section: .debug_before.dwo + - Name: group2 + Section: .text.group2 + - Name: group1 + Section: .text.group1 + - Name: debug_after + Section: .debug_after.dwo