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