xref: /llvm-project-15.0.7/lld/test/ELF/comdat.s (revision 052d95a6)
1// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
2// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/comdat.s -o %t2.o
3// RUN: ld.lld -shared %t.o %t.o %t2.o -o %t
4// RUN: llvm-objdump -d %t | FileCheck %s
5// RUN: llvm-readobj -s -t %t | FileCheck --check-prefix=READ %s
6// REQUIRES: x86
7
8// Check that we don't crash with --gc-section and that we print a list of
9// reclaimed sections on stderr.
10// RUN: ld.lld --gc-sections --print-gc-sections -shared %t.o %t.o %t2.o -o %t \
11// RUN:   2>&1 | FileCheck --check-prefix=GC %s
12// GC: removing unused section from '.text' in file
13// GC: removing unused section from '.text3' in file
14// GC: removing unused section from '.text' in file
15// GC: removing unused section from '.text' in file
16
17        .section	.text2,"axG",@progbits,foo,comdat,unique,0
18foo:
19        nop
20
21// CHECK: Disassembly of section .text2:
22// CHECK-NEXT: foo:
23// CHECK-NEXT:   1000: {{.*}}  nop
24// CHECK-NOT: nop
25
26        .section bar, "ax"
27        call foo
28
29// CHECK: Disassembly of section bar:
30// CHECK-NEXT: bar:
31// 0x1000 - 0x1001 - 5 = -6
32// 0      - 0x1006 - 5 = -4107
33// CHECK-NEXT:   1001:	{{.*}}  callq  -6
34// CHECK-NEXT:   1006:	{{.*}}  callq  -4107
35
36        .section .text3,"axG",@progbits,zed,comdat,unique,0
37
38
39// READ:      Name: .text2
40// READ-NEXT: Type: SHT_PROGBITS
41// READ-NEXT: Flags [
42// READ-NEXT:   SHF_ALLOC
43// READ-NEXT:   SHF_EXECINSTR
44// READ-NEXT: ]
45
46// READ:      Name: .text3
47// READ-NEXT: Type: SHT_PROGBITS
48// READ-NEXT: Flags [
49// READ-NEXT:   SHF_ALLOC
50// READ-NEXT:   SHF_EXECINSTR
51// READ-NEXT: ]
52
53// READ:      Symbols [
54// READ-NEXT:   Symbol {
55// READ-NEXT:     Name:  (0)
56// READ-NEXT:     Value: 0x0
57// READ-NEXT:     Size: 0
58// READ-NEXT:     Binding: Local
59// READ-NEXT:     Type: None
60// READ-NEXT:     Other: 0
61// READ-NEXT:     Section: Undefined
62// READ-NEXT:   }
63// READ-NEXT:   Symbol {
64// READ-NEXT:     Name: foo
65// READ-NEXT:     Value
66// READ-NEXT:     Size: 0
67// READ-NEXT:     Binding: Local
68// READ-NEXT:     Type: None
69// READ-NEXT:     Other: 0
70// READ-NEXT:     Section: .text
71// READ-NEXT:   }
72// READ-NEXT:   Symbol {
73// READ-NEXT:     Name: _DYNAMIC
74// READ-NEXT:     Value: 0x2000
75// READ-NEXT:     Size: 0
76// READ-NEXT:     Binding: Local
77// READ-NEXT:     Type: None
78// READ-NEXT:     Other [ (0x2)
79// READ-NEXT:       STV_HIDDEN
80// READ-NEXT:     ]
81// READ-NEXT:     Section: .dynamic
82// READ-NEXT:   }
83// READ-NEXT:   Symbol {
84// READ-NEXT:     Name: abc
85// READ-NEXT:     Value: 0x0
86// READ-NEXT:     Size: 0
87// READ-NEXT:     Binding: Global
88// READ-NEXT:     Type: None
89// READ-NEXT:     Other: 0
90// READ-NEXT:     Section: Undefined
91// READ-NEXT:   }
92// READ-NEXT: ]
93