[ELF][test] Add test for --gc-sections + many sections
authorJames Henderson <james.henderson@sony.com>
Fri, 13 Mar 2020 14:28:52 +0000 (14:28 +0000)
committerJames Henderson <james.henderson@sony.com>
Tue, 31 Mar 2020 11:41:19 +0000 (12:41 +0100)
This test covers the case where --gc-sections is used when there are
many sections. In particular, it ensures that there is no adverse
interaction with common and absolute symbols.

Reviewed by: MaskRay, grimar

Differential Revision: https://reviews.llvm.org/D76003

lld/test/ELF/many-alloc-sections.s

index 3b42dad..233f114 100644 (file)
 // CHECK-NEXT: Binding: Global
 // CHECK-NEXT: Type: None
 // CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: dm
+// CHECK-NEXT: Section: dn
+
+// Show that --gc-sections works when there are many sections, and that
+// referenced common and absolute symbols in such cases are not removed, nor are
+// they incorrectly attributed to the sections with index 0xFFF1 or 0xFFF2.
+// RUN: ld.lld %t.o -T %t.script -o %t --gc-sections
+// RUN: llvm-readobj --symbols --sections %t | FileCheck %s --check-prefix=GC
+
+// GC:      Sections [
+// GC-NEXT:   Section {
+// GC-NEXT:     Index: 0
+// GC-NEXT:     Name:  (0)
+// GC:        Section {
+// GC-NEXT:     Index: 1
+// GC-NEXT:     Name: dn
+// GC:        Section {
+// GC-NEXT:     Index: 2
+// GC-NEXT:     Name: .bss
+// GC:        Section {
+// GC-NEXT:     Index: 3
+// GC-NEXT:     Name: .comment
+// GC:        Section {
+// GC-NEXT:     Index: 4
+// GC-NEXT:     Name: .symtab
+// GC:        Section {
+// GC-NEXT:     Index: 5
+// GC-NEXT:     Name: .shstrtab
+// GC:        Section {
+// GC-NEXT:     Index: 6
+// GC-NEXT:     Name: .strtab
+// GC-NOT:    Section {
+
+// GC:      Symbols [
+// GC-NEXT:   Symbol {
+// GC-NEXT:     Name:  (0)
+// GC:        Symbol {
+// GC-NEXT:     Name: sdn
+// GC:        Symbol {
+// GC-NEXT:     Name: _start
+// GC:        Symbol {
+// GC-NEXT:     Name: abs
+// GC:        Symbol {
+// GC-NEXT:     Name: common
+// GC-NOT:    Symbol {
 
 .macro gen_sections4 x
         .section a\x,"a"
+        .global sa\x
+        sa\x:
         .section b\x,"a"
+        .global sa\x
+        sb\x:
         .section c\x,"a"
+        .global sa\x
+        sc\x:
         .section d\x,"a"
+        .global sa\x
+        sd\x:
 .endm
 
 .macro gen_sections8 x
         gen_sections16384 b\x
 .endm
 
-        .bss
-        .section bar
-
 gen_sections32768 a
 gen_sections16384 b
 gen_sections8192 c
@@ -95,12 +143,20 @@ gen_sections4096 d
 gen_sections2048 e
 gen_sections1024 f
 gen_sections512 g
-gen_sections128 h
-gen_sections64 i
-gen_sections32 j
-gen_sections16 k
-gen_sections8 l
-gen_sections4 m
+gen_sections256 h
+gen_sections128 i
+gen_sections64 j
+gen_sections32 k
+gen_sections16 l
+gen_sections8 m
+gen_sections4 n
+
+.global abs
+abs = 0x12345678
+
+.comm common,4,4
 
 .global _start
 _start:
+  .quad abs
+  .quad common