File: strip-dwo-groups.test

package info (click to toggle)
llvm-toolchain-9 1%3A9.0.1-16.1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 882,388 kB
  • sloc: cpp: 4,167,636; ansic: 714,256; asm: 457,610; python: 155,927; objc: 65,094; sh: 42,856; lisp: 26,908; perl: 7,786; pascal: 7,722; makefile: 6,881; ml: 5,581; awk: 3,648; cs: 2,027; xml: 888; javascript: 381; ruby: 156
file content (40 lines) | stat: -rw-r--r-- 1,267 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 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: 1{{$}}
CHECK-NEXT:     Link: 19
CHECK-NEXT:     Info: 14
CHECK:          .text._ZN1SIiE4getXEv

CHECK:          Name: .group (179)
CHECK-NEXT:     Index: 2{{$}}
CHECK-NEXT:     Link: 19
CHECK-NEXT:     Info: 13
CHECK:          .text._ZN1SIdE4getXEv
CHECK-NEXT:     .rela.text._ZN1SIdE4getXEv