| # RUN: cp %p/Inputs/groups.o %t |
| # RUN: llvm-objcopy -strip-dwo %t |
| # RUN: llvm-readobj -elf-section-groups %t | FileCheck %s |
| |
| // Source code of groups.o: |
| // |
| // template <class T> |
| // struct S { |
| // static constexpr T X = T(1); |
| // T getX() { return X; } |
| // }; |
| // void f() { |
| // S<int> A; |
| // S<double> 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. |
| |
| CHECK: Name: .group (179) |
| CHECK-NEXT: Index: 17 |
| CHECK-NEXT: Link: 19 |
| CHECK-NEXT: Info: 14 |
| CHECK: .text._ZN1SIiE4getXEv (2) |
| |
| CHECK: Name: .group (179) |
| CHECK-NEXT: Index: 18 |
| CHECK-NEXT: Link: 19 |
| CHECK-NEXT: Info: 13 |
| CHECK: .text._ZN1SIdE4getXEv (4) |
| CHECK-NEXT: .rela.text._ZN1SIdE4getXEv (21) |