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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
// REQUIRES: x86
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t.o
// RUN: echo "SECTIONS { . = SIZEOF_HEADERS; .text : { *(.text) } }" > %t.script
// RUN: ld.lld -T %t.script %t.o -o %t
// RUN: llvm-readobj --symbols %t | FileCheck %s
// Test that _start is in the correct section.
// CHECK: Name: _start
// CHECK-NEXT: Value:
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
// 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_sections4 a\x
gen_sections4 b\x
.endm
.macro gen_sections16 x
gen_sections8 a\x
gen_sections8 b\x
.endm
.macro gen_sections32 x
gen_sections16 a\x
gen_sections16 b\x
.endm
.macro gen_sections64 x
gen_sections32 a\x
gen_sections32 b\x
.endm
.macro gen_sections128 x
gen_sections64 a\x
gen_sections64 b\x
.endm
.macro gen_sections256 x
gen_sections128 a\x
gen_sections128 b\x
.endm
.macro gen_sections512 x
gen_sections256 a\x
gen_sections256 b\x
.endm
.macro gen_sections1024 x
gen_sections512 a\x
gen_sections512 b\x
.endm
.macro gen_sections2048 x
gen_sections1024 a\x
gen_sections1024 b\x
.endm
.macro gen_sections4096 x
gen_sections2048 a\x
gen_sections2048 b\x
.endm
.macro gen_sections8192 x
gen_sections4096 a\x
gen_sections4096 b\x
.endm
.macro gen_sections16384 x
gen_sections8192 a\x
gen_sections8192 b\x
.endm
.macro gen_sections32768 x
gen_sections16384 a\x
gen_sections16384 b\x
.endm
gen_sections32768 a
gen_sections16384 b
gen_sections8192 c
gen_sections4096 d
gen_sections2048 e
gen_sections1024 f
gen_sections512 g
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
|