1# REQUIRES: x86 2## Check that group members are retained or discarded as a unit, and 3## non-SHF_ALLOC sections in a group are subject to garbage collection, 4## if at least one member has the SHF_ALLOC flag. 5 6# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o 7# RUN: ld.lld --gc-sections %t.o -o %t.dead 8# RUN: llvm-readobj -S %t.dead | FileCheck %s --check-prefix=CHECK-DEAD 9 10## .mynote.ccc is retained because it is not in a group. 11# CHECK-DEAD-NOT: Name: .myanote.aaa 12# CHECK-DEAD-NOT: Name: .mytext.aaa 13# CHECK-DEAD-NOT: Name: .mybss.aaa 14# CHECK-DEAD-NOT: Name: .mynote.aaa 15# CHECK-DEAD-NOT: Name: .myanote.bbb 16# CHECK-DEAD-NOT: Name: .mytext.bbb 17# CHECK-DEAD-NOT: Name: .mybss.bbb 18# CHECK-DEAD-NOT: Name: .mynote.bbb 19# CHECK-DEAD: Name: .mynote.ccc 20 21# RUN: ld.lld --gc-sections %t.o -o %t -e anote_aaa 22# RUN: llvm-readobj -S %t | FileCheck %s --check-prefix=CHECK-LIVE-GROUP 23# RUN: ld.lld --gc-sections %t.o -o %t -e aaa 24# RUN: llvm-readobj -S %t | FileCheck %s --check-prefix=CHECK-LIVE-GROUP 25# RUN: ld.lld --gc-sections %t.o -o %t -e bss_aaa 26# RUN: llvm-readobj -S %t | FileCheck %s --check-prefix=CHECK-LIVE-GROUP 27 28## note_zero as the entry point does not make much sense because it is defined 29## in a non-SHF_ALLOC section. This is just to demonstrate the behavior. 30# RUN: ld.lld --gc-sections %t.o -o %t -e note_aaa 31# RUN: llvm-readobj -S %t | FileCheck %s --check-prefix=CHECK-LIVE-GROUP 32 33# CHECK-LIVE-GROUP: Name: .myanote.aaa 34# CHECK-LIVE-GROUP: Name: .mytext.aaa 35# CHECK-LIVE-GROUP: Name: .mybss.aaa 36# CHECK-LIVE-GROUP: Name: .mynote.aaa 37# CHECK-LIVE-GROUP-NOT: Name: .myanote.bbb 38# CHECK-LIVE-GROUP-NOT: Name: .mytext.bbb 39# CHECK-LIVE-GROUP-NOT: Name: .mybss.bbb 40# CHECK-LIVE-GROUP-NOT: Name: .mynote.bbb 41# CHECK-LIVE-GROUP: Name: .mynote.ccc 42 43# RUN: ld.lld --gc-sections %t.o -o %t -e anote_bbb 44# RUN: llvm-readobj -S %t | FileCheck %s --check-prefix=CHECK-LIVE-COMDAT 45# RUN: ld.lld --gc-sections %t.o -o %t -e bbb 46# RUN: llvm-readobj -S %t | FileCheck %s --check-prefix=CHECK-LIVE-COMDAT 47# RUN: ld.lld --gc-sections %t.o -o %t -e bss_bbb 48# RUN: llvm-readobj -S %t | FileCheck %s --check-prefix=CHECK-LIVE-COMDAT 49 50## note_bbb as the entry point does not make much sense because it is defined 51## in a non-SHF_ALLOC section. This is just to demonstrate the behavior. 52# RUN: ld.lld --gc-sections %t.o -o %t -e note_bbb 53# RUN: llvm-readobj -S %t | FileCheck %s --check-prefix=CHECK-LIVE-COMDAT 54 55# CHECK-LIVE-COMDAT-NOT: Name: .myanote.aaa 56# CHECK-LIVE-COMDAT-NOT: Name: .mytext.aaa 57# CHECK-LIVE-COMDAT-NOT: Name: .mybss.aaa 58# CHECK-LIVE-COMDAT-NOT: Name: .mynote.aaa 59# CHECK-LIVE-COMDAT: Name: .myanote.bbb 60# CHECK-LIVE-COMDAT: Name: .mytext.bbb 61# CHECK-LIVE-COMDAT: Name: .mybss.bbb 62# CHECK-LIVE-COMDAT: Name: .mynote.bbb 63# CHECK-LIVE-COMDAT: Name: .mynote.ccc 64 65## These sections are in a zero flag group `aaa`. 66.globl anote_aaa, aaa, bss_aaa, note_aaa 67 68.section .myanote.aaa,"aG",@note,aaa 69anote_aaa: 70.byte 0 71 72.section .mytext.aaa,"axG",@progbits,aaa 73aaa: 74.byte 0 75 76.section .mybss.aaa,"awG",@nobits,aaa 77bss_aaa: 78.byte 0 79 80.section .mynote.aaa,"G",@note,aaa 81note_aaa: 82.byte 0 83 84## These sections are in a COMDAT group `bbb`. 85.globl anote_bbb, bbb, bss_bbb, note_bbb 86 87.section .myanote.bbb,"aG",@note,bbb,comdat 88anote_bbb: 89.byte 0 90 91.section .mytext.bbb,"axG",@progbits,bbb,comdat 92bbb: 93.byte 0 94 95.section .mybss.bbb,"awG",@nobits,bbb,comdat 96bss_bbb: 97.byte 0 98 99.section .mynote.bbb,"G",@note,bbb,comdat 100note_bbb: 101.byte 0 102 103## This section isn't in any group. 104.section .mynote.ccc,"",@note 105.byte 0 106